Skip to content

Commit 6fd73ce

Browse files
committed
rk: scripts/mkimg: Support repack fit image
Change-Id: I82429ebf1989760c9bfd258debf416d55b4d2cf5 Signed-off-by: Tao Huang <huangtao@rock-chips.com>
1 parent 432d2ae commit 6fd73ce

1 file changed

Lines changed: 114 additions & 11 deletions

File tree

scripts/mkimg

Lines changed: 114 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,28 +51,35 @@ LOGO_PATH=${srctree}/logo.bmp
5151
LOGO_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}"
5756
if [ "${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
6261
else
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
6765
fi
6866
if [ ! -f ${DTB_PATH} ]; then
69-
echo "No dtb"
67+
echo "No dtb" >&2
7068
usage
7169
exit 1
7270
fi
7371

72+
OUT=out
73+
ITB=${BOOT_IMG}
74+
ITS=${OUT}/boot.its
75+
MKIMAGE=${MKIMAGE-"mkimage"}
76+
MKIMAGE_ARG="-E -p 0x800"
77+
7478
make_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()
9097
repack_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+
108207
if [ -x ${srctree}/scripts/bmpconvert ]; then
109208
if [ -f ${LOGO_PATH} ]; then
110209
${srctree}/scripts/bmpconvert ${LOGO_PATH};
@@ -125,8 +224,12 @@ fi
125224
scripts/resource_tool ${DTB_PATH} ${LOGO} ${LOGO_KERNEL} >/dev/null
126225
echo " 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
130233
elif [ -x ${srctree}/scripts/mkbootimg ]; then
131234
make_boot_img;
132235
fi

0 commit comments

Comments
 (0)