@@ -51,28 +51,35 @@ LOGO_PATH=${srctree}/logo.bmp
5151LOGO_KERNEL_PATH=${srctree} /logo_kernel.bmp
5252[ -f ${LOGO_KERNEL_PATH} ] && LOGO_KERNEL=logo_kernel.bmp
5353
54- RAMDISK_IMG_PATH=${objtree} /ramdisk.img
55- [ -f ${RAMDISK_IMG_PATH} ] && RAMDISK_IMG=ramdisk.img && RAMDISK_ARG=" --ramdisk ${RAMDISK_IMG_PATH} "
56-
54+ KERNEL_IMAGE_PATH=${objtree} /arch/${ARCH} /boot/Image
55+ KERNEL_IMAGE_ARG=" --kernel ${KERNEL_IMAGE_PATH} "
5756if [ " ${ARCH} " == " arm" ]; then
5857 DTB_PATH=${objtree} /arch/arm/boot/dts/${DTB}
59- KERNEL_IMAGE_ARG= " --kernel ${objtree} /arch/arm/boot/Image "
60- KERNEL_ZIMAGE_ARG=" --kernel ${objtree} /arch/arm/boot/zImage "
58+ KERNEL_ZIMAGE_PATH= ${objtree} /arch/arm/boot/zImage
59+ KERNEL_ZIMAGE_ARG=" --kernel ${KERNEL_ZIMAGE_PATH} "
6160 ZIMAGE=zImage
6261else
6362 DTB_PATH=${objtree} /arch/arm64/boot/dts/rockchip/${DTB}
64- KERNEL_IMAGE_ARG=" --kernel ${objtree} /arch/arm64/boot/Image"
6563 KERNEL_ZIMAGE_ARG=" --kernel ${objtree} /arch/arm64/boot/Image.lz4"
6664 ZIMAGE=Image.lz4
6765fi
6866if [ ! -f ${DTB_PATH} ]; then
69- echo " No dtb"
67+ echo " No dtb" >&2
7068 usage
7169 exit 1
7270fi
7371
72+ OUT=out
73+ ITB=${BOOT_IMG}
74+ ITS=${OUT} /boot.its
75+ MKIMAGE=${MKIMAGE-" mkimage" }
76+ MKIMAGE_ARG=" -E -p 0x800"
77+
7478make_boot_img ()
7579{
80+ RAMDISK_IMG_PATH=${objtree} /ramdisk.img
81+ [ -f ${RAMDISK_IMG_PATH} ] && RAMDISK_IMG=ramdisk.img && RAMDISK_ARG=" --ramdisk ${RAMDISK_IMG_PATH} "
82+
7683 ${srctree} /scripts/mkbootimg \
7784 ${KERNEL_IMAGE_ARG} \
7885 ${RAMDISK_ARG} \
@@ -90,21 +97,113 @@ make_boot_img()
9097repack_boot_img ()
9198{
9299 ${srctree} /scripts/repack-bootimg \
93- --boot_img ${BOOT_IMG} --out out \
100+ --boot_img ${BOOT_IMG} --out ${OUT} \
94101 ${KERNEL_IMAGE_ARG} \
95102 --second resource.img \
96103 --dtb ${DTB_PATH} \
97104 -o boot.img &&
98105 echo " Image: boot.img (${BOOT_IMG} + Image + resource.img) is ready" ;
99106 ${srctree} /scripts/repack-bootimg \
100- --boot_img ${BOOT_IMG} --out out \
107+ --boot_img ${BOOT_IMG} --out ${OUT} \
101108 ${KERNEL_ZIMAGE_ARG} \
102109 --second resource.img \
103110 --dtb ${DTB_PATH} \
104111 -o zboot.img && \
105112 echo " Image: zboot.img (${BOOT_IMG} + ${ZIMAGE} + resource.img) is ready"
106113}
107114
115+ check_mkimage ()
116+ {
117+ MKIMAGE=$( type -path ${MKIMAGE} )
118+ if [ -z " ${MKIMAGE} " ]; then
119+ # Doesn't exist
120+ echo ' "mkimage" command not found - U-Boot images will not be built' >&2
121+ exit 1;
122+ fi
123+ }
124+
125+ unpack_itb ()
126+ {
127+ mkdir -p ${OUT}
128+ rm -f ${OUT} /fdt ${OUT} /kernel ${OUT} /resource
129+
130+ for NAME in $( fdtget -l ${ITB} /images)
131+ do
132+ # generate image
133+ NODE=" /images/${NAME} "
134+ OFFS=$( fdtget -ti ${ITB} ${NODE} data-position)
135+ SIZE=$( fdtget -ti ${ITB} ${NODE} data-size)
136+ if [ -z ${OFFS} ]; then
137+ continue ;
138+ fi
139+
140+ if [ ${SIZE} -ne 0 ]; then
141+ dd if=${ITB} of=${OUT} /${NAME} bs=${SIZE} count=1 skip=${OFFS} iflag=skip_bytes > /dev/null 2>&1
142+ else
143+ touch ${OUT} /${NAME}
144+ fi
145+ done
146+
147+ [ ! -f ${OUT} /kernel ] && echo " FIT ${ITB} no kernel" >&2 && exit 1 || true
148+ }
149+
150+ gen_its ()
151+ {
152+ TMP_ITB=${OUT} /boot.tmp
153+
154+ # add placeholder
155+ cp -a ${ITB} ${TMP_ITB}
156+ for NAME in $( fdtget -l ${ITB} /images) ; do
157+ fdtput -t s ${TMP_ITB} /images/${NAME} data " /INCBIN/(${NAME} )"
158+ done
159+ dtc -I dtb -O dts ${TMP_ITB} -o ${ITS} > /dev/null 2>&1
160+ rm -f ${TMP_ITB}
161+
162+ # fixup placeholder: data = "/INCBIN/(...)"; -> data = /incbin/("...");
163+ sed -i " s/\" \/INCBIN\/(\(.*\))\" /\/incbin\/(\" \1\" )/" ${ITS}
164+
165+ # remove
166+ sed -i " /memreserve/d" ${ITS}
167+ sed -i " /timestamp/d" ${ITS}
168+ sed -i " /data-size/d" ${ITS}
169+ sed -i " /data-position/d" ${ITS}
170+ sed -i " /value/d" ${ITS}
171+ sed -i " /hashed-strings/d" ${ITS}
172+ sed -i " /hashed-nodes/d" ${ITS}
173+ sed -i " /signer-version/d" ${ITS}
174+ sed -i " /signer-name/d" ${ITS}
175+ }
176+
177+ gen_itb ()
178+ {
179+ [ -f ${OUT} /fdt ] && cp -a ${DTB_PATH} ${OUT} /fdt && FDT=" + ${DTB} "
180+ [ -f ${OUT} /resource ] && cp -a resource.img ${OUT} /resource && RESOURCE=" + resource.img"
181+ COMP=$( fdtget ${ITB} /images/kernel compression)
182+ case " ${COMP} " in
183+ gzip) EXT=" .gz" ;;
184+ lz4) EXT=" .lz4" ;;
185+ bzip2) EXT=" .bz2" ;;
186+ lzma) EXT=" .lzma" ;;
187+ lzo) EXT=" .lzo" ;;
188+ esac
189+ cp -a ${KERNEL_IMAGE_PATH}${EXT} ${OUT} /kernel && \
190+ ${MKIMAGE} ${MKIMAGE_ARG} -f ${ITS} boot.img > /dev/null && \
191+ echo " Image: boot.img (FIT ${BOOT_IMG} + Image${EXT}${FDT}${RESOURCE} ) is ready" ;
192+ if [ " ${EXT} " == " " ] && [ -f ${KERNEL_ZIMAGE_PATH} ]; then
193+ cp -a ${KERNEL_ZIMAGE_PATH} ${OUT} /kernel && \
194+ ${MKIMAGE} ${MKIMAGE_ARG} -f ${ITS} zboot.img > /dev/null && \
195+ echo " Image: zboot.img (FIT ${BOOT_IMG} + zImage${FDT}${RESOURCE} ) is ready" ;
196+ fi
197+ }
198+
199+ repack_itb ()
200+ {
201+ check_mkimage
202+ unpack_itb
203+ gen_its
204+ gen_itb
205+ }
206+
108207if [ -x ${srctree} /scripts/bmpconvert ]; then
109208 if [ -f ${LOGO_PATH} ]; then
110209 ${srctree} /scripts/bmpconvert ${LOGO_PATH} ;
125224scripts/resource_tool ${DTB_PATH} ${LOGO} ${LOGO_KERNEL} > /dev/null
126225echo " Image: resource.img (with ${DTB} ${LOGO} ${LOGO_KERNEL} ) is ready"
127226
128- if [ -f " ${BOOT_IMG} " -a -x ${srctree} /scripts/repack-bootimg ]; then
129- repack_boot_img;
227+ if [ -f " ${BOOT_IMG} " ]; then
228+ if file -p -b ${BOOT_IMG} | grep -q ' Device Tree Blob' ; then
229+ repack_itb;
230+ elif [ -x ${srctree} /scripts/repack-bootimg ]; then
231+ repack_boot_img;
232+ fi
130233elif [ -x ${srctree} /scripts/mkbootimg ]; then
131234 make_boot_img;
132235fi
0 commit comments