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

Simon Glass sjg at chromium.org
Sat Oct 26 06:59:18 CEST 2013


(Note that Wolfgang is looking at a way of adjusting the environment
within a U-Boot binary - this series could fit with that but aims to
improve the creation of the initial default environment).

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. If the rest of this series is accepted then
I will need to adjust this patch based on the mainline code.

Changes in v3:
- Add more detail in the README about the format of .env files
- Adjust Makefile to generate the .inc and .h files in separate fules
- Correctly terminate environment files with \n
- Define __UBOOT_CONFIG__ when collecting environment files
- Improve the comment about " in the awk script

Changes in v2:
- 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                            |  37 ++++++++++-
 README                              |  54 ++++++++++++++++
 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                            |   7 +++
 tools/scripts/env2string.awk        |  54 ++++++++++++++++
 11 files changed, 255 insertions(+), 134 deletions(-)
 create mode 100644 board/nvidia/env/common.env
 create mode 100644 tools/scripts/env2string.awk

-- 
1.8.4.1



More information about the U-Boot mailing list