diff options
| author | Mike Frysinger <vapier@gentoo.org> | 2009-05-06 08:41:45 -0400 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2009-06-12 20:39:47 +0200 | 
| commit | 837db3d87f4bfe9261629fb4a1bb433506a3056a (patch) | |
| tree | 50bcff874185330b08ab585a32698d37ae0c4ed9 /tools/envcrc.c | |
| parent | 18cc7afd9a153a66854af862d14ba01c5496cf07 (diff) | |
| download | olio-uboot-2014.01-837db3d87f4bfe9261629fb4a1bb433506a3056a.tar.xz olio-uboot-2014.01-837db3d87f4bfe9261629fb4a1bb433506a3056a.zip | |
tools/envcrc: add --binary option to export embedded env
The --binary option to envcrc can be used to export the embedded env as a
binary blob so that it can be manipulated/examined/whatever externally.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'tools/envcrc.c')
| -rw-r--r-- | tools/envcrc.c | 46 | 
1 files changed, 42 insertions, 4 deletions
| diff --git a/tools/envcrc.c b/tools/envcrc.c index 4334cdf74..5b0f7cd4e 100644 --- a/tools/envcrc.c +++ b/tools/envcrc.c @@ -24,6 +24,7 @@  #include <stdio.h>  #include <stdint.h>  #include <stdlib.h> +#include <string.h>  #include <unistd.h>  #ifndef __ASSEMBLY__ @@ -77,19 +78,56 @@ extern unsigned char environment;  int main (int argc, char **argv)  {  #ifdef	ENV_IS_EMBEDDED +	unsigned char pad = 0x00;  	uint32_t crc;  	unsigned char *envptr = &environment,  		*dataptr = envptr + ENV_HEADER_SIZE;  	unsigned int datasize = ENV_SIZE; +	unsigned int eoe; + +	if (argv[1] && !strncmp(argv[1], "--binary", 8)) { +		int ipad = 0xff; +		if (argv[1][8] == '=') +			sscanf(argv[1] + 9, "%i", &ipad); +		pad = ipad; +	} + +	if (pad) { +		/* find the end of env */ +		for (eoe = 0; eoe < datasize - 1; ++eoe) +			if (!dataptr[eoe] && !dataptr[eoe+1]) { +				eoe += 2; +				break; +			} +		if (eoe < datasize - 1) +			memset(dataptr + eoe, pad, datasize - eoe); +	}  	crc = crc32 (0, dataptr, datasize);  	/* Check if verbose mode is activated passing a parameter to the program */  	if (argc > 1) { -		printf ("CRC32 from offset %08X to %08X of environment = %08X\n", -			(unsigned int) (dataptr - envptr), -			(unsigned int) (dataptr - envptr) + datasize, -			crc); +		if (!strncmp(argv[1], "--binary", 8)) { +			int le = (argc > 2 ? !strcmp(argv[2], "le") : 1); +			size_t i, start, end, step; +			if (le) { +				start = 0; +				end = ENV_HEADER_SIZE; +				step = 1; +			} else { +				start = ENV_HEADER_SIZE - 1; +				end = -1; +				step = -1; +			} +			for (i = start; i != end; i += step) +				printf("%c", (crc & (0xFF << (i * 8))) >> (i * 8)); +			fwrite(dataptr, 1, datasize, stdout); +		} else { +			printf("CRC32 from offset %08X to %08X of environment = %08X\n", +				(unsigned int) (dataptr - envptr), +				(unsigned int) (dataptr - envptr) + datasize, +				crc); +		}  	} else {  		printf ("0x%08X\n", crc);  	} |