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

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

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

In message pan.2006.07.07.14.13.32.809057@alarsen.net you wrote:
With the hush parser you can use a trick like e.g. setenv bootcmd setenv bootargs ip=${ipaddr} ... ; bootm 0x10040000
The same works exactly like this using the simple parser, btw. (even using the same syntax).
Best regards,
Wolfgang Denk
participants (3)
-
Anders Larsen
-
Andrew Zhukov
-
Wolfgang Denk