Interesting enough the Dreamplug comes from the factory (2011-03-01 version) without this functionality, U-Boot will not recognize an external SD card, however, their downloadable U-Boot (2011-03-28 version) DOES, go figure.
The update process is a little tricky since it uses a different kind of FLASH, but similar to the Guruplug.
First, the new bootloader is from their website:
http://code.google.com/p/dreamplug/downloads/listDownload the file "dream_burn_spi.tar.bz2"
This is the factory reflashing and testing utility I believe.
This also has the openocd program in it too to recover from a "bricked" Dreamplug through the JTAG interface, however, we are just interested in the U-Boot image right now.
Inside the archive, extract the following file and place it in a folder you can access from TFTP*
dream_burn_spi/testenv/sheevaplug/openocd.binaries/bin/u-boot-kwb
This should be the March 28th, 2011 release, however, it does not include EXT2/3 support, so you will still need to use a FAT partition to load the initial kernel, however, it is a start to having a fully self-contained operating system on a single external SD card.
Connect it up to your serial port and open up minicom (or other terminal emulation software).
Powerup the device and interrupt the boot sequence by pressing any key (have about 3 seconds).
Issue these commands (don't worry we are not saving them, they disapear on reboot).
setenv ipaddr 192.168.1.10 (ipaddress you want to set for the Dreamplug)
setenv serverip 192.168.1.1 (ipaddress of the workstation running TFTP server)
***now we are going to TFTP the new uboot into DRAM
tftp 0x6400000 u-boot.kwb
Make note of how much transfered (in hex) will need it later, of course you can overwrite all the flash but I prefer only writing the necessary parts, so just keep track of it.
I got 150544 (24c10 hex)
***the file should copy over
***issue the following command to erase the current bootloader
***if you powercycle between the erase and write commands your device will have no bootloader, aka bricked, complete the erase and write commands quickly.
sf probe 0
sf erase 0x0 0x100000
sf write 0x6400000 0x0 0x24c10
***reset the device, if all went well you will see it restart
reset
***below is what I had on my screen through the process from start to end
U-Boot 2011.06-02334-g8f495d9-dirty (Mar 28 2011 - 05:21:06)
Marvell-DreamPlug
SoC: Kirkwood 88F6281_A0
DRAM: 512 MiB
SF: Detected MX25L1606 with page size 256, total 1 MiB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: egiga0, egiga1
88E1121 Initialized on egiga0
88E1121 Initialized on egiga1
Hit any key to stop autoboot: 0
Marvell>> setenv ipaddr 192.168.1.19
Marvell>> setenv serverip 192.168.1.11
Marvell>> tftp 0x6400000 u-boot.kwb
Using egiga0 device
TFTP from server 192.168.1.11; our IP address is 192.168.1.19
Filename 'u-boot.kwb'.
Load address: 0x6400000
Loading: ###########
done
Bytes transferred = 150544 (24c10 hex)
Marvell>> sf probe 0
SF: Detected MX25L1606 with page size 256, total 1 MiB
1024 KiB MX25L1606 at 0:0 is now current device
Marvell>> sf erase 0x0 0x100000
Marvell>> sf write 0x6400000 0x0 0x24c10
Marvell>> reset
resetting ...
U-Boot 2011.06-02334-g8f495d9-dirty (Mar 28 2011 - 05:21:06)
Marvell-DreamPlug
SoC: Kirkwood 88F6281_A0
DRAM: 512 MiB
SF: Detected MX25L1606 with page size 256, total 1 MiB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: egiga0, egiga1
88E1121 Initialized on egiga0
88E1121 Initialized on egiga1
Hit any key to stop autoboot: 0
Marvell>>
The help and error messages are not very useful in this version of U-Boot.
Now, to get your external SD card booting, you will need to make some changes to the enviornment settings. Your SD card will need to have a FAT partition since the bootloader (U-Boot) can't read EXT2/3 (yet!). The first partition on the SD card needs to hold the kernel (fat16, I think fat32 works too). The partition only needs to be about 5MB in size, just enough for the kernel. If you want to store multiple kernels, then you can make it bigger. The next partition is the root filesystem. This can be EXT2/3 since after the kernel boots it will be able to mount it.
If you want to just see if the kernel CAN load without actually booting it, insert your SD card and issue the command "usb start" at the "Marvell>>" prompt. It should tell you what it detects. The commands "usb tree" and "usb info" may also help. I don't know how devices will switch around (sda, sdb, sdc, etc) when a USB stick is also plugged in.
I suggest backing up what you have, use printenv to print them out.
This is what my printout looked like:
Marvell>> printenv
bootcmd=setenv ethact egiga0; ${x_bootcmd_ethernet}; setenv ethact egiga1; ${x;
bootdelay=3
baudrate=115200
x_bootcmd_ethernet=ping 192.168.2.1
x_bootcmd_usb=usb start
x_bootcmd_kernel=fatload usb 0 0x6400000 uImage
x_bootargs=console=ttyS0,115200
x_bootargs_root=root=/dev/sda2 rootdelay=10
stdin=serial
stdout=serial
stderr=serial
ethaddr=F0:AD:4E:00:73:AC
ethact=egiga0
eth1addr=F0:AD:4E:00:73:AD
Environment size: 524/4092 bytes
Marvell>>
You will need to issue the following commands:
editenv x_bootcmd_kernel
***enter this text when it prompts
fatload usb 1 0x6400000 uImage
editenv x_bootargs_root
***enter this text when it prompts
root=/dev/sdb2 rootdelay=10
***set your network interface machine (MAC) addresses, they are erased when you load a new U-Boot
***they are found on the label on the bottom of the Dreamplug, the last byte was changed to xx incase someone just does a copy/paste, and mine is not duplicated by mistake.
setenv ethaddr=F0:AD:4E:00:73:xx
setenv eth1addr=F0:AD:4E:00:73:xx
***save the enviornment variables
saveenv
***issue the reset
reset
I don't know why the USB device does not show up in the tree, however, you can still use "ffatload usb 1 0x6400000 uImage" and it will read off the external SD card.
Here is the printout from some commands for reference:
Marvell>> usb start
(Re)start USB...
USB: Register 10011 NbrPorts 1
USB EHCI 1.00
scanning bus for devices... 4 USB Device(s) found
scanning bus for storage devices... 2 Storage Device(s) found
Marvell>> usb tree
Device Tree:
1 Hub (480 Mb/s, 0mA)
| u-boot EHCI Host Controller
|
+-2 Hub (480 Mb/s, 100mA)
| USB 2.0 Hub
|
+-3 Mass Storage (480 Mb/s, 500mA)
| USB Storage 000000009910
|
+-4 Audio (12 Mb/s, 500mA)
C-Media USB Headphone Set
Marvell>> usb info
1: Hub, USB Revision 2.0
- u-boot EHCI Host Controller
- Class: Hub
- PacketSize: 64 Configurations: 1
- Vendor: 0x0000 Product 0x0000 Version 1.0
Configuration: 1
- Interfaces: 1 Self Powered 0mA
Interface: 0
- Alternate Setting 0, Endpoints: 1
- Class Hub
- Endpoint 1 In Interrupt MaxPacket 8 Interval 255ms
2: Hub, USB Revision 2.0
- USB 2.0 Hub
- Class: Hub
- PacketSize: 64 Configurations: 1
- Vendor: 0x1a40 Product 0x0101 Version 1.17
Configuration: 1
- Interfaces: 1 Self Powered Remote Wakeup 100mA
Interface: 0
- Alternate Setting 0, Endpoints: 1
- Class Hub
- Endpoint 1 In Interrupt MaxPacket 1 Interval 12ms
3: Mass Storage, USB Revision 2.0
- USB Storage 000000009910
- Class: (from Interface) Mass Storage
- PacketSize: 64 Configurations: 1
- Vendor: 0x05e3 Product 0x0726 Version 153.16
Configuration: 1
- Interfaces: 1 Bus Powered 500mA
Interface: 0
- Alternate Setting 0, Endpoints: 2
- Class Mass Storage, Transp. SCSI, Bulk only
- Endpoint 1 In Bulk MaxPacket 512
- Endpoint 2 Out Bulk MaxPacket 512
4: Audio, USB Revision 1.10
- C-Media USB Headphone Set
- Class: (from Interface) Audio
- PacketSize: 64 Configurations: 1
- Vendor: 0x0d8c Product 0x000c Version 1.0
Configuration: 1
- Interfaces: 4 Bus Powered Remote Wakeup 500mA
Interface: 0
- Alternate Setting 0, Endpoints: 0
- Class Audio
Interface: 1
- Alternate Setting 0, Endpoints: 0
- Class Audio
- Endpoint 1 Out Isochronous MaxPacket 200
Interface: 2
- Alternate Setting 0, Endpoints: 0
- Class Audio
- Endpoint 2 In Isochronous MaxPacket 100
Interface: 3
- Alternate Setting 0, Endpoints: 1
- Class Human Interface, Subclass: None
- Endpoint 3 In Interrupt MaxPacket 4 Interval 32ms
Marvell>>
Hopefully this helps some people out, I have been doing a lot of work lately trying to figure out how these new Dreamplugs work, and have also figured out how to recover them if they "brick." Also, to note, the original - original bootloader that is on them now is not available for download (as far as I can tell) but I have archived it off this Dreamplug if there is a need for it. It is tricky to backup since the NOR FLASH can't be accessed through the linux operating system, it has to be dumped using the U-Boot bootloader.