update wrt350nv2-builder to v2.4 and use new functionality for target orion_generic
Signed-off-by: Matthias Bücher <mail@maddes.net> SVN-Revision: 31199
This commit is contained in:
		| @@ -1,15 +1,24 @@ | |||||||
| # | # | ||||||
| # Copyright (C) 2008-2010 OpenWrt.org | # Copyright (C) 2008-2011 OpenWrt.org | ||||||
| # | # | ||||||
| # This is free software, licensed under the GNU General Public License v2. | # This is free software, licensed under the GNU General Public License v2. | ||||||
| # See /LICENSE for more information. | # See /LICENSE for more information. | ||||||
| # | # | ||||||
|  |  | ||||||
|  | ### DO NOT INDENT LINES CONTAINING $(call xyz) AS THIS MAY CHANGE THE CONTEXT | ||||||
|  | ### OF THE FIRST LINE IN THE CALLED VARIABLE (NOTE: variable!) | ||||||
|  | ### see http://www.gnu.org/software/make/manual/html_node/Call-Function.html#Call-Function | ||||||
|  | ### ACTUALLY IT IS A SIMPLE MACRO EXPANSION | ||||||
|  |  | ||||||
|  | ### use round brackets for make variables, and curly brackets for shell variables | ||||||
|  |  | ||||||
| define Image/Prepare | define Image/Prepare | ||||||
|  | ### Dummy comment for indented calls of Image/Prepare | ||||||
| 	cp $(LINUX_DIR)/arch/arm/boot/uImage $(KDIR)/uImage | 	cp $(LINUX_DIR)/arch/arm/boot/uImage $(KDIR)/uImage | ||||||
| endef | endef | ||||||
|  |  | ||||||
| define Image/BuildKernel | define Image/BuildKernel | ||||||
|  | ### Dummy comment for indented calls of Image/BuildKernel | ||||||
| 	# Orion Kernel uImages | 	# Orion Kernel uImages | ||||||
|  # WRT350N v2: mach id 1633 (0x661) |  # WRT350N v2: mach id 1633 (0x661) | ||||||
| 	echo -en "\x06\x1c\xa0\xe3\x61\x10\x81\xe3" > $(KDIR)/wrt350nv2-zImage | 	echo -en "\x06\x1c\xa0\xe3\x61\x10\x81\xe3" > $(KDIR)/wrt350nv2-zImage | ||||||
| @@ -51,25 +60,27 @@ define Image/Build/Linksys | |||||||
| 	rm -rf "${TMP_DIR}/$2_webupgrade" | 	rm -rf "${TMP_DIR}/$2_webupgrade" | ||||||
| 	mkdir "${TMP_DIR}/$2_webupgrade" | 	mkdir "${TMP_DIR}/$2_webupgrade" | ||||||
|  # create parameter file |  # create parameter file | ||||||
| 	echo ":kernel $5 ${BIN_DIR}/openwrt-$2-uImage" >"${TMP_DIR}/$2_webupgrade/$2.par" | 	echo ':image 0 $(BIN_DIR)/openwrt-$(2)-$(1).img' >'$(TMP_DIR)/$(2)_webupgrade/$(2).par' | ||||||
| 	echo ":rootfs 0 ${KDIR}/root.$1" >>"${TMP_DIR}/$2_webupgrade/$2.par" |  | ||||||
| 	[ ! -f "$(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" ] || ( \ | 	[ ! -f "$(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" ] || ( \ | ||||||
| 		echo ":u-boot 0 $(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" >>"${TMP_DIR}/$2_webupgrade/$2.par"; ) | 		echo ":u-boot 0 $(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" >>"${TMP_DIR}/$2_webupgrade/$2.par"; ) | ||||||
| 	echo "#version 0x2020" >>"${TMP_DIR}/$2_webupgrade/$2.par" | 	echo "#version 0x2020" >>"${TMP_DIR}/$2_webupgrade/$2.par" | ||||||
|  # create bin file for recovery and webupgrade image |  # create bin file for recovery and webupgrade image | ||||||
| 	( cd "${TMP_DIR}/$2_webupgrade"; \ | 	( cd "${TMP_DIR}/$2_webupgrade"; \ | ||||||
| 		"${STAGING_DIR_HOST}/bin/$2-builder" \ | 		"${STAGING_DIR_HOST}/bin/wrt350nv2-builder" \ | ||||||
| 			-v -b "${TMP_DIR}/$2_webupgrade/$2.par"; \ | 			-v -b "${TMP_DIR}/$2_webupgrade/$2.par"; \ | ||||||
| 	) | 	) | ||||||
|  # copy bin file as recovery image |  # copy bin file as recovery image | ||||||
| 	$(CP) "${TMP_DIR}/$2_webupgrade/wrt350n.bin" "$(BIN_DIR)/openwrt-$2-$1-recovery.bin" | 	$(CP) "${TMP_DIR}/$2_webupgrade/wrt350n.bin" "$(BIN_DIR)/openwrt-$2-$1-recovery.bin" | ||||||
|  # create webupgrade image for stock firmware update mechanism |  # create webupgrade image for stock firmware update mechanism | ||||||
| 	zip "${TMP_DIR}/$2_webupgrade/wrt350n.zip" "${TMP_DIR}/$2_webupgrade/wrt350n.bin" | 	( cd '$(TMP_DIR)/$(2)_webupgrade'; \ | ||||||
| 	"${STAGING_DIR_HOST}/bin/$2-builder" -v -z "${TMP_DIR}/$2_webupgrade/wrt350n.zip" "${BIN_DIR}/openwrt-$2-$1-webupgrade.img" | 		zip 'wrt350n.zip' 'wrt350n.bin'; \ | ||||||
|  | 	) | ||||||
|  | 	"${STAGING_DIR_HOST}/bin/wrt350nv2-builder" -v -z "${TMP_DIR}/$2_webupgrade/wrt350n.zip" "${BIN_DIR}/openwrt-$2-$1-webupgrade.img" | ||||||
| 	rm -rf "${TMP_DIR}/$2_webupgrade" | 	rm -rf "${TMP_DIR}/$2_webupgrade" | ||||||
| endef | endef | ||||||
|  |  | ||||||
| define Image/Build | define Image/Build | ||||||
|  | ### Dummy comment for indented calls of Image/Build with $(1) | ||||||
| $(call Image/Build/$(1),$(1)) | $(call Image/Build/$(1),$(1)) | ||||||
| $(call Image/Build/Netgear,$(1),wnr854t,NG_WNR854T,$(1)) | $(call Image/Build/Netgear,$(1),wnr854t,NG_WNR854T,$(1)) | ||||||
|  # Leave WRT350Nv2 at last position due to webimage dependency for zip |  # Leave WRT350Nv2 at last position due to webimage dependency for zip | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #  | #  | ||||||
| # Copyright (C) 2006-2010 OpenWrt.org | # Copyright (C) 2006-2011 OpenWrt.org | ||||||
| # | # | ||||||
| # This is free software, licensed under the GNU General Public License v2. | # This is free software, licensed under the GNU General Public License v2. | ||||||
| # See /LICENSE for more information. | # See /LICENSE for more information. | ||||||
| @@ -8,7 +8,7 @@ | |||||||
| include $(TOPDIR)/rules.mk | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
| PKG_NAME:=wrt350nv2-builder | PKG_NAME:=wrt350nv2-builder | ||||||
| PKG_VERSION:=2.3 | PKG_VERSION:=2.4 | ||||||
|  |  | ||||||
| HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/${PKG_NAME}-$(PKG_VERSION) | HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/${PKG_NAME}-$(PKG_VERSION) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| /* | /* | ||||||
|  |  | ||||||
| 	WRT350Nv2-Builder 2.3 (previously called buildimg) | 	WRT350Nv2-Builder 2.4 (previously called buildimg) | ||||||
| 	Copyright (C) 2008-2009 Dirk Teurlings <info@upexia.nl> | 	Copyright (C) 2008-2009 Dirk Teurlings <info@upexia.nl> | ||||||
| 	Copyright (C) 2009-2010 Matthias Buecher (http://www.maddes.net/) | 	Copyright (C) 2009-2011 Matthias Buecher (http://www.maddes.net/) | ||||||
|  |  | ||||||
| 	This program is free software; you can redistribute it and/or modify | 	This program is free software; you can redistribute it and/or modify | ||||||
| 	it under the terms of the GNU General Public License as published by | 	it under the terms of the GNU General Public License as published by | ||||||
| @@ -33,6 +33,9 @@ | |||||||
| 		:u-boot	0	/path/to/u-boot.bin | 		:u-boot	0	/path/to/u-boot.bin | ||||||
| 		#version	0x2020 | 		#version	0x2020 | ||||||
|  |  | ||||||
|  | 	Additionally since v2.4 an already complete image can be used: | ||||||
|  | 		:image		0	/path/to/openwrt-wrt350nv2-[squashfs|jffs2-64k].img | ||||||
|  |  | ||||||
| 	args: | 	args: | ||||||
| 		1	wrt350nv2.par		parameter file describing the image layout | 		1	wrt350nv2.par		parameter file describing the image layout | ||||||
| 		2	wrt350nv2.img		output file for linksys style image | 		2	wrt350nv2.img		output file for linksys style image | ||||||
| @@ -62,6 +65,8 @@ | |||||||
| 	https://forum.openwrt.org/viewtopic.php?pid=92928#p92928 | 	https://forum.openwrt.org/viewtopic.php?pid=92928#p92928 | ||||||
|  |  | ||||||
| 	Changelog: | 	Changelog: | ||||||
|  | 	v2.4 - added ":image" definition for parameter file, this allows | ||||||
|  | 	       to use a complete sysupgrade image without any kernel size check | ||||||
| 	v2.3 - allow jffs by adding its magic number (0x8519) | 	v2.3 - allow jffs by adding its magic number (0x8519) | ||||||
| 	       added parameter option -i to ignore unknown magic numbers | 	       added parameter option -i to ignore unknown magic numbers | ||||||
| 	v2.2 - fixed checksum byte calculation for other versions than 0x2019 | 	v2.2 - fixed checksum byte calculation for other versions than 0x2019 | ||||||
| @@ -92,7 +97,7 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| // version info | // version info | ||||||
| #define VERSION "2.3" | #define VERSION "2.4" | ||||||
| char program_info[] = "WRT350Nv2-Builder v%s by Dirk Teurlings <info@upexia.nl> and Matthias Buecher (http://www.maddes.net/)\n"; | char program_info[] = "WRT350Nv2-Builder v%s by Dirk Teurlings <info@upexia.nl> and Matthias Buecher (http://www.maddes.net/)\n"; | ||||||
|  |  | ||||||
| // verbosity | // verbosity | ||||||
| @@ -112,6 +117,7 @@ typedef struct { | |||||||
|  |  | ||||||
| mtd_info mtd_kernel = { "kernel", 0, 0, NULL, 0L, { 0, 0 } }; | mtd_info mtd_kernel = { "kernel", 0, 0, NULL, 0L, { 0, 0 } }; | ||||||
| mtd_info mtd_rootfs = { "rootfs", 0, 0, NULL, 0L, { 0, 0 } }; | mtd_info mtd_rootfs = { "rootfs", 0, 0, NULL, 0L, { 0, 0 } }; | ||||||
|  | mtd_info mtd_image = { "image", 0, 0, NULL, 0L, { 0, 0 } }; | ||||||
| mtd_info mtd_uboot = { "u-boot", 0, 0, NULL, 0L, { 0, 0 } }; | mtd_info mtd_uboot = { "u-boot", 0, 0, NULL, 0L, { 0, 0 } }; | ||||||
|  |  | ||||||
| #define ROOTFS_END_OFFSET	0x00760000 | #define ROOTFS_END_OFFSET	0x00760000 | ||||||
| @@ -281,6 +287,8 @@ int parse_par_file(FILE *f_par) { | |||||||
| 						mtd = &mtd_rootfs; | 						mtd = &mtd_rootfs; | ||||||
| 					} else if (!strcmp(string1, mtd_uboot.name)) { | 					} else if (!strcmp(string1, mtd_uboot.name)) { | ||||||
| 						mtd = &mtd_uboot; | 						mtd = &mtd_uboot; | ||||||
|  | 					} else if (!strcmp(string1, mtd_image.name)) { | ||||||
|  | 						mtd = &mtd_image; | ||||||
| 					} | 					} | ||||||
|  |  | ||||||
| 					if (!mtd) { | 					if (!mtd) { | ||||||
| @@ -404,20 +412,24 @@ int create_bin_file(char *bin_filename) { | |||||||
|  |  | ||||||
| 	// add files | 	// add files | ||||||
| 	if (!exitcode) { | 	if (!exitcode) { | ||||||
| 		for (i = 1; i <= 3; i++) { | 		for (i = 1; i <= 4; i++) { | ||||||
| 			addsize = 0; | 			addsize = 0; | ||||||
| 			padsize = 0; | 			padsize = 0; | ||||||
|  |  | ||||||
| 			switch (i) { | 			switch (i) { | ||||||
| 				case 1: | 				case 1: | ||||||
| 					mtd = &mtd_kernel; | 					mtd = &mtd_image; | ||||||
|  | 					padsize = ROOTFS_MIN_OFFSET - mtd->filesize; | ||||||
| 					break; | 					break; | ||||||
| 				case 2: | 				case 2: | ||||||
|  | 					mtd = &mtd_kernel; | ||||||
|  | 					break; | ||||||
|  | 				case 3: | ||||||
| 					mtd = &mtd_rootfs; | 					mtd = &mtd_rootfs; | ||||||
| 					addsize = mtd->filesize; | 					addsize = mtd->filesize; | ||||||
| 					padsize = ROOTFS_MIN_OFFSET - mtd_kernel.size - mtd->filesize; | 					padsize = ROOTFS_MIN_OFFSET - mtd_kernel.size - mtd->filesize; | ||||||
| 					break; | 					break; | ||||||
| 				case 3: | 				case 4: | ||||||
| 					mtd = &mtd_uboot; | 					mtd = &mtd_uboot; | ||||||
| 					addsize = mtd->filesize; | 					addsize = mtd->filesize; | ||||||
| 					break; | 					break; | ||||||
| @@ -723,7 +735,6 @@ int main(int argc, char *argv[]) { | |||||||
|  |  | ||||||
| 	int i; | 	int i; | ||||||
| 	mtd_info *mtd; | 	mtd_info *mtd; | ||||||
| 	int mandatory; |  | ||||||
| 	int noupdate; | 	int noupdate; | ||||||
| 	int sizecheck; | 	int sizecheck; | ||||||
| 	int magiccheck; | 	int magiccheck; | ||||||
| @@ -934,28 +945,30 @@ int main(int argc, char *argv[]) { | |||||||
| 	if ((!exitcode) && (par_filename)) { | 	if ((!exitcode) && (par_filename)) { | ||||||
| 		lprintf(DEBUG, "checking mtd data...\n"); | 		lprintf(DEBUG, "checking mtd data...\n"); | ||||||
|  |  | ||||||
| 		for (i = 1; i <= 3; i++) { | 		for (i = 1; i <= 4; i++) { | ||||||
| 			mandatory = 0; |  | ||||||
| 			noupdate = 0; | 			noupdate = 0; | ||||||
| 			sizecheck = 0; | 			sizecheck = 0; | ||||||
| 			magiccheck = 0; | 			magiccheck = 0; | ||||||
|  |  | ||||||
| 			switch (i) { | 			switch (i) { | ||||||
| 				case 1: | 				case 1: | ||||||
| 					mtd = &mtd_kernel; | 					mtd = &mtd_image; | ||||||
| 					mandatory = 1; | 					sizecheck = ROOTFS_END_OFFSET; | ||||||
| 					sizecheck = mtd_kernel.size - 16; |  | ||||||
| 					magiccheck = 1; | 					magiccheck = 1; | ||||||
| 					break; | 					break; | ||||||
| 				case 2: | 				case 2: | ||||||
| 					mtd = &mtd_rootfs; | 					mtd = &mtd_kernel; | ||||||
| 					mtd->offset = mtd_kernel.size; | 					sizecheck = mtd_kernel.size - 16; | ||||||
| 					mtd->size = ROOTFS_END_OFFSET - mtd_kernel.size; |  | ||||||
| 					mandatory = 1; |  | ||||||
| 					sizecheck = PRODUCT_ID_OFFSET - mtd_kernel.size; |  | ||||||
| 					magiccheck = 1; | 					magiccheck = 1; | ||||||
| 					break; | 					break; | ||||||
| 				case 3: | 				case 3: | ||||||
|  | 					mtd = &mtd_rootfs; | ||||||
|  | 					mtd->offset = mtd_kernel.size; | ||||||
|  | 					mtd->size = ROOTFS_END_OFFSET - mtd_kernel.size; | ||||||
|  | 					sizecheck = PRODUCT_ID_OFFSET - mtd_kernel.size; | ||||||
|  | 					magiccheck = 1; | ||||||
|  | 					break; | ||||||
|  | 				case 4: | ||||||
| 					mtd = &mtd_uboot; | 					mtd = &mtd_uboot; | ||||||
| 					mtd->offset = BOOT_ADDR_BASE_OFF; | 					mtd->offset = BOOT_ADDR_BASE_OFF; | ||||||
| 					noupdate = 1; | 					noupdate = 1; | ||||||
| @@ -974,10 +987,6 @@ int main(int argc, char *argv[]) { | |||||||
| 			lprintf(DEBUG_LVL2, " checking mtd %s\n", mtd->name); | 			lprintf(DEBUG_LVL2, " checking mtd %s\n", mtd->name); | ||||||
|  |  | ||||||
| 			// general checks | 			// general checks | ||||||
| 			if ((mandatory) && (!mtd->filename)) { |  | ||||||
| 				exitcode = 1; |  | ||||||
| 				printf("mtd %s not specified correctly or at all in parameter file\n", mtd->name); |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			// no further checks if no file data present | 			// no further checks if no file data present | ||||||
| 			if (!mtd->filename) { | 			if (!mtd->filename) { | ||||||
| @@ -993,14 +1002,15 @@ int main(int argc, char *argv[]) { | |||||||
| 			magicerror = 0; | 			magicerror = 0; | ||||||
| 			if (magiccheck) { | 			if (magiccheck) { | ||||||
| 				switch (i) { | 				switch (i) { | ||||||
| 					case 1:	// kernel | 					case 1:	// image | ||||||
|  | 					case 2:	// kernel | ||||||
| 						if (!(  | 						if (!(  | ||||||
| 						       ((mtd->magic[0] == 0x27) && (mtd->magic[1] == 0x05))	// uImage | 						       ((mtd->magic[0] == 0x27) && (mtd->magic[1] == 0x05))	// uImage | ||||||
| 						)) { | 						)) { | ||||||
| 							magicerror = 1; | 							magicerror = 1; | ||||||
| 						} | 						} | ||||||
| 						break; | 						break; | ||||||
| 					case 2:	// rootfs | 					case 3:	// rootfs | ||||||
| 						if (!(  | 						if (!(  | ||||||
| 						       ((mtd->magic[0] == 0x68) && (mtd->magic[1] == 0x73))	// squashfs | 						       ((mtd->magic[0] == 0x68) && (mtd->magic[1] == 0x73))	// squashfs | ||||||
| 						    || ((mtd->magic[0] == 0x85) && (mtd->magic[1] == 0x19))	// jffs | 						    || ((mtd->magic[0] == 0x85) && (mtd->magic[1] == 0x19))	// jffs | ||||||
| @@ -1024,8 +1034,15 @@ int main(int argc, char *argv[]) { | |||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			// mtd specific size check | 			// mtd specific size check | ||||||
|  | 			if (mtd == &mtd_image) { | ||||||
|  | 				if (mtd->filesize < 0x00200000) { | ||||||
|  | 					exitcode = 1; | ||||||
|  | 					printf("mtd %s input file %s too unrealistic small (0x%08lX)\n", mtd->name, mtd->filename, mtd->filesize); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			if (mtd == &mtd_kernel) { | 			if (mtd == &mtd_kernel) { | ||||||
| 				if (mtd->filesize < 0x00050000) { | 				if (mtd->filesize < 0x00080000) { | ||||||
| 					exitcode = 1; | 					exitcode = 1; | ||||||
| 					printf("mtd %s input file %s too unrealistic small (0x%08lX)\n", mtd->name, mtd->filename, mtd->filesize); | 					printf("mtd %s input file %s too unrealistic small (0x%08lX)\n", mtd->name, mtd->filename, mtd->filesize); | ||||||
| 				} | 				} | ||||||
| @@ -1044,6 +1061,25 @@ int main(int argc, char *argv[]) { | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		// Check for mandatory parts | ||||||
|  | 		if ((!mtd_image.filename) && (!mtd_kernel.filename || !mtd_rootfs.filename)) { | ||||||
|  | 			exitcode = 1; | ||||||
|  | 			if (mtd_kernel.filename && !mtd_rootfs.filename) { | ||||||
|  | 				printf("Kernel without rootfs, either incorrectly specified or not at all in parameter file\n"); | ||||||
|  | 			} else if (!mtd_kernel.filename && mtd_rootfs.filename) { | ||||||
|  | 				printf("Rootfs without kernel, either incorrectly specified or not at all in parameter file\n"); | ||||||
|  | 			} else { | ||||||
|  | 				printf("Neither an image nor kernel with rootfs was/were correctly specified or at all in parameter file\n"); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Check for duplicate parts | ||||||
|  | 		if ((mtd_image.filename) && (mtd_kernel.filename || mtd_rootfs.filename)) { | ||||||
|  | 			exitcode = 1; | ||||||
|  | 			printf("Image and kernel/rootfs specified in parameter file\n"); | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		lprintf(DEBUG, "...done checking mtd data\n"); | 		lprintf(DEBUG, "...done checking mtd data\n"); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Florian Fainelli
					Florian Fainelli