[U-Boot-Users] Wrong location of environment. Copy environment, substitute variables?

Anders Larsen al at alarsen.net
Fri Jul 7 16:13:32 CEST 2006


On Fri, 07 Jul 2006 17:02:23 +0300, Andrew Zhukov wrote:

> I have at91rm9200dk with SPI DataFlash only (without Flash), u-boot
> 1.1.4, kernel 2.6.10.
> 
> I'd like the kernel to use u-boot's "bootargs" as cmdline. To use
> u-boot's data the kernel should know its absolute locations...
> I see the kernel expects environment at TEXT_BASE + 0x100 (that's
> 20000100), but u-boot places environment at 21ede00c (result of function
> env_get_addr(0)). I believe the last will move if I edit smth in u-boot.
> 
> Summary: in function do_bootm (where u-boot starts loading the kernel),
> I should copy the whole environment to the area starting from location
> 20000100.
> 
> Is this right way?

No no no!
The kernel expects a tagged list of parameters at 0x20000100; this list
includes - among other values - the contents of "bootargs" tagged as
command-line "ATAG_CMDLINE" (only the contents of bootargs is copied;
other u-boot environment variables are not).

This already works out-of-the-box.

> Trouble: bootm doesn't substitute variables (${ipaddr} ${serverip}
> etc.). I should copy-substitute. There should be a function for
> substitution - does anybody know?

With the hush parser you can use a trick like e.g.
setenv bootcmd setenv bootargs ip=${ipaddr} ... \; bootm 0x10040000

'boot' will then set the bootargs variable just prior to booting.

Cheers
 Anders





More information about the U-Boot mailing list