Explorar o código

update wrt350nv2 builder to v2.3 (#7580)

SVN-Revision: 22579
Florian Fainelli %!s(int64=15) %!d(string=hai) anos
pai
achega
4bc034f07c

+ 1 - 1
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)
 

+ 48 - 16
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 <[email protected]>
 	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 <[email protected]> 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");
 				}
 			}