diff options
-rwxr-xr-x | scripts/mkits.sh | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/scripts/mkits.sh b/scripts/mkits.sh index e5369548d7..7533baf799 100755 --- a/scripts/mkits.sh +++ b/scripts/mkits.sh @@ -32,7 +32,9 @@ usage() { printf "\n\t-d ==> include Device Tree Blob 'dtb'" printf "\n\t-r ==> include RootFS blob 'rootfs'" printf "\n\t-H ==> specify hash algo instead of SHA1" - printf "\n\t-o ==> create output file 'its_file'\n" + printf "\n\t-o ==> create output file 'its_file'" + printf "\n\t-O ==> create config with dt overlay 'name:dtb'" + printf "\n\t\t(can be specified more than once)\n" exit 1 } @@ -41,8 +43,10 @@ ROOTFSNUM=1 INITRDNUM=1 HASH=sha1 LOADABLES= +DTOVERLAY= +DTADDR= -while getopts ":A:a:c:C:D:d:e:f:i:k:n:o:v:r:S" OPTION +while getopts ":A:a:c:C:D:d:e:f:i:k:n:o:O:v:r:S" OPTION do case $OPTION in A ) ARCH=$OPTARG;; @@ -57,6 +61,7 @@ do k ) KERNEL=$OPTARG;; n ) FDTNUM=$OPTARG;; o ) OUTPUT=$OPTARG;; + O ) DTOVERLAY="$DTOVERLAY ${OPTARG}";; r ) ROOTFS=$OPTARG;; S ) HASH=$OPTARG;; v ) VERSION=$OPTARG;; @@ -78,6 +83,11 @@ if [ -n "${COMPATIBLE}" ]; then COMPATIBLE_PROP="compatible = \"${COMPATIBLE}\";" fi +[ "$DTOVERLAY" ] && { + dtbsize=$(wc -c "$DTB" | cut -d' ' -f1) + DTADDR=$(printf "0x%08x" $(($LOAD_ADDR - $dtbsize)) ) +} + # Conditionally create fdt information if [ -n "${DTB}" ]; then FDT_NODE=" @@ -86,6 +96,7 @@ if [ -n "${DTB}" ]; then ${COMPATIBLE_PROP} data = /incbin/(\"${DTB}\"); type = \"flat_dt\"; + ${DTADDR:+load = <${DTADDR}>;} arch = \"${ARCH}\"; compression = \"none\"; hash@1 { @@ -141,6 +152,47 @@ if [ -n "${ROOTFS}" ]; then LOADABLES="${LOADABLES:+$LOADABLES, }\"rootfs-${ROOTFSNUM}\"" fi +# add DT overlay blobs +FDTOVERLAY_NODE="" +OVCONFIGS="" +[ "$DTOVERLAY" ] && for overlay in $DTOVERLAY ; do + overlay_blob=${overlay##*:} + ovname=${overlay%%:*} + ovnode="fdt-$ovname" + ovsize=$(wc -c "$overlay_blob" | cut -d' ' -f1) + echo "$ovname ($overlay_blob) : $ovsize" >&2 + DTADDR=$(printf "0x%08x" $(($DTADDR - $ovsize))) + FDTOVERLAY_NODE="$FDTOVERLAY_NODE + + $ovnode { + description = \"${ARCH_UPPER} OpenWrt ${DEVICE} device tree overlay $ovname\"; + ${COMPATIBLE_PROP} + data = /incbin/(\"${overlay_blob}\"); + type = \"flat_dt\"; + arch = \"${ARCH}\"; + load = <${DTADDR}>; + compression = \"none\"; + hash@1 { + algo = \"crc32\"; + }; + hash@2 { + algo = \"${HASH}\"; + }; + }; +" + OVCONFIGS="$OVCONFIGS + + config-$ovname { + description = \"OpenWrt ${DEVICE} with $ovname\"; + kernel = \"kernel-1\"; + fdt = \"fdt-$FDTNUM\", \"$ovnode\"; + ${LOADABLES:+loadables = ${LOADABLES};} + ${COMPATIBLE_PROP} + ${INITRD_PROP} + }; + " +done + # Create a default, fully populated DTS file DATA="/dts-v1/; @@ -167,6 +219,7 @@ DATA="/dts-v1/; }; ${INITRD_NODE} ${FDT_NODE} +${FDTOVERLAY_NODE} ${ROOTFS_NODE} }; @@ -180,6 +233,7 @@ ${ROOTFS_NODE} ${COMPATIBLE_PROP} ${INITRD_PROP} }; + ${OVCONFIGS} }; };" |