[U-Boot] [PATCH v2 0/5] env: Add support for environment files

Simon Glass sjg at chromium.org
Mon Jun 24 22:46:00 CEST 2013


At present U-Boot environment variables, and thus scripts, are defined
by CONFIG_EXTRA_ENV_SETTINGS. It is painful to add large amounts of text
to this file and dealing with quoting and newlines is harder than it
should be. It would be better if we could just type the script into a
text file and have it included by U-Boot.

This series adds a feature that brings in a .env file associated with the
board config, if present. To use it, create a file in a board/<vendor>/env
directory called <board>.env (or common.env if you want the same
environment for all boards for that vendor).

The environment variables should be of the form "var=value". Values can
extend to multiple lines. See the README under 'Environment Variables:'
for more information and an example.

After discussion on the mailing list the .emv file was moved from
include/configs to board/. See here:

   http://patchwork.ozlabs.org/patch/237120/

There was also talk of using the C preprocessor for these boards. I tried
this out and found it to be extremely useful. In fact without it, the
scripts probably cannot move from the config header file, since many scripts
are put together based on information from CONFIG variables.

Another discussion was compatibility with the environment commands
'env export -t' and 'env import -t'. This series permits these to be used
and the environment is exported and imported as expected. I have dropped
the ugly \0 approach in favour of a more flexible awk script for parsing
the environment file. The environment commands use \ at the end of a line
for continuation which works nicely with this feature. I have added a patch
to 'run' so that it runs the entire script, not just the first line. A nice
benefit is that there is no longer any need to put ';' at the end of every
line - in other words U-Boot scripts become proper scripts with multiple
lines instead of messy and fragile continuations.

As an example, I have converted most of the tegra environment over to this
new approach on an RFC basis.

Changes in v2:
- Add additional include to env_embedded to deal with its dirty trick
- Add dependency rule so that the environment is rebuilt when it changes
- Add information and updated example script to README
- Add new patch to adjust 'run' command to better support testing
- Add new patch to get 'env import/export' working on sandbox
- Add new patch to illustrate the impact on Tegra environment
- Add separate patch to enable C preprocessor for environment files
- Enable var+=value form to simplify composing variables in multiple steps
- Move .env file from include/configs to board/
- Use awk script to process environment since it is much easier on the brain

Simon Glass (5):
  sandbox: Support 'env import' and 'env export'
  Make 'run' use run_command_list() instead of run_command()
  Allow U-Boot scripts to be placed in a .env file
  env: Allow environment files to use the C preprocessor
  RFC: tegra: Convert to using environment files

 Makefile                            |  31 +++++++++-
 README                              |  49 +++++++++++++++
 board/nvidia/env/common.env         |  79 ++++++++++++++++++++++++
 common/cmd_nvedit.c                 |  31 ++++++----
 common/env_embedded.c               |   1 +
 common/main.c                       |   2 +-
 config.mk                           |   2 +
 include/configs/tegra-common-post.h | 120 +-----------------------------------
 include/env_default.h               |   2 +
 mkconfig                            |   6 ++
 tools/scripts/env2string.awk        |  49 +++++++++++++++
 11 files changed, 238 insertions(+), 134 deletions(-)
 create mode 100644 board/nvidia/env/common.env
 create mode 100644 tools/scripts/env2string.awk

-- 
1.8.3



More information about the U-Boot mailing list