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:
parent
f20fea9dcd
commit
bf4630e5ad
@ -294,6 +294,20 @@ define Build/openmesh-image
|
||||
"$(call param_get_default,rootfs,$(1),$@)" "rootfs"
|
||||
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
|
||||
$(STAGING_DIR_HOST)/bin/mksenaofw $(1) -e $@ -o $@.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}
|
Loading…
Reference in New Issue
Block a user