The process is fairly straight forward, but there are some requirements:

  1. A TFTP server with some specific files. These should all be in the root of the TFTP directory.
    1. The latest version of the SheevaPlug U-Boot binary.
    2. The latest version of the Debian installer image (uImage and uInitrd).
    3. The latest version of the Linux kernel (optimized for SheevaPlug; uImage and Modules).
  2. A 2+ GB USB thumb drive.
  3. Terminal emulation software (GNU screen, PuTTY, minicom, HyperTerm) [Note: Mac OS X’s version of screen seems to have issues with the debian installer, so I used PuTTY in a VM.]

There’s a lot of interrupting the initial boot process, which requires fairly fast attachment of your terminal. If you’re using a VM environment, make sure you tell it to remember your “Attach to Host or VM?” preference, otherwise you’ll miss the interrupt prompt.

Upgrade U-Boot

  1. Reset the SheevaPlug
  2. Interrupt the boot process

    1. “Hit any key to stop autoboot:”
  3. Document the MAC address

    Marvell>> print ethaddr
  4. Boot using TFTP

    Marvell>> setenv ipaddr x.x.x.x
    Marvell>> setenv serverip y.y.y.y
    Marvell>> tftpboot 0x0800000 u-boot.kwb
    Marvell>> nand erase 0x0 0x60000
    Marvell>> nand write 0x0800000 0x0 0x60000
    Marvell>> reset
  5. Fix the MAC address by interrupting the boot process (the new U-Boot loses the setting).

    Marvell>> setenv ethaddr FF:FF:FF:FF:FF:FF
    Marvell>> saveenv
    Marvell>> reset

Burn the new kernel

Marvell>> setenv ipaddr x.x.x.x
Marvell>> setenv serverip y.y.y.y
Marvell>> tftpboot 0x2000000 sheeva-3.4.7-uImage
Marvell>> iminfo
Marvell>> nand erase 0x100000 0x400000
Marvell>> nand write 0x2000000 0x100000 0x400000
Marvell>> setenv mainlineLinux yes
Marvell>> setenv arcNumber 2097
Marvell>> saveenv

Install Debian

For this section, I recommend using PuTTy on a Windows VM. Or at least something other than GNU Screen on Mac OS X. It doesn’t play nice with the Debian installer character set for some reason. You can try using SynchTERM on Mac OS X, but it still isn’t quite right and it becomes very easy to check the wrong boxes.

Marvell>> setenv ipaddr x.x.x.x
Marvell>> setenv serverip y.y.y.y
Marvell>> tftpboot 0x0400000 uImage
Marvell>> tftpboot 0x0800000 uInitrd
Marvell>> setenv bootargs console=ttyS0,115200 base-installer/initramfs-tools/driver-policy=most
Marvell>> bootm 0x0400000 0x0800000

Once in the installer, answer the defaults to all the questions, set a root password, etc. When you get to the disk partitioning, it should not detect any disks and will ask to configure iSCSI.

  1. Plug in a USB pen drive
  2. Use [TAB] to select Go Back
  3. Select “Disk Partitioning” again
  4. The USB drive is now detected
  5. Use default partitioning (everything in /)
  6. Be careful selecting packages. I only select the SSH server and NOT Standard System Utilities — otherwise you’ll fill the SheevaPlug
  7. Once finished, interrupt boot process and boot from USB:

    Marvell>> setenv bootargs_console console=ttyS0,115200
    Marvell>> setenv bootcmd_usb 'usb start; ext2load usb 0:1 0x0800000 /uInitrd; ext2load usb 0:1 0x400000 /uImage'
    Marvell>> setenv bootcmd 'setenv bootargs $(bootargs\_console); run bootcmd\_usb; bootm 0x400000 0x0800000'
    Marvell>> boot
  8. Set up UBIFS (so much faster than JFFS2; 2+ minute boot down to 20 seconds)

    # apt-get install mtd-utils
    # ubiformat /dev/mtd2 -s 512
    # ubiattach /dev/ubi_ctrl -m 2
    # ubimkvol /dev/ubi0 -N rootfs -m
    # mount -t ubifs ubi0:rootfs /mnt
  9. Clone the USB root to the internal flash (UBIFS)

    # mkdir /tmp/rootfs
    # mount -o bind / /tmp/rootfs/
    # cd /tmp/rootfs
    # sync
    # cp -a . /mnt/
  10. Fix the /mnt/etc/fstab file

    # cat << END > /mnt/etc/fstab
    /dev/root / ubifs defaults,noatime,rw 0 0
    tmpfs /var/run tmpfs size=1M,rw,nosuid,mode=0755 0 0
    tmpfs /var/lock tmpfs size=1M,rw,noexec,nosuid,nodev,mode=1777 0 0
    tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0
  11. Reboot — interrupt boot cycle, unplug USB

  12. Reconfigure the boot command

    Marvell>> setenv bootargs 'console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs'
    Marvell>> saveenv
    Marvell>> reset
  13. Install some packages

    # apt-get install sudo