build: add helpers for generating QSDK sysupgrade compatible images
Qualcomm SDK (QSDK) sysupgrade compatible images for IPQ40xx, IPQ806x and IPQ807x use FIT format together with 'dumpimage' tool from U-Boot for verifying and extracting them. Based on 'images' sections names, corresponding mtd partitions are flashed. For example, in case of NOR-only boards, below mapping is used (section name -> mtd name): hlos* -> 0:HLOS rootfs* -> rootfs And for boards with NAND (kernel inside UBI): ubi* -> rootfs Above mappings come from unmodified QSDK sources and might be wrong for boards running custom or modified QSDK-based firmware. Some of vendors adjust them to meet their modified mtd layout or features like recovery or dual-image support. This adds simple script 'mkits-qsdk-ipq-image.sh' (based on 'mkits.sh') for generating FIT images tree source files, compatible with the QSDK sysupgrade format. Resulting images can be used for initial (factory -> OpenWrt) installation and would work both in CLI and GUI. The script is universal in a way it allows to include as many sections as needed. To make use of it, two generic/basic build recipes for NOR and NAND based boards are also included in 'image-commands.mk': Build/qsdk-ipq-factory-nand Build/qsdk-ipq-factory-nor Example usage for board with UBI in NAND: IMAGE/nand-factory.bin := append-ubi | qsdk-ipq-factory-nand Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
This commit is contained in:
		| @@ -294,6 +294,20 @@ define Build/openmesh-image | |||||||
| 		"$(call param_get_default,rootfs,$(1),$@)" "rootfs" | 		"$(call param_get_default,rootfs,$(1),$@)" "rootfs" | ||||||
| endef | endef | ||||||
|  |  | ||||||
|  | define Build/qsdk-ipq-factory-nand | ||||||
|  | 	$(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \ | ||||||
|  | 		$@.its ubi $@ | ||||||
|  | 	mkimage -f $@.its $@.new | ||||||
|  | 	@mv $@.new $@ | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Build/qsdk-ipq-factory-nor | ||||||
|  | 	$(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \ | ||||||
|  | 		$@.its hlos $(IMAGE_KERNEL) rootfs $(IMAGE_ROOTFS) | ||||||
|  | 	mkimage -f $@.its $@.new | ||||||
|  | 	@mv $@.new $@ | ||||||
|  | endef | ||||||
|  |  | ||||||
| define Build/senao-header | define Build/senao-header | ||||||
| 	$(STAGING_DIR_HOST)/bin/mksenaofw $(1) -e $@ -o $@.new | 	$(STAGING_DIR_HOST)/bin/mksenaofw $(1) -e $@ -o $@.new | ||||||
| 	mv $@.new $@ | 	mv $@.new $@ | ||||||
|   | |||||||
							
								
								
									
										59
									
								
								scripts/mkits-qsdk-ipq-image.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								scripts/mkits-qsdk-ipq-image.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  | # | ||||||
|  | # Licensed under the terms of the GNU GPL License version 2 or later. | ||||||
|  | # Author: Piotr Dymacz <pepe2k@gmail.com>, based on mkits.sh. | ||||||
|  | # | ||||||
|  | # Qualcomm SDK (QSDK) sysupgrade compatible images for IPQ40xx, IPQ806x | ||||||
|  | # and IPQ807x use FIT format together with 'dumpimage' tool from U-Boot | ||||||
|  | # for verifying and extracting them. Based on 'images' sections names, | ||||||
|  | # corresponding mtd partitions are flashed. | ||||||
|  | # This is a simple script for generating FIT images tree source files, | ||||||
|  | # compatible with the QSDK sysupgrade format. Resulting images can be | ||||||
|  | # used for initial (factory -> OpenWrt) installation and would work | ||||||
|  | # both in CLI and GUI. The script is also universal in a way it allows | ||||||
|  | # to include as many sections as needed. | ||||||
|  | # | ||||||
|  |  | ||||||
|  | usage() { | ||||||
|  | 	echo "Usage: `basename $0` output img0_name img0_file [[img1_name img1_file] ...]" | ||||||
|  | 	exit 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # We need at least 3 arguments | ||||||
|  | [ "$#" -lt 3 ] && usage | ||||||
|  |  | ||||||
|  | # Target output file | ||||||
|  | OUTPUT="$1"; shift | ||||||
|  |  | ||||||
|  | # Create a default, fully populated DTS file | ||||||
|  | echo "\ | ||||||
|  | /dts-v1/; | ||||||
|  |  | ||||||
|  | / { | ||||||
|  | 	description = \"OpenWrt factory image\"; | ||||||
|  | 	#address-cells = <1>; | ||||||
|  |  | ||||||
|  | 	images {" > ${OUTPUT} | ||||||
|  |  | ||||||
|  | while [ -n "$1" -a -n "$2" ]; do | ||||||
|  | 	[ -f "$2" ] || usage | ||||||
|  |  | ||||||
|  | 	name="$1"; shift | ||||||
|  | 	file="$1"; shift | ||||||
|  |  | ||||||
|  | 	echo \ | ||||||
|  | "		${name} { | ||||||
|  | 			description = \"${name}\"; | ||||||
|  | 			data = /incbin/(\"${file}\"); | ||||||
|  | 			type = \"Firmware\"; | ||||||
|  | 			arch = \"ARM\"; | ||||||
|  | 			compression = \"none\"; | ||||||
|  | 			hash@1 { | ||||||
|  | 				algo = \"crc32\"; | ||||||
|  | 			}; | ||||||
|  | 		};" >> ${OUTPUT} | ||||||
|  | done | ||||||
|  |  | ||||||
|  | echo \ | ||||||
|  | "	}; | ||||||
|  | };" >> ${OUTPUT} | ||||||
		Reference in New Issue
	
	Block a user
	 Piotr Dymacz
					Piotr Dymacz