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