u-boot/tools/env
Andreas Fenkart 183923d3e4 tools/env: ensure environment starts at erase block boundary
56086921 added support for unaligned environments access.
U-boot itself does not support this:
- env_nand.c fails when using an unaligned offset. It produces an
  error in nand_erase_opts{drivers/mtd/nand/nand_util.c}
- in env_sf/env_flash the unused space at the end is preserved, but
  not in the beginning. block alignment is assumed
- env_sata/env_mmc aligns offset/length to the block size of the
  underlying device. data is silently redirected to the beginning of
  a block

There is seems no use case for unaligned environment. If there is
some useful data at the beginning of the the block (e.g. end of u-boot)
that would be very unsafe. If the redundant environments are hosted by
the same erase block then that invalidates the idea of double buffering.
It might be that unaligned access was allowed in the past, and that
people with legacy u-boot are trapped. But at the time of 56086921
it wasn't supported and due to reasons above I guess it was never
introduced.
I prefer to remove that (unused) feature in favor of simplicity

Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
Acked-by: Stefan Agner <stefan.agner@toradex.com>
2016-08-15 18:46:40 -04:00
..
.gitignore tools/env: cross-compile fw_printenv without setting HOSTCC 2014-02-19 11:10:04 -05:00
aes.c tools: env: Add aes.c placeholder 2014-05-12 15:20:05 -04:00
crc32.c tools: convert makefiles to kbuild style 2014-02-19 11:07:49 -05:00
ctype.c tools: convert makefiles to kbuild style 2014-02-19 11:07:49 -05:00
env_attr.c tools: convert makefiles to kbuild style 2014-02-19 11:07:49 -05:00
env_flags.c tools: convert makefiles to kbuild style 2014-02-19 11:07:49 -05:00
fw_env_main.c tools/env: no global variable sharing between application and library 2016-05-27 15:39:56 -04:00
fw_env.c tools/env: ensure environment starts at erase block boundary 2016-08-15 18:46:40 -04:00
fw_env.config tools/env: allow negative offsets 2016-07-22 14:46:20 -04:00
fw_env.h tools/env: kernel-doc for fw_printenv, fw_getenv and fw_parse_script 2016-07-22 14:46:21 -04:00
linux_string.c tools: convert makefiles to kbuild style 2014-02-19 11:07:49 -05:00
Makefile Allow fw env tools to be available as library 2015-11-18 08:47:03 -05:00
README tools/env: cross-compile fw_printenv without setting HOSTCC 2014-02-19 11:10:04 -05:00

This is a demo implementation of a Linux command line tool to access
the U-Boot's environment variables.

In order to cross-compile fw_printenv, run
    make CROSS_COMPILE=<your cross-compiler prefix> env
in the root directory of the U-Boot distribution. For example,
    make CROSS_COMPILE=arm-linux- env

For the run-time utility configuration uncomment the line
#define CONFIG_FILE  "/etc/fw_env.config"
in fw_env.h.

For building against older versions of the MTD headers (meaning before
v2.6.8-rc1) it is required to pass the argument "MTD_VERSION=old" to
make.

See comments in the fw_env.config file for definitions for the
particular board.

Configuration can also be done via #defines in the fw_env.h file. The
following lines are relevant:

#define HAVE_REDUND	/* For systems with 2 env sectors */
#define DEVICE1_NAME	"/dev/mtd1"
#define DEVICE2_NAME	"/dev/mtd2"
#define DEVICE1_OFFSET    0x0000
#define ENV1_SIZE         0x4000
#define DEVICE1_ESIZE     0x4000
#define DEVICE1_ENVSECTORS     2
#define DEVICE2_OFFSET    0x0000
#define ENV2_SIZE         0x4000
#define DEVICE2_ESIZE     0x4000
#define DEVICE2_ENVSECTORS     2

Un-define HAVE_REDUND, if you want to use the utilities on a system
that does not have support for redundant environment enabled.
If HAVE_REDUND is undefined, DEVICE2_NAME is ignored,
as is ENV2_SIZE and DEVICE2_ESIZE.

The DEVICEx_NAME constants define which MTD character devices are to
be used to access the environment.

The DEVICEx_OFFSET constants define the environment offset within the
MTD character device.

ENVx_SIZE defines the size in bytes taken by the environment, which
may be less then flash sector size, if the environment takes less
then 1 sector.

DEVICEx_ESIZE defines the size of the first sector in the flash
partition where the environment resides.

DEVICEx_ENVSECTORS defines the number of sectors that may be used for
this environment instance. On NAND this is used to limit the range
within which bad blocks are skipped, on NOR it is not used.

To prevent losing changes to the environment and to prevent confusing the MTD
drivers, a lock file at /var/lock/fw_printenv.lock is used to serialize access
to the environment.