rockchip: rk3328-evb: add script for atf fit

Add a script to generate binaries from bl31.elf, and generate
u-boot.its file for FIT image including u-boot, dtb and atf
binaries.

Change-Id: Ife016da5468b3c618c619354fb280b6951aed94b
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
Kever Yang 2017-10-26 11:58:03 +08:00
parent 6c73d5e78d
commit 0d85fb9b23
1 changed files with 108 additions and 0 deletions

View File

@ -0,0 +1,108 @@
#!/bin/sh
#
# script to generate FIT image source for rk3399 boards with
# ARM Trusted Firmware and multiple device trees (given on the command line)
#
# usage: $0 <dt_name> [<dt_name> [<dt_name] ...]
[ -z "$BL31" ] && BL31="bl31.elf"
if [ ! -f $BL31 ]; then
echo "WARNING: BL31 file $BL31 NOT found, resulting binary is non-functional" >&2
BL31=/dev/null
fi
cat << __HEADER_EOF
/dts-v1/;
/ {
description = "Configuration to load ATF before U-Boot";
#address-cells = <1>;
images {
uboot@1 {
description = "U-Boot (64-bit)";
data = /incbin/("u-boot-nodtb.bin");
type = "standalone";
arch = "arm64";
compression = "none";
load = <0x00200000>;
};
__HEADER_EOF
atf_cnt=1
for l in `readelf -l $BL31 | grep -A1 LOAD | gawk --non-decimal-data \
'{if (NR % 2) {printf "%d:0x%x:", $2,$4} else {printf "%d\n", $1}}'`
do
offset=${l%%:*}
ll=${l#*:}
phy_offset=${ll%:*}
filesz=${ll##*:}
#echo "$offset/$phy_offset/$filesz"
of=bl31_${phy_offset}.bin
dd if=$BL31 of=$of bs=1 skip=$offset count=$filesz
out_string="${out_string}:${phy_offset}"
cat << __ATF1_EOF
atf@$atf_cnt {
description = "ARM Trusted Firmware";
data = /incbin/("$of");
type = "firmware";
arch = "arm64";
compression = "none";
load = <$phy_offset>;
__ATF1_EOF
if [ "$atf_cnt" -eq 1 ]; then
cat << __ATF2_EOF
entry = <$phy_offset>;
__ATF2_EOF
fi
cat << __ATF3_EOF
};
__ATF3_EOF
atf_cnt=$((atf_cnt + 1))
done
cnt=1
for dtname in $*
do
cat << __FDT_IMAGE_EOF
fdt@$cnt {
description = "$(basename $dtname .dtb)";
data = /incbin/("$dtname");
type = "flat_dt";
compression = "none";
};
__FDT_IMAGE_EOF
cnt=$((cnt+1))
done
cat << __CONF_HEADER_EOF
};
configurations {
default = "config@1";
__CONF_HEADER_EOF
cnt=1
for dtname in $*
do
cat << __CONF_SECTION_EOF
config@$cnt {
description = "$(basename $dtname .dtb)";
firmware = "uboot@1";
loadables = "atf@1","atf@2";
fdt = "fdt@1";
};
__CONF_SECTION_EOF
cnt=$((cnt+1))
done
cat << __ITS_EOF
};
};
__ITS_EOF