
From: Kever Yang kever.yang@rock-chips.com Date: Fri, 18 Aug 2017 13:07:04 +0800
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.
Signed-off-by: Kever Yang kever.yang@rock-chips.com
This doesn't work if the ATF BL31_BASE is 0x1000 instead of 0x10000, but there are other reasons why 0x1000 doesn't work. Tested this with ATF v1.4 with BL31_BASE moved back to 0x10000, and that works fine. So this is defenitely progress! This allows me to build my own firmware for the Firefly-RK3399 with a sane console speed of 115200.
Reviewed-by: Mark Kettenis kettenis@openbsd.org Tested-by: Mark Kettenis kettenis@openbsd.org
board/rockchip/evb_rk3399/mk_fit_atf.sh | 110 ++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100755 board/rockchip/evb_rk3399/mk_fit_atf.sh
diff --git a/board/rockchip/evb_rk3399/mk_fit_atf.sh b/board/rockchip/evb_rk3399/mk_fit_atf.sh new file mode 100755 index 0000000..146550a --- /dev/null +++ b/board/rockchip/evb_rk3399/mk_fit_atf.sh @@ -0,0 +1,110 @@ +#!/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
+#tools/mkimage -n rk3399 -T rksd -d spl/u-boot-spl.bin idbspl.img
+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=rk3399bl31_${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","atf@3";
fdt = "fdt@1";
};
+__CONF_SECTION_EOF
- cnt=$((cnt+1))
+done
+cat << __ITS_EOF
- };
+};
+__ITS_EOF
1.9.1
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot