how u-boot handles the environment (rpi4, fat environment)

I'm running ubuntu 20.04 server (which uses u-boot v2021.01 with minor changes/enhancements)
fw_printenv doesn't seem to work -- it always comes up with a crc error (I haven't tried fw_setenv yet).
Is there a spec of how the environment works? I haven't seen one.
Without this patch, I get: Warning: Bad CRC, using default environment
The first environment variable has a "0x1" in front of it. When I apply this patch, things seem to work:
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index 66cb9d2a..c85b471a 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -1457,8 +1457,8 @@ int fw_env_open(struct env_opts *opts) goto open_cleanup; }
- crc0 = crc32(0, (uint8_t *)environment.data, ENV_SIZE); - + crc0 = crc32(0, (uint8_t *) (environment.data + 1) , ENV_SIZE - 1);
But I'm not at the phase of doing fw_setenv (I would have used a newer u-boot, but I'm getting resets on bootup (it works on a vanilla 20.04 system).
marty marty

On Sun, Sep 25, 2022 at 12:46:10PM -0400, marty leisner wrote:
I'm running ubuntu 20.04 server (which uses u-boot v2021.01 with minor changes/enhancements)
fw_printenv doesn't seem to work -- it always comes up with a crc error (I haven't tried fw_setenv yet).
Is there a spec of how the environment works? I haven't seen one.
Without this patch, I get: Warning: Bad CRC, using default environment
The first environment variable has a "0x1" in front of it. When I apply this patch, things seem to work:
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index 66cb9d2a..c85b471a 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -1457,8 +1457,8 @@ int fw_env_open(struct env_opts *opts) goto open_cleanup; }
crc0 = crc32(0, (uint8_t *)environment.data, ENV_SIZE);
crc0 = crc32(0, (uint8_t *) (environment.data + 1) , ENV_SIZE - 1);
But I'm not at the phase of doing fw_setenv (I would have used a newer u-boot, but I'm getting resets on bootup (it works on a vanilla 20.04 system).
Please include your /etc/fw_env.config file and relevant CONFIG_ENV settings from the U-Boot build.

In order for fw_printenv/fw_setenv to work, I have to attach the attached patch.
leisner@rpi4b:~/bin$ cat /etc/fw_env.config /boot/firmware/uboot.env 0x0000 0x20000
leisner@rpi4b:/usr/local/src/consulting/turf-tank/u-boot-2021.01+dfsg$ grep CONFIG_ENV .config CONFIG_ENV_SIZE=0x20000 CONFIG_ENV_VARS_UBOOT_CONFIG=y CONFIG_ENV_SUPPORT=y # CONFIG_ENV_OVERWRITE is not set # CONFIG_ENV_IS_NOWHERE is not set # CONFIG_ENV_IS_IN_EEPROM is not set CONFIG_ENV_IS_IN_FAT=y # CONFIG_ENV_IS_IN_EXT4 is not set # CONFIG_ENV_IS_IN_FLASH is not set # CONFIG_ENV_IS_IN_MMC is not set # CONFIG_ENV_IS_IN_NAND is not set # CONFIG_ENV_IS_IN_NVRAM is not set # CONFIG_ENV_IS_IN_ONENAND is not set # CONFIG_ENV_IS_IN_REMOTE is not set # CONFIG_ENV_IS_IN_SPI_FLASH is not set CONFIG_ENV_FAT_INTERFACE="mmc" CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" CONFIG_ENV_FAT_FILE="uboot.env" CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y # CONFIG_ENV_APPEND is not set # CONFIG_ENV_WRITEABLE_LIST is not set # CONFIG_ENV_ACCESS_IGNORE_FORCE is not set
I still get the "1" in the printenv output of the first env variable. But I was able to use setenv.
Without the patch, on reboot I get:
*** Warning - bad CRC, using default environment
The version string (I'm using the ubuntu source) is: U-Boot 2021.01-gc7eed6f7-dirty (Sep 27 2022 - 20:05:05 -0400)
On Thu, Sep 29, 2022 at 8:57 AM Tom Rini trini@konsulko.com wrote:
On Sun, Sep 25, 2022 at 12:46:10PM -0400, marty leisner wrote:
I'm running ubuntu 20.04 server (which uses u-boot v2021.01 with minor changes/enhancements)
fw_printenv doesn't seem to work -- it always comes up with a crc error
(I
haven't tried fw_setenv yet).
Is there a spec of how the environment works? I haven't seen one.
Without this patch, I get: Warning: Bad CRC, using default environment
The first environment variable has a "0x1" in front of it. When I apply this patch, things seem to work:
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index 66cb9d2a..c85b471a 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -1457,8 +1457,8 @@ int fw_env_open(struct env_opts *opts) goto open_cleanup; }
crc0 = crc32(0, (uint8_t *)environment.data, ENV_SIZE);
crc0 = crc32(0, (uint8_t *) (environment.data + 1) , ENV_SIZE -
1);
But I'm not at the phase of doing fw_setenv (I would have used a newer u-boot, but I'm getting resets on bootup (it works on a vanilla 20.04 system).
Please include your /etc/fw_env.config file and relevant CONFIG_ENV settings from the U-Boot build.
-- Tom
participants (2)
-
marty leisner
-
Tom Rini