[U-Boot-Users] embedding environment by hand

Robin Getz rgetz at blackfin.uclinux.org
Mon Oct 15 06:59:20 CEST 2007


On Wed 10 Oct 2007 19:28, Wolfgang Denk pondered:
> I'm afraid I don't understand what you're trying to say.

The LDR file format, is an ELF-like container that the Blackfin on-chip 
BootROM understands/requires on new chips. Rather than putting an ELF 
relocator into the bootrom, and forcing everyone to use ELF files, ADI (not 
me) made up their own file format. If you are interested, I can point you to 
the spec, but my guess is you don't really care.

The Blackfin (on newer devices) has no way to do execute in place, or load the 
u-boot.bin file from flash - I was told that this was done to enable/ensure 
secure boot. (The first instruction fetch on a reset is always the internal 
ROM), depending on the settings of external pins & internal registers (OTP), 
it can load a bootstream (from NAND, NOR, SPI Flash, I2C EEPROM, or UART), 
potentially validate a checksum, or signature, and either halt, or continue 
to run/load.

To boot from the newer parts - since we can't use the u-boot.bin file anymore, 
we are required to create the ADI made up LDR file format.

What Mike has done is to create a tool/utility that takes the standard u-boot 
(elf) file, and re-packages it into the LDR container. This is distributed 
with the Blackfin Toolchain rpm/deb/emerge/src under the GPL.

Does that make sense?

Things are complicated by the fact that this LDR format is not static - and 
continues to evolve with every new part that comes out, as the person who 
writes the BootROM decides to add new features, that require new switches and 
bit fields in the LDR stream.

If so, back to Mike's question:

We are having problems embedding the U-Boot environment into this ldr file.

The utility that repackages the u-boot (elf) into the u-boot.ldr has the 
ability to reserve space inside of the LDR image. For example - we can tell 
it to reserve/leave blank, the area from 0x4000 to 0x6000.

In the board configuration file, we say the environment lives at an offset of 
0x4000 (to correspond to one of the flash sectors) of size say 0x2000.  the 
utility is then told to generate space at an offset in u-boot.ldr at offset 
0x4000 of size 0x2000.  now the u-boot.ldr can be burned into flash without a 
problem and saving of the environment is OK.

This seems to work OK.
 
However, the initial u-boot (elf) is generated without the default environment
programmed into it.

Our proposal is to introduce:
 - a new define "ENV_IS_EMBEDDED_CUSTOM" and
 - add a new flag to the envcrc helper. 

this would allow the environment.o linked into u-boot.bin to be empty/blank 
and we can use envcrc helper to extract the environment blob so that the blob 
can be passed to external utilities for embedding.




More information about the U-Boot mailing list