diff options
Diffstat (limited to 'tools/wrt350nv2-builder')
| -rw-r--r-- | tools/wrt350nv2-builder/Makefile | 2 | ||||
| -rw-r--r-- | tools/wrt350nv2-builder/src/wrt350nv2-builder.c | 64 | 
2 files changed, 49 insertions, 17 deletions
diff --git a/tools/wrt350nv2-builder/Makefile b/tools/wrt350nv2-builder/Makefile index c8709693d..61a555eb7 100644 --- a/tools/wrt350nv2-builder/Makefile +++ b/tools/wrt350nv2-builder/Makefile @@ -8,7 +8,7 @@  include $(TOPDIR)/rules.mk  PKG_NAME:=wrt350nv2-builder -PKG_VERSION:=2.2 +PKG_VERSION:=2.3  HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/${PKG_NAME}-$(PKG_VERSION) diff --git a/tools/wrt350nv2-builder/src/wrt350nv2-builder.c b/tools/wrt350nv2-builder/src/wrt350nv2-builder.c index a45932930..2ce57234c 100644 --- a/tools/wrt350nv2-builder/src/wrt350nv2-builder.c +++ b/tools/wrt350nv2-builder/src/wrt350nv2-builder.c @@ -1,6 +1,6 @@  /* -	WRT350Nv2-Builder 2.2 (previously called buildimg) +	WRT350Nv2-Builder 2.3 (previously called buildimg)  	Copyright (C) 2008-2009 Dirk Teurlings <info@upexia.nl>  	Copyright (C) 2009-2010 Matthias Buecher (http://www.maddes.net/) @@ -62,6 +62,8 @@  	https://forum.openwrt.org/viewtopic.php?pid=92928#p92928  	Changelog: +	v2.3 - allow jffs by adding its magic number (0x8519) +	       added parameter option -i to ignore unknown magic numbers  	v2.2 - fixed checksum byte calculation for other versions than 0x2019  	       fixed rare problem with padsize  	       updated info to stock firmware 2.00.20 @@ -90,7 +92,7 @@  // version info -#define VERSION "2.2" +#define VERSION "2.3"  char program_info[] = "WRT350Nv2-Builder v%s by Dirk Teurlings <info@upexia.nl> and Matthias Buecher (http://www.maddes.net/)\n";  // verbosity @@ -708,6 +710,7 @@ int main(int argc, char *argv[]) {  	int help;  	int onlybin;  	int havezip; +	int ignoremagic;  	char option;  	char *par_filename = NULL;  	char *img_filename = NULL; @@ -723,7 +726,8 @@ int main(int argc, char *argv[]) {  	int mandatory;  	int noupdate;  	int sizecheck; -	unsigned char magic[2]; +	int magiccheck; +	int magicerror;  // display program header @@ -735,7 +739,8 @@ int main(int argc, char *argv[]) {  	help = 0;  	onlybin = 0;  	havezip = 0; -	while ((option = getopt(argc, argv, ":hbzf:v")) != -1) { +	ignoremagic = 0; +	while ((option = getopt(argc, argv, "hbzif:v")) != -1) {  		switch(option) {  			case 'h':  				help = 1; @@ -746,6 +751,9 @@ int main(int argc, char *argv[]) {  			case 'z':  				havezip = 1;  				break; +			case 'i': +				ignoremagic = 1; +				break;  			case 'f':  				sizecheck = sscanf(optarg, "%i", &i);  				if (sizecheck != 1) { @@ -850,11 +858,12 @@ int main(int argc, char *argv[]) {  			printf("This program creates Linksys style images for the WRT350Nv2 router.\n");  		}  		printf("  Usage:\n\ -  %s [-h] [-b] [-z] [-f <version>] [-v] <parameter or zip file> [<image file>]\n\n\ +  %s [-h] [-b] [-z] [-i] [-f <version>] [-v] <parameter or zip file> [<image file>]\n\n\    Options:\n\    -h            -  Show this help\n\    -b            -  Create only bin file, no img or zip file is created\n\    -z            -  Have zip file, the img file will be directly created from it\n\ +  -i            -  Ignore unknown magic numbers\n\    -f <version>  -  Wanted firmware version to use with -z\n\                     Default firmware version is 0x2020 = 2.00.20.\n\                     Note: version from parameter file will supersede this\n\ @@ -929,16 +938,14 @@ int main(int argc, char *argv[]) {  			mandatory = 0;  			noupdate = 0;  			sizecheck = 0; -			magic[0] = 0; -			magic[1] = 0; +			magiccheck = 0;  			switch (i) {  				case 1:  					mtd = &mtd_kernel;  					mandatory = 1;  					sizecheck = mtd_kernel.size - 16; -					magic[0] = 0x27; -					magic[1] = 0x05; +					magiccheck = 1;  					break;  				case 2:  					mtd = &mtd_rootfs; @@ -946,8 +953,7 @@ int main(int argc, char *argv[]) {  					mtd->size = ROOTFS_END_OFFSET - mtd_kernel.size;  					mandatory = 1;  					sizecheck = PRODUCT_ID_OFFSET - mtd_kernel.size; -					magic[0] = 0x68; -					magic[1] = 0x73; +					magiccheck = 1;  					break;  				case 3:  					mtd = &mtd_uboot; @@ -973,7 +979,7 @@ int main(int argc, char *argv[]) {  				printf("mtd %s not specified correctly or at all in parameter file\n", mtd->name);  			} -			// end checks if no file data present +			// no further checks if no file data present  			if (!mtd->filename) {  				continue;  			} @@ -984,10 +990,36 @@ int main(int argc, char *argv[]) {  			}  			// general magic number check -			if (magic[0]) { -				if ((mtd->magic[0] != magic[0]) || (mtd->magic[1] != magic[1])) { -					exitcode = 1; -					printf("mtd %s input file %s has wrong magic number (0x%02X%02X)\n", mtd->name, mtd->filename, mtd->magic[0], mtd->magic[1]); +			magicerror = 0; +			if (magiccheck) { +				switch (i) { +					case 1:	// kernel +						if (!(  +						       ((mtd->magic[0] == 0x27) && (mtd->magic[1] == 0x05))	// uImage +						)) { +							magicerror = 1; +						} +						break; +					case 2:	// rootfs +						if (!(  +						       ((mtd->magic[0] == 0x68) && (mtd->magic[1] == 0x73))	// squashfs +						    || ((mtd->magic[0] == 0x85) && (mtd->magic[1] == 0x19))	// jffs +						)) { +							magicerror = 1; +						} +						break; +					default: +						magicerror = 1; +						break; +				} +				if (magicerror) { +					printf("mtd %s input file %s has unknown magic number (0x%02X%02X)", mtd->name, mtd->filename, mtd->magic[0], mtd->magic[1]); +					if (ignoremagic) { +						printf("...ignoring"); +					} else { +						exitcode = 1; +					} +					printf("\n");  				}  			}  | 
