以下所有的操作基于``
kernel下面生成的boot.img
是RKIMG
(RKIMG is a format customized by Rockchip from Android boot image)的镜像,因为u-boot里面用的命令是android_boot
(之前不知道这个东西是用安卓启动的方式启动linux内核的,误解成是bootrkp)
然后FIT镜像是uboot.itb
,在uboot目录下的fit
,可以用dumpimage -l uboot.itb
查看.
TSPI的原厂固件boot.img
,recovery.img
也是一个FIT镜像
所以镜像分两种,一个是uboot FIT
一个是android
镜像
分区信息可以在执行完./make.sh orangepi-3b-rk3566
后看见fit/u-boot.its
/*
* Copyright (C) 2020 Rockchip Electronic Co.,Ltd
*
* Simple U-boot fit source file containing ATF/OP-TEE/U-Boot/dtb/MCU
*/
/dts-v1/;
/ {
description = "FIT Image with ATF/OP-TEE/U-Boot/MCU";
#address-cells = <1>;
images {
uboot {
description = "U-Boot";
data = /incbin/("u-boot-nodtb.bin");
type = "standalone";
arch = "arm64";
os = "U-Boot";
compression = "none";
load = <0x00a00000>;
hash {
algo = "sha256";
};
};
atf-1 {
description = "ARM Trusted Firmware";
data = /incbin/("./bl31_0x00040000.bin");
type = "firmware";
arch = "arm64";
os = "arm-trusted-firmware";
compression = "none";
load = <0x00040000>;
hash {
algo = "sha256";
};
};
atf-2 {
description = "ARM Trusted Firmware";
data = /incbin/("./bl31_0xfdcc1000.bin");
type = "firmware";
arch = "arm64";
os = "arm-trusted-firmware";
compression = "none";
load = <0xfdcc1000>;
hash {
algo = "sha256";
};
};
atf-3 {
description = "ARM Trusted Firmware";
data = /incbin/("./bl31_0x0006b000.bin");
type = "firmware";
arch = "arm64";
os = "arm-trusted-firmware";
compression = "none";
load = <0x0006b000>;
hash {
algo = "sha256";
};
};
atf-4 {
description = "ARM Trusted Firmware";
data = /incbin/("./bl31_0xfdcd0000.bin");
type = "firmware";
arch = "arm64";
os = "arm-trusted-firmware";
compression = "none";
load = <0xfdcd0000>;
hash {
algo = "sha256";
};
};
atf-5 {
description = "ARM Trusted Firmware";
data = /incbin/("./bl31_0xfdcce000.bin");
type = "firmware";
arch = "arm64";
os = "arm-trusted-firmware";
compression = "none";
load = <0xfdcce000>;
hash {
algo = "sha256";
};
};
atf-6 {
description = "ARM Trusted Firmware";
data = /incbin/("./bl31_0x00069000.bin");
type = "firmware";
arch = "arm64";
os = "arm-trusted-firmware";
compression = "none";
load = <0x00069000>;
hash {
algo = "sha256";
};
};
fdt {
description = "U-Boot dtb";
data = /incbin/("./u-boot.dtb");
type = "flat_dt";
arch = "arm64";
compression = "none";
hash {
algo = "sha256";
};
};
};
configurations {
default = "conf";
conf {
description = "rk3566-orangepi-3b";
rollback-index = <0x0>;
firmware = "atf-1";
loadables = "uboot", "atf-2", "atf-3", "atf-4", "atf-5", "atf-6";
fdt = "fdt";
signature {
algo = "sha256,rsa2048";
key-name-hint = "dev";
sign-images = "fdt", "firmware", "loadables";
};
};
};
};
如何pack idblock(idbloader)?
在u-boot下面进行
./make.sh --idblock
shell源码:
function pack_idblock()
{
INI=${INI_LOADER}
if [ ! -f ${INI} ]; then
echo "ERROR: No ${INI}"
exit 1
fi
# chip
COMMON_H=`grep "_common.h:" include/autoconf.mk.dep | awk -F "/" '{ printf $3 }'`
PLAT=${COMMON_H%_*}
# file
SPL_BIN=${RKBIN}/`filt_val "FlashBoot" ${INI}`
TPL_BIN=${RKBIN}/`filt_val "FlashData" ${INI}`
if [ ! -z "${ARG_SPL_BIN}" ]; then
SPL_BIN=${ARG_SPL_BIN}
fi
if [ ! -z "${ARG_TPL_BIN}" ]; then
TPL_BIN=${ARG_TPL_BIN}
fi
# pack
rm idblock.bin -f
./tools/mkimage -n ${PLAT} -T rksd -d ${TPL_BIN}:${SPL_BIN} idblock.bin
echo "Input:"
echo " ${INI}"
echo " ${TPL_BIN}"
echo " ${SPL_BIN}"
echo
echo "Pack ${PLAT} idblock.bin okay!"
echo
}
运行后终端提示:
(py2) ➜ u-boot-orangepi git:(v2017.09-rk3588) ./make.sh --idblock
Image Type: Rockchip RK35 boot image
Init Data Size: 55296 bytes
Boot Data Size: 241664 bytes
Input:
/home/ztn/Embedded/RK/rkbin/RKBOOT/RK3566MINIALL.ini
/home/ztn/Embedded/RK/rkbin/bin/rk35/rk3566_ddr_1056MHz_v1.18.bin
/home/ztn/Embedded/RK/rkbin/bin/rk35/rk356x_spl_v1.12.bin
Pack rk3568 idblock.bin okay!
在运行./make.sh xxx
时候INI_LOADER如何被选中?
看源码make.sh
, 是从当前目录下的.config
中寻找CONFIG_LOADER_INI
function select_ini_file()
{
# default
INI_LOADER=${RKBIN}/RKBOOT/${RKCHIP_LOADER}MINIALL.ini
if [ "${ARM64_TRUSTZONE}" == "y" ]; then
INI_TRUST=${RKBIN}/RKTRUST/${RKCHIP_TRUST}TRUST.ini
else
INI_TRUST=${RKBIN}/RKTRUST/${RKCHIP_TRUST}TOS.ini
fi
# defconfig
NAME=`filt_val "CONFIG_LOADER_INI" .config`
if [ ! -z "${NAME}" ]; then
INI_LOADER=${RKBIN}/RKBOOT/${NAME}
fi
NAME=`filt_val "CONFIG_TRUST_INI" .config`
if [ ! -z "${NAME}" ]; then
INI_TRUST=${RKBIN}/RKTRUST/${NAME}
fi
# args
if [ ! -z "${ARG_INI_TRUST}" ]; then
INI_TRUST=${ARG_INI_TRUST}
fi
if [ ! -z "${ARG_INI_LOADER}" ]; then
INI_LOADER=${ARG_INI_LOADER}
fi
}
小勘误
rockchip wiki上面是这样从bin 制作img的(img烧录到sd卡中)
tools/mkimage -n rkxxxx -T rksd -d rkxx_ddr_vx.xx.bin idbloader.img
cat rkxx_miniloader_vx.xx.bin >> idbloader.img
但是这样会有问题(提示文件过大)
然后用make.sh
里面的方法:
./tools/mkimage -n ${PLAT} -T rksd -d ${TPL_BIN}:${SPL_BIN} idblock.bin