[U-Boot-Users] U-boot environment not loading from flash

Hi,
I am using latest u-boot with an ARM Integrator/CP board (16MB flash). Everything is fine except that when I save the environment in the flash and reboot the system, u-boot restarts with the environment variables it was compiled with, not what has been saved in the flash sector. I used the md command to peek into the specified flash sector (0x24f80000) and I did see the saved environment stuff in there. It just seems that it does not get reloaded and also it does not give any error about bad CRC of the environment variables saved in flash. CFG_ENV_IS_IN_FLASH is defined as (1). I can always recompile with the correct environment variables but I should not need to if this feature works.
Any clues anyone??
Regards, Umar

In message 43ED3544.3040007@quartics.com you wrote:
I am using latest u-boot with an ARM Integrator/CP board (16MB flash). Everything is fine except that when I save the environment in the flash and reboot the system, u-boot restarts with the environment variables it was compiled with, not what has been saved in the flash sector. I used
...
Any clues anyone??
Sounds as if your system was misconfigured.
Best regards,
Wolfgang Denk

Wolfgang Denk wrote:
In message 43ED3544.3040007@quartics.com you wrote:
I am using latest u-boot with an ARM Integrator/CP board (16MB flash). Everything is fine except that when I save the environment in the flash and reboot the system, u-boot restarts with the environment variables it was compiled with, not what has been saved in the flash sector. I used
...
Any clues anyone??
Sounds as if your system was misconfigured.
Best regards,
Wolfgang Denk
Yes, indeed. What source file/configuration define do I need to look at to see the cause of this problem??
Regards, Umar

In message 43ED4459.3060007@quartics.com you wrote:
Sounds as if your system was misconfigured.
...
Yes, indeed. What source file/configuration define do I need to look at to see the cause of this problem??
In the first step: your board configuration file(s), i. e. include/config/<board>.h and board/<board>/config.mk
Best regards,
Wolfgang Denk

Wolfgang Denk wrote:
In message 43ED4459.3060007@quartics.com you wrote:
Sounds as if your system was misconfigured.
...
Yes, indeed. What source file/configuration define do I need to look at to see the cause of this problem??
In the first step: your board configuration file(s), i. e. include/config/<board>.h and board/<board>/config.mk
Best regards,
Wolfgang Denk
Hi,
I have made some progress on this issue. I thought that fully describing the scenario might help in deciphering the solution.
I am working without the ARM JTAG tools. In order to get U-Boot up and flashed, I had to rely on the ARM bootPROM monitor that comes built-in in the Integrator/CP board. So to get U-Boot flashed, I take the U-Boot binary and run the following command on it:
arm-linux-objcopy --change-address 0x24000000 -I binary -O srec u-boot.bin my-u-boot.srec
The command above changes the base address fro 0x1000000 (SDRAM) to 0x24000000 (first sector of the flash chip). I send this srec file to the monitor which flashes the file to the flash chip. This allows me to flip a switch on the board and the ARM bootPROM monitor to run the image at location 0x24000000.
The problem I am encountering is that U-Boot does not load the saved environment variables from flash but rather uses the ones that have been compiled-in with the code. I found out this is happening because of the following code in include/environment.h:
# if (CFG_ENV_ADDR >= CFG_MONITOR_BASE) && \ (CFG_ENV_ADDR+CFG_ENV_SIZE) <= (CFG_MONITOR_BASE + CFG_MONITOR_LEN) # define ENV_IS_EMBEDDED 1 # endif
So, in common/env_flash.c, I put the following at the beginning:
#undef ENV_IS_EMBEDDED
This changes the environment address to 0x24f80000, which is the correct address. However, when I print the environment using the "printenv" command I get:
Integrator-CP # printenv bo´ cm´ cp´ x2´ 80´ 0 ´ 7f´ 0´ 00´ 0;´ oo´
An "md" command on that address reveals the following memory contents:
Integrator-CP # md 0x24f80000 24f80000: 00b4d8f9 00b46f62 00b46d63 00b47063 ....bo..cm..cp.. 24f80010: 00b43278 00b43038 00b42030 00b46637 x2..80..0 ..7f.. 24f80020: 00b43020 00b43030 00b43b30 00b46f6f 0..00..0;..oo.. 24f80030: 00b46200 00b46474 00b47961 00b46200 .b..td..ay...b.. 24f80040: 00b47264 00b43d65 00b43034 00b47473 dr..e=..40..st.. 24f80050: 00b43d6e 00b46972 00b47300 00b4756f n=..ri...s..ou.. 24f80060: 00b46573 00b46c61 00b46474 00b43d72 se..al..td..r=.. 24f80070: 00b46972 00b47600 00b46669 00b4006e ri...v..if..n... 24f80080: 00b4746f 00b47367 00b46f6f 00b4642f ot..gs..oo../d.. 24f80090: 00b46d2f 00b46c62 00b4306b 00b42077 /m..bl..k0..w .. 24f800a0: 00b4746f 00b47974 00b46a3d 00b43273 ot..ty..=j..s2.. 24f800b0: 00b46474 00b47472 00b47261 00b4616c td..rt..ar..la.. 24f800c0: 00b4302e 00b46178 00b43030 00b47830 .0..xa..00..0x.. 24f800d0: 00b43030 00b46a28 00b43273 00b46f63 00..(j..s2..co.. 24f800e0: 00b46c6f 00b47474 00b4414d 00b47069 ol..tt..MA..ip.. 24f800f0: 00b46e6f 00b40000 00b40000 00b40000 on..............
However, I know that this data is not being read correctly because if I define ENV_IS_EMBEDDED again, recompile, and reload then I get:
Integrator-CP # md 0x24f80000 24f80000: 3eb0d8f9 746f6f62 3d646d63 30207063 ...>bootcmd=cp 0 24f80010: 30343278 30303038 78302030 30636637 x24080000 0x7fc0 24f80020: 31783020 30303030 62203b30 6d746f6f 0x100000; bootm 24f80030: 6f6f6200 6c656474 323d7961 75616200 .bootdelay=2.bau 24f80040: 74617264 38333d65 00303034 69647473 drate=38400.stdi 24f80050: 65733d6e 6c616972 64747300 3d74756f n=serial.stdout= 24f80060: 69726573 73006c61 72656474 65733d72 serial.stderr=se 24f80070: 6c616972 72657600 3d796669 6f62006e rial.verify=n.bo 24f80080: 7261746f 723d7367 3d746f6f 7665642f otargs=root=/dev 24f80090: 64746d2f 636f6c62 7220306b 6f722077 /mtdblock0 rw ro 24f800a0: 7366746f 65707974 66666a3d 6d203273 otfstype=jffs2 m 24f800b0: 61706474 3d737472 666d7261 6873616c tdparts=armflash 24f800c0: 303a302e 30306178 40303030 63327830 .0:0xa00000@0x2c 24f800d0: 30303030 66666a28 20293273 736e6f63 0000(jffs2) cons 24f800e0: 3d656c6f 41797474 2030414d 6e3d7069 ole=ttyAMA0 ip=n 24f800f0: 00656e6f 00000000 00000000 00000000 one.............
So the actual data is still stored in flash in perfect condition but defining ENV_IS_EMBEDDED causes U-Boot to start eating the data when it reads it.
Any help on why this is happening is appreciated...
Regards, Umar
participants (2)
-
Umar Qureshey
-
Wolfgang Denk