aboutsummaryrefslogtreecommitdiff
path: root/tools/env/fw_env.c
diff options
context:
space:
mode:
authorMichael Heimpold2015-10-27 22:34:49 +0100
committerTom Rini2015-11-18 08:47:02 -0500
commit9884f44cab5d1ce944b1dc087c9bb8db0efb5160 (patch)
treeb1b94bc3ff057b4226ddd2530db2f2bd11abb7e6 /tools/env/fw_env.c
parentf5b76de4403881940a3ef57f9b6e9fa5b3433070 (diff)
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.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index daa02a760e3..ba11f7727b8 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