diff options
author | Michael Heimpold <mhei@heimpold.de> | 2015-10-27 21:34:49 (GMT) |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2015-11-18 13:47:02 (GMT) |
commit | 9884f44cab5d1ce944b1dc087c9bb8db0efb5160 (patch) | |
tree | b1b94bc3ff057b4226ddd2530db2f2bd11abb7e6 /tools/env/fw_env.c | |
parent | f5b76de4403881940a3ef57f9b6e9fa5b3433070 (diff) | |
download | u-boot-9884f44cab5d1ce944b1dc087c9bb8db0efb5160.tar.xz |
tools/env: allow config filename to be passed via command line argument
When for example generating/manipulating SD card/eMMC images which
contain U-Boot and its environment(s), it is handy to use a given
configuration file instead of the compiled-in default one.
And since the default configuration file is expected under /etc
it's hard for an usual linux user account without special permissions
to use fw_printenv/fw_setenv for this purpose.
So allow to pass an optional filename via a new '-c' command
line argument.
Example:
$ ln -s fw_printenv tools/env/fw_setenv
$ cat fw_env.config
test.img 0x20000 0x20000
test.img 0x40000 0x20000
$ tools/env/fw_printenv -c ./fw_env.config fdt_file
fdt_file=imx28-duckbill.dtb
$ tools/env/fw_setenv -c ./fw_env.config fdt_file imx28-duckbill-spi.dtb
$ tools/env/fw_printenv -c ./fw_env.config fdt_file
fdt_file=imx28-duckbill-spi.dtb
Signed-off-by: Michael Heimpold <mhei@heimpold.de>
Diffstat (limited to 'tools/env/fw_env.c')
-rw-r--r-- | tools/env/fw_env.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index daa02a7..ba11f77 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -124,6 +124,7 @@ static int parse_config (void); #if defined(CONFIG_FILE) static int get_config (char *); +static char *config_file = CONFIG_FILE; #endif static inline ulong getenvsize (void) { @@ -246,6 +247,19 @@ int fw_printenv (int argc, char *argv[]) int i, n_flag; int rc = 0; +#ifdef CONFIG_FILE + if (argc >= 2 && strcmp(argv[1], "-c") == 0) { + if (argc < 3) { + fprintf(stderr, + "## Error: '-c' option requires the config file to use\n"); + return -1; + } + config_file = argv[2]; + argv += 2; + argc -= 2; + } +#endif + if (argc >= 2 && strcmp(argv[1], "-a") == 0) { if (argc < 3) { fprintf(stderr, @@ -486,6 +500,19 @@ int fw_setenv(int argc, char *argv[]) char *name; char *value = NULL; +#ifdef CONFIG_FILE + if (argc >= 2 && strcmp(argv[1], "-c") == 0) { + if (argc < 3) { + fprintf(stderr, + "## Error: '-c' option requires the config file to use\n"); + return -1; + } + config_file = argv[2]; + argv += 2; + argc -= 2; + } +#endif + if (argc < 2) { errno = EINVAL; return -1; @@ -1364,9 +1391,9 @@ static int parse_config () #if defined(CONFIG_FILE) /* Fills in DEVNAME(), ENVSIZE(), DEVESIZE(). Or don't. */ - if (get_config (CONFIG_FILE)) { + if (get_config (config_file)) { fprintf (stderr, - "Cannot parse config file: %s\n", strerror (errno)); + "Cannot parse config file '%s': %s\n", config_file, strerror (errno)); return -1; } #else |