[U-Boot-Users] [PATCH] fw_printenv - changed MTD include and fixed compiler warnings

This user-space program was including a kernel header, which prevented compilation. Compiler warnings were 'fixed' by some casts. If anyone stores binary data in environment variables this may not work.
The DULG mentions a 'fw_setenv' command, which doesn't technically exist. The Makefile was modified to create a link that becomes this command.
Signed-off-by: Ben Warren bwarren@qstreams.com --- tools/env/Makefile | 3 ++- tools/env/README | 3 ++- tools/env/fw_env.c | 16 ++++++++-------- 3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/tools/env/Makefile b/tools/env/Makefile index 1f16768..90dac5e 100644 --- a/tools/env/Makefile +++ b/tools/env/Makefile @@ -32,9 +32,10 @@ all: $(obj)fw_printenv
$(obj)fw_printenv: $(SRCS) $(HEADERS) $(CROSS_COMPILE)gcc $(CPPFLAGS) $(SRCS) -o $(obj)fw_printenv + ln -s $(obj)fw_printenv $(obj)fw_setenv
clean: - rm -f $(obj)fw_printenv $(obj)crc32.c + rm -f $(obj)fw_printenv $(obj)crc32.c $(obj)fw_setenv
$(obj)crc32.c: ln -s $(src)../../lib_generic/crc32.c $(obj)crc32.c diff --git a/tools/env/README b/tools/env/README index d8386f7..2f3adc1 100644 --- a/tools/env/README +++ b/tools/env/README @@ -34,7 +34,8 @@ The DEVICEx_NAME constants define which be used to access the environment.
The DEVICEx_OFFSET constants define the environment offset within the -MTD character device. +MTD character device. Note that if your Linux kernel is compiled with MTD +PARTITION support, this value will probably be 0.
ENVx_SIZE defines the size in bytes taken by the environment, which may be less then flash sector size, if the environment takes less diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index f723b5b..ad89f54 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -31,7 +31,7 @@ #include <sys/types.h> #include <sys/ioctl.h> #include <sys/stat.h> #include <unistd.h> -#include <linux/mtd/mtd.h> +#include <mtd/mtd-user.h> #include "fw_env.h"
typedef unsigned char uchar; @@ -40,7 +40,7 @@ #define CMD_GETENV "fw_printenv" #define CMD_SETENV "fw_setenv"
typedef struct envdev_s { - uchar devname[16]; /* Device name */ + char devname[16]; /* Device name */ ulong devoff; /* Device offset */ ulong env_size; /* environment size */ ulong erase_size; /* device erase size */ @@ -241,8 +241,8 @@ void fw_printenv (int argc, char *argv[] }
for (i = 1; i < argc; ++i) { /* print single env variables */ - uchar *name = argv[i]; - uchar *val = NULL; + char *name = argv[i]; + char *val = NULL;
for (env = environment.data; *env; env = nxt + 1) {
@@ -253,7 +253,7 @@ void fw_printenv (int argc, char *argv[] return; } } - val = envmatch (name, env); + val = (char *)envmatch ((uchar *)name, env); if (val) { if (!n_flag) { fputs (name, stdout); @@ -281,7 +281,7 @@ int fw_setenv (int argc, char *argv[]) int i, len; uchar *env, *nxt; uchar *oldval = NULL; - uchar *name; + char *name;
if (argc < 2) { return (EINVAL); @@ -303,7 +303,7 @@ int fw_setenv (int argc, char *argv[]) return (EINVAL); } } - if ((oldval = envmatch (name, env)) != NULL) + if ((oldval = envmatch ((uchar *)name, env)) != NULL) break; }
@@ -361,7 +361,7 @@ int fw_setenv (int argc, char *argv[]) while ((*env = *name++) != '\0') env++; for (i = 2; i < argc; ++i) { - uchar *val = argv[i]; + char *val = argv[i];
*env = (i == 2) ? '=' : ' '; while ((*++env = *val++) != '\0');

In message 1171917466.22834.48.camel@saruman.qstreams.net you wrote:
This user-space program was including a kernel header, which prevented compilation. Compiler warnings were 'fixed' by some casts. If anyone stores binary data in environment variables this may not work.
IIRC this change breaks building against a 2.4 kernel tree.
Or did you test this in a 2.4 kernel environment?
Best regards,
Wolfgang Denk

On Mon, 2007-02-19 at 22:10 +0100, Wolfgang Denk wrote:
In message 1171917466.22834.48.camel@saruman.qstreams.net you wrote:
This user-space program was including a kernel header, which prevented compilation. Compiler warnings were 'fixed' by some casts. If anyone stores binary data in environment variables this may not work.
IIRC this change breaks building against a 2.4 kernel tree.
Or did you test this in a 2.4 kernel environment?
Sorry, 2.6 only. I can add a test for kernel version, I guess.
participants (2)
-
Ben Warren
-
Wolfgang Denk