how u-boot handles the environment (rpi4, fat environment)
marty leisner
maleisner at gmail.com
Sun Oct 2 20:38:58 CEST 2022
In order for fw_printenv/fw_setenv to work, I have to attach the attached
patch.
leisner at rpi4b:~/bin$ cat /etc/fw_env.config
/boot/firmware/uboot.env 0x0000 0x20000
leisner at 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 at 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
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fw_env.c.diff
Type: text/x-patch
Size: 911 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20221002/f08bfeed/attachment.bin>
More information about the U-Boot
mailing list