[U-Boot] DreamPlug bootloader replacement

All,
I'm attempting to replace u-boot on the new dreamplug. This is different from the guruplug and sheevaplug in that the bootloader is stored in a 1MB (!) flash connected via SPI. I was able to dump the factory u-boot to a file, and it's header looks strikingly similar to the u-boot.kwb image I used on my guruplug. However, the first 32 bits, supposedly the magic number, are different. Is that important?
Here's the first 0x100 bytes starting at 0x0.
### factory dreamplug image ########################################### 0000000: 5a 00 00 00 54 49 02 00 00 00 00 00 00 02 00 00 0000010: 00 00 60 00 00 00 60 00 00 00 00 00 00 00 01 bc 0000020: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000040: e0 00 d1 ff 9b 9b 1b 1b 00 14 d0 ff 30 0c 00 43 0000050: 04 14 d0 ff 00 30 54 37 08 14 d0 ff 51 54 12 22 0000060: 0c 14 d0 ff 33 0a 00 00 10 14 d0 ff cc 00 00 00 0000070: 14 14 d0 ff 00 00 00 00 18 14 d0 ff 00 00 00 00 0000080: 1c 14 d0 ff 52 0c 00 00 20 14 d0 ff 40 00 00 00 0000090: 24 14 d0 ff 7f f1 00 00 28 14 d0 ff 20 55 08 00 00000a0: 7c 14 d0 ff 52 85 00 00 00 15 d0 ff 00 00 00 00 00000b0: 04 15 d0 ff f1 ff ff 0f 08 15 d0 ff 00 00 00 10 00000c0: 0c 15 d0 ff f5 ff ff 0f 14 15 d0 ff 00 00 00 00 00000d0: 1c 15 d0 ff 00 00 00 00 94 14 d0 ff 00 00 03 00 00000e0: 98 14 d0 ff 00 00 00 00 9c 14 d0 ff 03 e8 00 00 00000f0: 80 14 d0 ff 01 00 00 00 00 00 00 00 00 00 00 00 ### end factory dreamplug image #######################################
And, here's my u-boot.kwb:
### my u-boot.kwb ##################################################### 0000000: 8b 00 00 08 58 9d 03 00 00 00 00 00 00 02 00 00 0000010: 00 00 60 00 00 00 60 00 00 00 00 00 00 00 01 4e 0000020: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000040: e0 00 d1 ff 9b 9b 1b 1b 00 14 d0 ff 30 0c 00 43 0000050: 04 14 d0 ff 00 30 54 37 08 14 d0 ff 51 54 12 22 0000060: 0c 14 d0 ff 33 0a 00 00 10 14 d0 ff cc 00 00 00 0000070: 14 14 d0 ff 00 00 00 00 18 14 d0 ff 00 00 00 00 0000080: 1c 14 d0 ff 52 0c 00 00 20 14 d0 ff 40 00 00 00 0000090: 24 14 d0 ff 7f f1 00 00 28 14 d0 ff 20 55 08 00 00000a0: 7c 14 d0 ff 52 85 00 00 00 15 d0 ff 00 00 00 00 00000b0: 04 15 d0 ff f1 ff ff 0f 08 15 d0 ff 00 00 00 10 00000c0: 0c 15 d0 ff f5 ff ff 0f 14 15 d0 ff 00 00 00 00 00000d0: 1c 15 d0 ff 00 00 00 00 94 14 d0 ff 00 00 03 00 00000e0: 98 14 d0 ff 00 00 00 00 9c 14 d0 ff 03 e8 00 00 00000f0: 80 14 d0 ff 01 00 00 00 00 00 00 00 00 00 00 00 ### end my u-boot.kwb #################################################
Also, before I do a 'sf erase...; sf write...' I'd like to know I can recover via the jtag, if necessary. In theory, I should be able to load the factory image into RAM via jtag, and run it. Then, use tftpload and 'sf write' to restore the factory bootloader. What I'm missing is how to directly burn the spi flash from openocd. Has anyone done this? Is there a config I can reference?
thx,
Jason.

I have posted instructions in the following place, please take a look. I have been able to do a full dump and reload of the DreamPlug. I would be more than happy to entertain any questions.
http://www.newit.co.uk/forum/index.php/topic,1977.0.html
I have also built a current version of openocd (0.4.0) with the correct config files. The trick with the DreamPlug is that openocd does not know how to write to the SPI NOR flash, however, you can startup off a previous bootloader using the JTAG, and also use the JTAG to place the bootloader you want to replace in memory at a location, then use the "sf erase" "sf write" commands to replace it.
Please take a look at the post, let me know if you need any of the original files from it, or the openocd. What I would REALLY like to do is know how to get U-Boot to build me a new bootloader, if you have accomplished this, please share. I don't know how to edit the board/guruplug.cfg file in the U-Boot source tree to match the configuration on the DreamPlug, It always freezes on boot right after detecting the DRAM size (and it is incorrect).
My first "dump" from the original bootloader was using the "md" command and copying it from the terminal window, and using a Perl script, convert that to a .bin file. So I have the original original bootloader, the one offered for download is dated 2011-03-28 while the one shipped is dated 2011-03-01, if I recall correctly.
--Allan
-----Original Message----- From: u-boot-bounces@lists.denx.de on behalf of Jason Sent: Wed 4/20/2011 7:12 AM To: u-boot@lists.denx.de Subject: [U-Boot] DreamPlug bootloader replacement
All,
I'm attempting to replace u-boot on the new dreamplug. This is different from the guruplug and sheevaplug in that the bootloader is stored in a 1MB (!) flash connected via SPI. I was able to dump the factory u-boot to a file, and it's header looks strikingly similar to the u-boot.kwb image I used on my guruplug. However, the first 32 bits, supposedly the magic number, are different. Is that important?
Here's the first 0x100 bytes starting at 0x0.
### factory dreamplug image ########################################### 0000000: 5a 00 00 00 54 49 02 00 00 00 00 00 00 02 00 00 0000010: 00 00 60 00 00 00 60 00 00 00 00 00 00 00 01 bc 0000020: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000040: e0 00 d1 ff 9b 9b 1b 1b 00 14 d0 ff 30 0c 00 43 0000050: 04 14 d0 ff 00 30 54 37 08 14 d0 ff 51 54 12 22 0000060: 0c 14 d0 ff 33 0a 00 00 10 14 d0 ff cc 00 00 00 0000070: 14 14 d0 ff 00 00 00 00 18 14 d0 ff 00 00 00 00 0000080: 1c 14 d0 ff 52 0c 00 00 20 14 d0 ff 40 00 00 00 0000090: 24 14 d0 ff 7f f1 00 00 28 14 d0 ff 20 55 08 00 00000a0: 7c 14 d0 ff 52 85 00 00 00 15 d0 ff 00 00 00 00 00000b0: 04 15 d0 ff f1 ff ff 0f 08 15 d0 ff 00 00 00 10 00000c0: 0c 15 d0 ff f5 ff ff 0f 14 15 d0 ff 00 00 00 00 00000d0: 1c 15 d0 ff 00 00 00 00 94 14 d0 ff 00 00 03 00 00000e0: 98 14 d0 ff 00 00 00 00 9c 14 d0 ff 03 e8 00 00 00000f0: 80 14 d0 ff 01 00 00 00 00 00 00 00 00 00 00 00 ### end factory dreamplug image #######################################
And, here's my u-boot.kwb:
### my u-boot.kwb ##################################################### 0000000: 8b 00 00 08 58 9d 03 00 00 00 00 00 00 02 00 00 0000010: 00 00 60 00 00 00 60 00 00 00 00 00 00 00 01 4e 0000020: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000040: e0 00 d1 ff 9b 9b 1b 1b 00 14 d0 ff 30 0c 00 43 0000050: 04 14 d0 ff 00 30 54 37 08 14 d0 ff 51 54 12 22 0000060: 0c 14 d0 ff 33 0a 00 00 10 14 d0 ff cc 00 00 00 0000070: 14 14 d0 ff 00 00 00 00 18 14 d0 ff 00 00 00 00 0000080: 1c 14 d0 ff 52 0c 00 00 20 14 d0 ff 40 00 00 00 0000090: 24 14 d0 ff 7f f1 00 00 28 14 d0 ff 20 55 08 00 00000a0: 7c 14 d0 ff 52 85 00 00 00 15 d0 ff 00 00 00 00 00000b0: 04 15 d0 ff f1 ff ff 0f 08 15 d0 ff 00 00 00 10 00000c0: 0c 15 d0 ff f5 ff ff 0f 14 15 d0 ff 00 00 00 00 00000d0: 1c 15 d0 ff 00 00 00 00 94 14 d0 ff 00 00 03 00 00000e0: 98 14 d0 ff 00 00 00 00 9c 14 d0 ff 03 e8 00 00 00000f0: 80 14 d0 ff 01 00 00 00 00 00 00 00 00 00 00 00 ### end my u-boot.kwb #################################################
Also, before I do a 'sf erase...; sf write...' I'd like to know I can recover via the jtag, if necessary. In theory, I should be able to load the factory image into RAM via jtag, and run it. Then, use tftpload and 'sf write' to restore the factory bootloader. What I'm missing is how to directly burn the spi flash from openocd. Has anyone done this? Is there a config I can reference?
thx,
Jason. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

On Wed, Apr 20, 2011 at 12:57:10PM -0700, Drassal, Allan wrote:
I have posted instructions in the following place, please take a look. I have been able to do a full dump and reload of the DreamPlug. I would be more than happy to entertain any questions.
Awesome! Thanks for the help.
I have also built a current version of openocd (0.4.0) with the correct config files. The trick with the DreamPlug is that openocd does not know how to write to the SPI NOR flash, however, you can startup off a previous bootloader using the JTAG, and also use the JTAG to place the bootloader you want to replace in memory at a location, then use the "sf erase" "sf write" commands to replace it.
Yes, that's my backup plan. It would be nice if openocd could write SPI flash.
Apparently, they don't know how either (.../target/board/dreamplug.cfg):
proc dreamplug_burn_uboot { } {
# load u-Boot into RAM and execute it sheevaplug_init load_image ./u-boot load_image u-boot.kwb 0x6400000 # load_image u-boot.kwb 0x900000 resume 0x00600000
}
hehehe...
Please take a look at the post, let me know if you need any of the original files from it, or the openocd. What I would REALLY like to do is know how to get U-Boot to build me a new bootloader, if you have accomplished this, please share. I don't know how to edit the board/guruplug.cfg file in the U-Boot source tree to match the configuration on the DreamPlug, It always freezes on boot right after detecting the DRAM size (and it is incorrect).
I'm going to fire off an email to them now. They usually don't respond, but it gives me an excuse to call them. ;-)
thx,
Jason.
participants (2)
-
Drassal, Allan
-
Jason