Files
device_rockchip/common/build.sh
2023-03-17 14:46:19 +08:00

1495 lines
42 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
export LC_ALL=C
export LD_LIBRARY_PATH=
unset RK_CFG_TOOLCHAIN
err_handler() {
ret=$?
[ "$ret" -eq 0 ] && return
echo "ERROR: Running ${FUNCNAME[1]} failed!"
echo "ERROR: exit code $ret from line ${BASH_LINENO[0]}:"
echo " $BASH_COMMAND"
exit $ret
}
trap 'err_handler' ERR
set -eE
function finish_build(){
echo "Running ${FUNCNAME[1]} succeeded."
cd $TOP_DIR
}
function check_config(){
unset missing
for var in $@; do
eval [ \$$var ] && continue
missing="$missing $var"
done
[ -z "$missing" ] && return 0
echo "Skipping ${FUNCNAME[1]} for missing configs: $missing."
return 1
}
function choose_target_board()
{
echo
echo "You're building on Linux"
echo "Lunch menu...pick a combo:"
echo ""
echo "0. default BoardConfig.mk"
echo ${RK_TARGET_BOARD_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/\n/. /"
local INDEX
read -p "Which would you like? [0]: " INDEX
INDEX=$((${INDEX:-0} - 1))
if echo $INDEX | grep -vq [^0-9]; then
RK_BUILD_TARGET_BOARD="${RK_TARGET_BOARD_ARRAY[$INDEX]}"
else
echo "Lunching for Default BoardConfig.mk boards..."
RK_BUILD_TARGET_BOARD=BoardConfig.mk
fi
}
function build_select_board()
{
RK_TARGET_BOARD_ARRAY=( $(cd ${TARGET_PRODUCT_DIR}/; ls BoardConfig*.mk | sort) )
RK_TARGET_BOARD_ARRAY_LEN=${#RK_TARGET_BOARD_ARRAY[@]}
if [ $RK_TARGET_BOARD_ARRAY_LEN -eq 0 ]; then
echo "No available Board Config"
return
fi
choose_target_board
ln -rfs $TARGET_PRODUCT_DIR/$RK_BUILD_TARGET_BOARD device/rockchip/.BoardConfig.mk
echo "switching to board: `realpath $BOARD_CONFIG`"
}
function unset_board_config_all()
{
local tmp_file=`mktemp`
grep -oh "^export.*RK_.*=" `find device -name "Board*.mk"` > $tmp_file
source $tmp_file
rm -f $tmp_file
}
CMD=`realpath $0`
COMMON_DIR=`dirname $CMD`
TOP_DIR=$(realpath $COMMON_DIR/../../..)
cd $TOP_DIR
BOARD_CONFIG=$TOP_DIR/device/rockchip/.BoardConfig.mk
TARGET_PRODUCT="$TOP_DIR/device/rockchip/.target_product"
TARGET_PRODUCT_DIR=$(realpath ${TARGET_PRODUCT})
if [ ! -L "$BOARD_CONFIG" -a "$1" != "lunch" ]; then
build_select_board
fi
unset_board_config_all
[ -L "$BOARD_CONFIG" ] && source $BOARD_CONFIG
function prebuild_uboot()
{
UBOOT_COMPILE_COMMANDS="\
${RK_TRUST_INI_CONFIG:+../rkbin/RKTRUST/$RK_TRUST_INI_CONFIG} \
${RK_SPL_INI_CONFIG:+../rkbin/RKBOOT/$RK_SPL_INI_CONFIG} \
${RK_UBOOT_SIZE_CONFIG:+--sz-uboot $RK_UBOOT_SIZE_CONFIG} \
${RK_TRUST_SIZE_CONFIG:+--sz-trust $RK_TRUST_SIZE_CONFIG}"
UBOOT_COMPILE_COMMANDS="$(echo $UBOOT_COMPILE_COMMANDS)"
if [ "$RK_LOADER_UPDATE_SPL" = "true" ]; then
UBOOT_COMPILE_COMMANDS="--spl-new $UBOOT_COMPILE_COMMANDS"
UBOOT_COMPILE_COMMANDS="$(echo $UBOOT_COMPILE_COMMANDS)"
fi
if [ "$RK_RAMDISK_SECURITY_BOOTUP" = "true" ];then
UBOOT_COMPILE_COMMANDS=" \
$UBOOT_COMPILE_COMMANDS \
${RK_ROLLBACK_INDEX_BOOT:+--rollback-index-boot $RK_ROLLBACK_INDEX_BOOT} \
${RK_ROLLBACK_INDEX_UBOOT:+--rollback-index-uboot $RK_ROLLBACK_INDEX_UBOOT} "
fi
}
function prebuild_security_uboot()
{
local mode=$1
if [ "$RK_RAMDISK_SECURITY_BOOTUP" = "true" ];then
if [ "$RK_SECURITY_OTP_DEBUG" != "true" ]; then
UBOOT_COMPILE_COMMANDS="$UBOOT_COMPILE_COMMANDS --burn-key-hash"
fi
case "${mode:-normal}" in
uboot)
;;
boot)
UBOOT_COMPILE_COMMANDS=" \
--boot_img $TOP_DIR/u-boot/boot.img \
$UBOOT_COMPILE_COMMANDS "
;;
recovery)
UBOOT_COMPILE_COMMANDS=" \
--recovery_img $TOP_DIR/u-boot/recovery.img
$UBOOT_COMPILE_COMMANDS "
;;
*)
UBOOT_COMPILE_COMMANDS=" \
--boot_img $TOP_DIR/u-boot/boot.img \
$UBOOT_COMPILE_COMMANDS "
test -z "${RK_PACKAGE_FILE_AB}" && \
UBOOT_COMPILE_COMMANDS="$UBOOT_COMPILE_COMMANDS --recovery_img $TOP_DIR/u-boot/recovery.img"
;;
esac
UBOOT_COMPILE_COMMANDS="$(echo $UBOOT_COMPILE_COMMANDS)"
fi
}
function usagekernel()
{
check_config RK_KERNEL_DTS RK_KERNEL_DEFCONFIG || return 0
echo "cd kernel"
echo "make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG $RK_KERNEL_DEFCONFIG_FRAGMENT"
echo "make ARCH=$RK_ARCH $RK_KERNEL_DTS.img -j$RK_JOBS"
}
function usageuboot()
{
check_config RK_UBOOT_DEFCONFIG || return 0
prebuild_uboot
prebuild_security_uboot $1
cd u-boot
echo "cd u-boot"
if [ -n "$RK_UBOOT_DEFCONFIG_FRAGMENT" ]; then
if [ -f "configs/${RK_UBOOT_DEFCONFIG}_defconfig" ]; then
echo "make ${RK_UBOOT_DEFCONFIG}_defconfig $RK_UBOOT_DEFCONFIG_FRAGMENT"
else
echo "make ${RK_UBOOT_DEFCONFIG}.config $RK_UBOOT_DEFCONFIG_FRAGMENT"
fi
echo "./make.sh $UBOOT_COMPILE_COMMANDS"
else
echo "./make.sh $RK_UBOOT_DEFCONFIG $UBOOT_COMPILE_COMMANDS"
fi
if [ "$RK_IDBLOCK_UPDATE_SPL" = "true" ]; then
echo "./make.sh --idblock --spl"
fi
finish_build
}
function usagerootfs()
{
check_config RK_ROOTFS_IMG || return 0
if [ "${RK_CFG_BUILDROOT}x" != "x" ];then
echo "source envsetup.sh $RK_CFG_BUILDROOT"
else
if [ "${RK_CFG_RAMBOOT}x" != "x" ];then
echo "source envsetup.sh $RK_CFG_RAMBOOT"
else
echo "Not found config buildroot. Please Check !!!"
fi
fi
case "${RK_ROOTFS_SYSTEM:-buildroot}" in
yocto)
;;
ubuntu)
;;
debian)
;;
*)
echo "make"
;;
esac
}
function usagerecovery()
{
check_config RK_CFG_RECOVERY || return 0
echo "source envsetup.sh $RK_CFG_RECOVERY"
echo "$COMMON_DIR/mk-ramdisk.sh recovery.img $RK_CFG_RECOVERY"
}
function usageramboot()
{
check_config RK_CFG_RAMBOOT || return 0
echo "source envsetup.sh $RK_CFG_RAMBOOT"
echo "$COMMON_DIR/mk-ramdisk.sh ramboot.img $RK_CFG_RAMBOOT"
}
function usagemodules()
{
check_config RK_KERNEL_DEFCONFIG || return 0
echo "cd kernel"
echo "make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG"
echo "make ARCH=$RK_ARCH modules -j$RK_JOBS"
}
function usagesecurity()
{
case "$1" in
uboot) usageboot $1;;
boot)
usageramboot;
echo "cp buildroot/output/$RK_CFG_RAMBOOT/images/ramboot.img u-boot/boot.img"
usageuboot $1;;
recovery)
usagerecovery;
echo "cp buildroot/output/$RK_CFG_RECOVERY/images/recovery.img u-boot/recovery.img"
usageuboot $1;;
rootfs)
usagerootfs;
usagesecurity boot;;
*);;
esac
}
function usagesecurity_uboot()
{
usageuboot uboot
}
function usagesecurity_boot()
{
usagesecurity boot
}
function usagesecurity_recovery()
{
usagesecurity recovery
}
function usagesecurity_rootfs()
{
usagesecurity rootfs
}
function usage()
{
echo "Usage: build.sh [OPTIONS]"
echo "Available options:"
echo "BoardConfig*.mk -switch to specified board config"
echo "lunch -list current SDK boards and switch to specified board config"
echo "uboot -build uboot"
echo "uefi -build uefi"
echo "spl -build spl"
echo "loader -build loader"
echo "kernel -build kernel"
echo "kerneldeb -build kernel deb"
echo "modules -build kernel modules"
echo "toolchain -build toolchain"
echo "extboot -build extlinux boot.img, boot from EFI partition"
echo "rootfs -build default rootfs, currently build buildroot as default"
echo "buildroot -build buildroot rootfs"
echo "ramboot -build ramboot image"
echo "multi-npu_boot -build boot image for multi-npu board"
echo "yocto -build yocto rootfs"
echo "ubuntu -build ubuntu rootfs"
echo "debian -build debian rootfs"
echo "pcba -build pcba"
echo "recovery -build recovery"
echo "all -build uboot, kernel, rootfs, recovery image"
echo "cleanall -clean uboot, kernel, rootfs, recovery"
echo "firmware -pack all the image we need to boot up system"
echo "updateimg -pack update image"
echo "otapackage -pack ab update otapackage image (update_ota.img)"
echo "sdpackage -pack update sdcard package image (update_sdcard.img)"
echo "save -save images, patches, commands used to debug"
echo "allsave -build all & firmware & updateimg & save"
echo "check -check the environment of building"
echo "info -see the current board building information"
echo "app/<pkg> -build packages in the dir of app/*"
echo "external/<pkg> -build packages in the dir of external/*"
echo ""
echo "createkeys -create secureboot root keys"
echo "security_rootfs -build rootfs and some relevant images with security paramter (just for dm-v)"
echo "security_boot -build boot with security paramter"
echo "security_uboot -build uboot with security paramter"
echo "security_recovery -build recovery with security paramter"
echo "security_check -check security paramter if it's good"
echo ""
echo "Default option is 'allsave'."
}
function build_info(){
if [ ! -L $TARGET_PRODUCT_DIR ];then
echo "No found target product!!!"
fi
if [ ! -L $BOARD_CONFIG ];then
echo "No found target board config!!!"
fi
if [ -f .repo/manifest.xml ]; then
local sdk_ver=""
sdk_ver=`grep "include name" .repo/manifest.xml | awk -F\" '{print $2}'`
sdk_ver=`realpath .repo/manifests/${sdk_ver}`
echo "Build SDK version: `basename ${sdk_ver}`"
else
echo "Not found .repo/manifest.xml [ignore] !!!"
fi
echo "Current Building Information:"
echo "Target Product: $TARGET_PRODUCT_DIR"
echo "Target BoardConfig: `realpath $BOARD_CONFIG`"
echo "Target Misc config:"
echo "`env |grep "^RK_" | grep -v "=$" | sort`"
local kernel_file_dtb
if [ "$RK_ARCH" == "arm" ]; then
kernel_file_dtb="${TOP_DIR}/kernel/arch/arm/boot/dts/${RK_KERNEL_DTS}.dtb"
else
kernel_file_dtb="${TOP_DIR}/kernel/arch/arm64/boot/dts/rockchip/${RK_KERNEL_DTS}.dtb"
fi
rm -f $kernel_file_dtb
cd kernel
make ARCH=$RK_ARCH dtbs -j$RK_JOBS
# build_check_power_domain
}
function build_check_power_domain(){
local dump_kernel_dtb_file
local tmp_phandle_file
local tmp_io_domain_file
local tmp_regulator_microvolt_file
local tmp_final_target
local tmp_none_item
local kernel_file_dtb_dts
if [ "$RK_ARCH" == "arm" ]; then
kernel_file_dtb_dts="${TOP_DIR}/kernel/arch/arm/boot/dts/$RK_KERNEL_DTS"
else
kernel_file_dtb_dts="${TOP_DIR}/kernel/arch/arm64/boot/dts/rockchip/$RK_KERNEL_DTS"
fi
dump_kernel_dtb_file=${kernel_file_dtb_dts}.dump.dts
tmp_phandle_file=`mktemp`
tmp_io_domain_file=`mktemp`
tmp_regulator_microvolt_file=`mktemp`
tmp_final_target=`mktemp`
tmp_grep_file=`mktemp`
dtc -I dtb -O dts -o ${dump_kernel_dtb_file} ${kernel_file_dtb_dts}.dtb 2>/dev/null
if [ "$RK_SYSTEM_CHECK_METHOD" = "DM-E" ] ; then
if ! grep "compatible = \"linaro,optee-tz\";" $dump_kernel_dtb_file > /dev/null 2>&1 ; then
echo "Please add: "
echo " optee: optee {"
echo " compatible = \"linaro,optee-tz\";"
echo " method = \"smc\";"
echo " status = \"okay\";"
echo " }"
echo "To your dts file"
return -1;
fi
fi
if ! grep -Pzo "io-domains\s*{(\n|\w|-|;|=|<|>|\"|_|\s|,)*};" $dump_kernel_dtb_file 1>$tmp_grep_file 2>/dev/null; then
echo "Not Found io-domains in ${kernel_file_dtb_dts}.dts"
rm -f $tmp_grep_file
return 0
fi
grep -a supply $tmp_grep_file > $tmp_io_domain_file
rm -f $tmp_grep_file
awk '{print "phandle = " $3}' $tmp_io_domain_file > $tmp_phandle_file
while IFS= read -r item_phandle && IFS= read -u 3 -r item_domain
do
echo "${item_domain% *}" >> $tmp_regulator_microvolt_file
tmp_none_item=${item_domain% *}
cmds="grep -Pzo \"{(\\n|\w|-|;|=|<|>|\\\"|_|\s)*"$item_phandle\"
eval "$cmds $dump_kernel_dtb_file | strings | grep "regulator-m..-microvolt" >> $tmp_regulator_microvolt_file" || \
eval "sed -i \"/${tmp_none_item}/d\" $tmp_regulator_microvolt_file" && continue
echo >> $tmp_regulator_microvolt_file
done < $tmp_phandle_file 3<$tmp_io_domain_file
while read -r regulator_val
do
if echo ${regulator_val} | grep supply &>/dev/null; then
echo -e "\n\n\e[1;33m${regulator_val%*=}\e[0m" >> $tmp_final_target
else
tmp_none_item=${regulator_val##*<}
tmp_none_item=${tmp_none_item%%>*}
echo -e "${regulator_val%%<*} \e[1;31m$(( $tmp_none_item / 1000 ))mV\e[0m" >> $tmp_final_target
fi
done < $tmp_regulator_microvolt_file
echo -e "\e[41;1;30m PLEASE CHECK BOARD GPIO POWER DOMAIN CONFIGURATION !!!!!\e[0m"
echo -e "\e[41;1;30m <<< ESPECIALLY Wi-Fi/Flash/Ethernet IO power domain >>> !!!!!\e[0m"
echo -e "\e[41;1;30m Check Node [pmu_io_domains] in the file: ${kernel_file_dtb_dts}.dts \e[0m"
echo
echo -e "\e[41;1;30m 请再次确认板级的电源域配置!!!!!!\e[0m"
echo -e "\e[41;1;30m <<< 特别是Wi-FiFLASH以太网这几路IO电源的配置 >>> \e[0m"
echo -e "\e[41;1;30m 检查内核文件 ${kernel_file_dtb_dts}.dts 的节点 [pmu_io_domains] \e[0m"
cat $tmp_final_target
rm -f $tmp_phandle_file
rm -f $tmp_regulator_microvolt_file
rm -f $tmp_io_domain_file
rm -f $tmp_final_target
rm -f $dump_kernel_dtb_file
}
function build_check_cross_compile(){
case $RK_ARCH in
arm|armhf)
if [ -d "$TOP_DIR/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf" ]; then
CROSS_COMPILE=$(realpath $TOP_DIR)/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-
export CROSS_COMPILE=$CROSS_COMPILE
fi
;;
arm64|aarch64)
if [ -d "$TOP_DIR/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu" ]; then
CROSS_COMPILE=$(realpath $TOP_DIR)/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
export CROSS_COMPILE=$CROSS_COMPILE
fi
;;
*)
echo "the $RK_ARCH not supported for now, please check it again\n"
;;
esac
}
function build_check(){
local build_depend_cfg="build-depend-tools.txt"
common_product_build_tools="device/rockchip/common/$build_depend_cfg"
target_product_build_tools="device/rockchip/$RK_TARGET_PRODUCT/$build_depend_cfg"
cat $common_product_build_tools $target_product_build_tools 2>/dev/null | while read chk_item
do
chk_item=${chk_item###*}
if [ -z "$chk_item" ]; then
continue
fi
dst=${chk_item%%,*}
src=${chk_item##*,}
echo "**************************************"
if eval $dst &>/dev/null;then
echo "Check [OK]: $dst"
else
echo "Please install ${dst%% *} first"
echo " sudo apt-get install $src"
fi
done
}
function build_pkg() {
check_config RK_CFG_BUILDROOT || check_config RK_CFG_RAMBOOT || check_config RK_CFG_RECOVERY || check_config RK_CFG_PCBA || return 0
local target_pkg=$1
target_pkg=${target_pkg%*/}
if [ ! -d $target_pkg ];then
echo "build pkg: error: not found package $target_pkg"
return 1
fi
if ! eval [ $rk_package_mk_arrry ];then
rk_package_mk_arrry=( $(find buildroot/package/rockchip/ -name "*.mk" | sort) )
fi
local pkg_mk pkg_config_in pkg_br pkg_final_target pkg_final_target_upper pkg_cfg
for it in ${rk_package_mk_arrry[@]}
do
pkg_final_target=$(basename $it)
pkg_final_target=${pkg_final_target%%.mk*}
pkg_final_target_upper=${pkg_final_target^^}
pkg_final_target_upper=${pkg_final_target_upper//-/_}
if grep "${pkg_final_target_upper}_SITE.*$target_pkg" $it &>/dev/null; then
pkg_mk=$it
pkg_config_in=$(dirname $pkg_mk)/Config.in
pkg_br=BR2_PACKAGE_$pkg_final_target_upper
for cfg in RK_CFG_BUILDROOT RK_CFG_RAMBOOT RK_CFG_RECOVERY RK_CFG_PCBA
do
if eval [ \$$cfg ] ;then
pkg_cfg=$( eval "echo \$$cfg" )
if grep -wq ${pkg_br}=y buildroot/output/$pkg_cfg/.config; then
echo "Found $pkg_br in buildroot/output/$pkg_cfg/.config "
make -C buildroot/output/$pkg_cfg ${pkg_final_target}-dirclean O=buildroot/output/$pkg_cfg
make -C buildroot/output/$pkg_cfg ${pkg_final_target}-rebuild O=buildroot/output/$pkg_cfg
else
echo "[SKIP BUILD $target_pkg] NOT Found ${pkg_br}=y in buildroot/output/$pkg_cfg/.config"
fi
fi
done
fi
done
finish_build
}
function build_uefi(){
build_check_cross_compile
local kernel_file_dtb
if [ "$RK_ARCH" == "arm" ]; then
kernel_file_dtb="${TOP_DIR}/kernel/arch/arm/boot/dts/${RK_KERNEL_DTS}.dtb"
else
kernel_file_dtb="${TOP_DIR}/kernel/arch/arm64/boot/dts/rockchip/${RK_KERNEL_DTS}.dtb"
fi
echo "============Start building uefi============"
echo "Copy kernel dtb $kernel_file_dtb to uefi/edk2-platforms/Platform/Rockchip/DeviceTree/rk3588.dtb"
echo "========================================="
if [ ! -f $kernel_file_dtb ]; then
echo "Please compile the kernel before"
return -1
fi
cp $kernel_file_dtb uefi/edk2-platforms/Platform/Rockchip/DeviceTree/rk3588.dtb
cd uefi
./make.sh $RK_UBOOT_DEFCONFIG
cd -
finish_build
}
function build_uboot(){
check_config RK_UBOOT_DEFCONFIG || return 0
build_check_cross_compile
prebuild_uboot
prebuild_security_uboot $@
echo "============Start building uboot============"
echo "TARGET_UBOOT_CONFIG=$RK_UBOOT_DEFCONFIG"
echo "========================================="
cd u-boot
rm -f *_loader_*.bin
if [ "$RK_LOADER_UPDATE_SPL" = "true" ]; then
rm -f *spl.bin
fi
if [ -n "$RK_UBOOT_DEFCONFIG_FRAGMENT" ]; then
if [ -f "configs/${RK_UBOOT_DEFCONFIG}_defconfig" ]; then
make ${RK_UBOOT_DEFCONFIG}_defconfig $RK_UBOOT_DEFCONFIG_FRAGMENT
else
make ${RK_UBOOT_DEFCONFIG}.config $RK_UBOOT_DEFCONFIG_FRAGMENT
fi
./make.sh $UBOOT_COMPILE_COMMANDS
elif [ -d "$TOP_DIR/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf" ]; then
./make.sh $RK_UBOOT_DEFCONFIG \
$UBOOT_COMPILE_COMMANDS CROSS_COMPILE=$CROSS_COMPILE
elif [ -d "$TOP_DIR/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu" ]; then
./make.sh $RK_UBOOT_DEFCONFIG \
$UBOOT_COMPILE_COMMANDS CROSS_COMPILE=$CROSS_COMPILE
else
./make.sh $RK_UBOOT_DEFCONFIG \
$UBOOT_COMPILE_COMMANDS
fi
if [ "$RK_IDBLOCK_UPDATE_SPL" = "true" ]; then
./make.sh --idblock --spl
fi
if [ "$RK_RAMDISK_SECURITY_BOOTUP" = "true" ];then
ln -rsf $TOP_DIR/u-boot/boot.img $TOP_DIR/rockdev/
test -z "${RK_PACKAGE_FILE_AB}" && \
ln -rsf $TOP_DIR/u-boot/recovery.img $TOP_DIR/rockdev/ || true
fi
finish_build
}
# TODO: build_spl can be replaced by build_uboot with define RK_LOADER_UPDATE_SPL
function build_spl(){
check_config RK_SPL_DEFCONFIG || return 0
echo "============Start building spl============"
echo "TARGET_SPL_CONFIG=$RK_SPL_DEFCONFIG"
echo "========================================="
cd u-boot
rm -f *spl.bin
./make.sh $RK_SPL_DEFCONFIG
./make.sh --spl
finish_build
}
function build_loader(){
check_config RK_LOADER_BUILD_TARGET || return 0
echo "============Start building loader============"
echo "RK_LOADER_BUILD_TARGET=$RK_LOADER_BUILD_TARGET"
echo "=========================================="
cd loader
./build.sh $RK_LOADER_BUILD_TARGET
finish_build
}
function build_kernel(){
check_config RK_KERNEL_DTS RK_KERNEL_DEFCONFIG || return 0
echo "============Start building kernel============"
echo "TARGET_RK_JOBS =$RK_JOBS"
echo "TARGET_ARCH =$RK_ARCH"
echo "TARGET_KERNEL_CONFIG =$RK_KERNEL_DEFCONFIG"
echo "TARGET_KERNEL_DTS =$RK_KERNEL_DTS"
echo "TARGET_KERNEL_CONFIG_FRAGMENT =$RK_KERNEL_DEFCONFIG_FRAGMENT"
echo "=========================================="
build_check_cross_compile
cd kernel
make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG $RK_KERNEL_DEFCONFIG_FRAGMENT
make ARCH=$RK_ARCH $RK_KERNEL_DTS.img -j$RK_JOBS
# make ARCH=$RK_ARCH -j$RK_JOBS
if [ -f "$TOP_DIR/device/rockchip/$RK_TARGET_PRODUCT/$RK_KERNEL_FIT_ITS" ]; then
$COMMON_DIR/mk-fitimage.sh $TOP_DIR/kernel/$RK_BOOT_IMG \
$TOP_DIR/device/rockchip/$RK_TARGET_PRODUCT/$RK_KERNEL_FIT_ITS
fi
if [ -f "$TOP_DIR/kernel/$RK_BOOT_IMG" ]; then
mkdir -p $TOP_DIR/rockdev
ln -sf $TOP_DIR/kernel/$RK_BOOT_IMG $TOP_DIR/rockdev/boot.img
fi
if [ "$RK_RAMDISK_SECURITY_BOOTUP" = "true" ];then
cp $TOP_DIR/kernel/$RK_BOOT_IMG \
$TOP_DIR/u-boot/boot.img
fi
# build_check_power_domain
finish_build
}
function build_kerneldeb(){
check_config RK_KERNEL_DTS RK_KERNEL_DEFCONFIG || return 0
build_check_cross_compile
echo "============Start building kernel deb============"
echo "TARGET_ARCH =$RK_ARCH"
echo "TARGET_KERNEL_CONFIG =$RK_KERNEL_DEFCONFIG"
echo "TARGET_KERNEL_DTS =$RK_KERNEL_DTS"
echo "TARGET_KERNEL_CONFIG_FRAGMENT =$RK_KERNEL_DEFCONFIG_FRAGMENT"
echo "=========================================="
pwd
rm -f linux-*.buildinfo linux-*.changes
rm -f linux-headers-*.deb linux-image-*.deb linux-libc-dev*.deb
cd kernel
make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG $RK_KERNEL_DEFCONFIG_FRAGMENT
make ARCH=$RK_ARCH bindeb-pkg RK_KERNEL_DTS=$RK_KERNEL_DTS -j$RK_JOBS
finish_build
}
function build_extboot(){
check_config RK_KERNEL_DTS RK_KERNEL_DEFCONFIG || return 0
echo "============Start building kernel============"
echo "TARGET_ARCH =$RK_ARCH"
echo "TARGET_KERNEL_CONFIG =$RK_KERNEL_DEFCONFIG"
echo "TARGET_KERNEL_DTS =$RK_KERNEL_DTS"
echo "TARGET_KERNEL_CONFIG_FRAGMENT =$RK_KERNEL_DEFCONFIG_FRAGMENT"
echo "=========================================="
pwd
build_check_cross_compile
cd kernel
make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG $RK_KERNEL_DEFCONFIG_FRAGMENT
make ARCH=$RK_ARCH $RK_KERNEL_DTS.img -j$RK_JOBS
make ARCH=$RK_ARCH dtbs -j$RK_JOBS
echo -e "\e[36m Generate extLinuxBoot image start\e[0m"
KERNEL_VERSION=$(cat $TOP_DIR/kernel/include/config/kernel.release)
EXTBOOT_IMG=${TOP_DIR}/kernel/extboot.img
EXTBOOT_DIR=${TOP_DIR}/kernel/extboot
EXTBOOT_DTB=${EXTBOOT_DIR}/dtb/
rm -rf $EXTBOOT_DIR
mkdir -p $EXTBOOT_DTB/overlay
mkdir -p $EXTBOOT_DIR/uEnv
mkdir -p $EXTBOOT_DIR/kerneldeb
cp ${TOP_DIR}/$RK_KERNEL_IMG $EXTBOOT_DIR/Image-$KERNEL_VERSION
mkdir -p $EXTBOOT_DIR/extlinux
echo -e "label kernel-$KERNEL_VERSION" >> $EXTBOOT_DIR/extlinux/extlinux.conf
echo -e "\tkernel /Image-$KERNEL_VERSION" >> $EXTBOOT_DIR/extlinux/extlinux.conf
echo -e "\tdevicetreedir /" >> $EXTBOOT_DIR/extlinux/extlinux.conf
echo -e "\tappend root=/dev/mmcblk0p3 earlyprintk console=ttyFIQ0 console=tty1 consoleblank=0 loglevel=7 rootwait rw rootfstype=ext4 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1 switolb=1 coherent_pool=1m" >> $EXTBOOT_DIR/extlinux/extlinux.conf
if [ "$RK_ARCH" == "arm64" ];then
cp ${TOP_DIR}/kernel/arch/${RK_ARCH}/boot/dts/rockchip/*.dtb $EXTBOOT_DTB
cp ${TOP_DIR}/kernel/arch/${RK_ARCH}/boot/dts/rockchip/overlay/*.dtbo $EXTBOOT_DTB/overlay
cp ${TOP_DIR}/kernel/arch/${RK_ARCH}/boot/dts/rockchip/uEnv/uEnv*.txt $EXTBOOT_DIR/uEnv
else
cp ${TOP_DIR}/kernel/arch/${RK_ARCH}/boot/dts/*.dtb $EXTBOOT_DTB
cp ${TOP_DIR}/kernel/arch/${RK_ARCH}/boot/dts/overlay/*.dtbo $EXTBOOT_DTB/overlay
fi
cp -f $EXTBOOT_DTB/${RK_KERNEL_DTS}.dtb $EXTBOOT_DIR/rk-kernel.dtb
if [[ -e ${TOP_DIR}/kernel/ramdisk.img ]]; then
cp ${TOP_DIR}/kernel/ramdisk.img $EXTBOOT_DIR/initrd-$KERNEL_VERSION
echo -e "\tinitrd /initrd-$KERNEL_VERSION" >> $EXTBOOT_DIR/extlinux/extlinux.conf
fi
cp ${TOP_DIR}/kernel/.config $EXTBOOT_DIR/config-$KERNEL_VERSION
cp ${TOP_DIR}/kernel/System.map $EXTBOOT_DIR/System.map-$KERNEL_VERSION
cp ${TOP_DIR}/kernel/logo_kernel.bmp $EXTBOOT_DIR/
cp ${TOP_DIR}/kernel/logo_boot.bmp $EXTBOOT_DIR/logo.bmp
cp ${TOP_DIR}/linux-headers-"$KERNEL_VERSION"_"$KERNEL_VERSION"-*.deb $EXTBOOT_DIR/kerneldeb
cp ${TOP_DIR}/linux-image-"$KERNEL_VERSION"_"$KERNEL_VERSION"-*.deb $EXTBOOT_DIR/kerneldeb
# make ARCH=$RK_ARCH INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$EXTBOOT_DIR modules_install
# rm $EXTBOOT_DIR/lib/modules/$KERNEL_VERSION/build
# rm $EXTBOOT_DIR/lib/modules/$KERNEL_VERSION/source
rm -rf $EXTBOOT_IMG && truncate -s 128M $EXTBOOT_IMG
fakeroot mkfs.ext2 -F -L "boot" -d $EXTBOOT_DIR $EXTBOOT_IMG
# fakeroot mkfs.fat -F 16 -n "boot" $EXTBOOT_IMG
# mkdir -p $EXTBOOT_DIR.tmp
# sudo mount $EXTBOOT_IMG $EXTBOOT_DIR.tmp
# sudo cp -rf $EXTBOOT_DIR/* $EXTBOOT_DIR.tmp
# sudo umount $EXTBOOT_DIR.tmp
# sudo rm -rf $EXTBOOT_DIR.tmp
finish_build
}
function build_modules(){
check_config RK_KERNEL_DEFCONFIG || return 0
echo "============Start building kernel modules============"
echo "TARGET_RK_JOBS =$RK_JOBS"
echo "TARGET_ARCH =$RK_ARCH"
echo "TARGET_KERNEL_CONFIG =$RK_KERNEL_DEFCONFIG"
echo "TARGET_KERNEL_CONFIG_FRAGMENT =$RK_KERNEL_DEFCONFIG_FRAGMENT"
echo "=================================================="
build_check_cross_compile
cd kernel
make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG $RK_KERNEL_DEFCONFIG_FRAGMENT
make ARCH=$RK_ARCH modules -j$RK_JOBS
finish_build
}
function build_toolchain(){
check_config RK_CFG_TOOLCHAIN || return 0
echo "==========Start building toolchain =========="
echo "TARGET_TOOLCHAIN_CONFIG=$RK_CFG_TOOLCHAIN"
echo "========================================="
/usr/bin/time -f "you take %E to build toolchain" \
$COMMON_DIR/mk-toolchain.sh $BOARD_CONFIG
finish_build
}
function build_buildroot(){
check_config RK_CFG_BUILDROOT || return 0
echo "==========Start building buildroot=========="
echo "TARGET_BUILDROOT_CONFIG=$RK_CFG_BUILDROOT"
echo "========================================="
/usr/bin/time -f "you take %E to build builroot" \
$COMMON_DIR/mk-buildroot.sh $BOARD_CONFIG
finish_build
}
function build_ramboot(){
check_config RK_CFG_RAMBOOT || return 0
echo "=========Start building ramboot========="
echo "TARGET_RAMBOOT_CONFIG=$RK_CFG_RAMBOOT"
echo "====================================="
/usr/bin/time -f "you take %E to build ramboot" \
$COMMON_DIR/mk-ramdisk.sh ramboot.img $RK_CFG_RAMBOOT
ln -rsf buildroot/output/$RK_CFG_RAMBOOT/images/ramboot.img \
rockdev/boot.img
cp buildroot/output/$RK_CFG_RAMBOOT/images/ramboot.img \
u-boot/boot.img
finish_build
}
function build_multi-npu_boot(){
check_config RK_MULTINPU_BOOT || return 0
echo "=========Start building multi-npu boot========="
echo "TARGET_RAMBOOT_CONFIG=$RK_CFG_RAMBOOT"
echo "====================================="
/usr/bin/time -f "you take %E to build multi-npu boot" \
$COMMON_DIR/mk-multi-npu_boot.sh
finish_build
}
function kernel_version(){
VERSION_KEYS="VERSION PATCHLEVEL"
VERSION=""
for k in $VERSION_KEYS; do
v=$(grep "^$k = " $1/Makefile | cut -d' ' -f3)
VERSION=${VERSION:+${VERSION}.}$v
done
echo $VERSION
}
function build_yocto(){
check_config RK_YOCTO_MACHINE || return 0
echo "=========Start building ramboot========="
echo "TARGET_MACHINE=$RK_YOCTO_MACHINE"
echo "====================================="
KERNEL_VERSION=$(kernel_version kernel/)
cd yocto
ln -sf $RK_YOCTO_MACHINE.conf build/conf/local.conf
source oe-init-build-env
LANG=en_US.UTF-8 LANGUAGE=en_US.en LC_ALL=en_US.UTF-8 \
bitbake core-image-minimal -r conf/include/rksdk.conf \
-r conf/include/kernel-$KERNEL_VERSION.conf
finish_build
}
function build_ubuntu(){
ARCH=${RK_UBUNTU_ARCH:-${RK_ARCH}}
case $ARCH in
arm|armhf) ARCH=armhf ;;
*) ARCH=arm64 ;;
esac
echo "=========Start building ubuntu for $ARCH========="
echo "==RK_ROOTFS_DEBUG:$RK_ROOTFS_DEBUG RK_ROOTFS_TARGET:$RK_ROOTFS_TARGET=="
cd ubuntu
if [ ! -e ubuntu-$RK_ROOTFS_TARGET-rootfs.img ]; then
echo "[ No ubuntu-$RK_ROOTFS_TARGET-rootfs.img, Run Make Ubuntu Scripts ]"
if [ ! -e ubuntu-base-$RK_ROOTFS_TARGET-$ARCH-*.tar.gz ]; then
ARCH=arm64 TARGET=$RK_ROOTFS_TARGET ./mk-base-$RK_ROOTFS_TARGET-ubuntu.sh
fi
VERSION=$RK_ROOTFS_DEBUG TARGET=$RK_ROOTFS_TARGET ARCH=$ARCH SOC=$RK_SOC ./mk-$RK_ROOTFS_TARGET-rootfs.sh
else
echo "[ Already Exists IMG, Skip Make Ubuntu Scripts ]"
echo "[ Delate Ubuntu-$RK_ROOTFS_TARGET-rootfs.img To Rebuild Ubuntu IMG ]"
fi
finish_build
}
function build_debian(){
ARCH=${RK_DEBIAN_ARCH:-${RK_ARCH}}
case $ARCH in
arm|armhf) ARCH=armhf ;;
*) ARCH=arm64 ;;
esac
echo "=========Start building debian for $ARCH========="
echo "RK_DEBIAN_VERSION: $RK_DEBIAN_VERSION"
echo "RK_ROOTFS_TARGET: $RK_ROOTFS_TARGET"
echo "RK_ROOTFS_DEBUG: $RK_ROOTFS_DEBUG"
echo " "
cd debian
if [[ "$RK_DEBIAN_VERSION" == "stretch" || "$RK_DEBIAN_VERSION" == "9" ]]; then
RELEASE='stretch'
elif [[ "$RK_DEBIAN_VERSION" == "buster" || "$RK_DEBIAN_VERSION" == "10" ]]; then
RELEASE='buster'
elif [[ "$RK_DEBIAN_VERSION" == "bullseye" || "$RK_DEBIAN_VERSION" == "11" ]]; then
RELEASE='bullseye'
else
echo -e "\033[36m please input the os type,stretch or buster...... \033[0m"
fi
if [ ! -e linaro-$RK_ROOTFS_TARGET-rootfs.img ]; then
echo "[ No linaro-$RK_ROOTFS_TARGET-rootfs.img, Run Make Debian Scripts ]"
if [ ! -e linaro-$RELEASE-$RK_ROOTFS_TARGET-alip-*.tar.gz ]; then
echo "[ build linaro-$RELEASE-$RK_ROOTFS_TARGET-alip-*.tar.gz ]"
RELEASE=$RELEASE TARGET=$RK_ROOTFS_TARGET ARCH=$ARCH ./mk-base-debian.sh
fi
RELEASE=$RELEASE TARGET=$RK_ROOTFS_TARGET VERSION=$RK_ROOTFS_DEBUG SOC=$RK_SOC ARCH=$ARCH ./mk-rootfs.sh
else
echo "[ Already Exists IMG, Skip Make Debian Scripts ]"
echo "[ Delate linaro-$RK_ROOTFS_TARGET-rootfs.img To Rebuild Debian IMG ]"
fi
finish_build
}
function build_rootfs(){
check_config RK_ROOTFS_IMG || return 0
RK_ROOTFS_DIR=.rootfs
ROOTFS_IMG=${RK_ROOTFS_IMG##*/}
rm -rf $RK_ROOTFS_IMG $RK_ROOTFS_DIR
mkdir -p ${RK_ROOTFS_IMG%/*} $RK_ROOTFS_DIR
case "$1" in
yocto)
build_yocto
ln -rsf yocto/build/latest/rootfs.img \
$RK_ROOTFS_DIR/rootfs.ext4
;;
ubuntu)
build_ubuntu
ln -rsf ubuntu/ubuntu-$RK_ROOTFS_TARGET-rootfs.img \
$RK_ROOTFS_DIR/rootfs.ext4
;;
debian)
build_debian
ln -rsf debian/linaro-$RK_ROOTFS_TARGET-rootfs.img \
$RK_ROOTFS_DIR/rootfs.ext4
;;
*)
build_buildroot
for f in $(ls buildroot/output/$RK_CFG_BUILDROOT/images/rootfs.*);do
ln -rsf $f $RK_ROOTFS_DIR/
done
;;
esac
if [ ! -f "$RK_ROOTFS_DIR/$ROOTFS_IMG" ]; then
echo "There's no $ROOTFS_IMG generated..."
exit 1
fi
ln -rsf $RK_ROOTFS_DIR/$ROOTFS_IMG $RK_ROOTFS_IMG
finish_build
}
function build_recovery(){
if [ "$RK_UPDATE_SDCARD_ENABLE_FOR_AB" = "true" ] ;then
RK_CFG_RECOVERY=$RK_UPDATE_SDCARD_CFG_RECOVERY
fi
if [ ! -z "$RK_PACKAGE_FILE_AB" ]; then
return 0
fi
check_config RK_CFG_RECOVERY || return 0
echo "==========Start building recovery=========="
echo "TARGET_RECOVERY_CONFIG=$RK_CFG_RECOVERY"
echo "========================================"
/usr/bin/time -f "you take %E to build recovery" \
$COMMON_DIR/mk-ramdisk.sh recovery.img $RK_CFG_RECOVERY
ln -rsf buildroot/output/$RK_CFG_RECOVERY/images/recovery.img \
rockdev/recovery.img
cp buildroot/output/$RK_CFG_RECOVERY/images/recovery.img \
u-boot/recovery.img
finish_build
}
function build_pcba(){
check_config RK_CFG_PCBA || return 0
echo "==========Start building pcba=========="
echo "TARGET_PCBA_CONFIG=$RK_CFG_PCBA"
echo "===================================="
/usr/bin/time -f "you take %E to build pcba" \
$COMMON_DIR/mk-ramdisk.sh pcba.img $RK_CFG_PCBA
finish_build
}
BOOT_FIXED_CONFIGS="
CONFIG_BLK_DEV_DM
CONFIG_DM_CRYPT
CONFIG_BLK_DEV_CRYPTOLOOP
CONFIG_DM_VERITY"
BOOT_OPTEE_FIXED_CONFIGS="
CONFIG_TEE
CONFIG_OPTEE"
UBOOT_FIXED_CONFIGS="
CONFIG_FIT_SIGNATURE
CONFIG_SPL_FIT_SIGNATURE"
UBOOT_AB_FIXED_CONFIGS="
CONFIG_ANDROID_AB"
ROOTFS_UPDATE_ENGINEBIN_CONFIGS="
BR2_PACKAGE_RECOVERY
BR2_PACKAGE_RECOVERY_UPDATEENGINEBIN"
ROOTFS_AB_FIXED_CONFIGS="
$ROOTFS_UPDATE_ENGINEBIN_CONFIGS
BR2_PACKAGE_RECOVERY_BOOTCONTROL"
function defconfig_check() {
# 1. defconfig 2. fixed config
echo debug-$1
for i in $2
do
echo "look for $i"
result=$(cat $1 | grep "${i}=y" -w || echo "No found")
if [ "$result" = "No found" ]; then
echo -e "\e[41;1;37mSecurity: No found config ${i} in $1 \e[0m"
echo "make sure your config include this list"
echo "---------------------------------------"
echo "$2"
echo "---------------------------------------"
return -1;
fi
done
return 0
}
function find_string_in_config(){
result=$(cat "$2" | grep "$1" || echo "No found")
if [ "$result" = "No found" ]; then
echo "Security: No found string $1 in $2"
return -1;
fi
return 0;
}
function check_security_condition(){
# check security enabled
test -z "$RK_SYSTEM_CHECK_METHOD" && return 0
if [ ! -d u-boot/keys ]; then
echo "ERROR: No root keys(u-boot/keys) found in u-boot"
echo " Create it by ./build.sh createkeys or move your key to it"
return -1
fi
if [ "$RK_SYSTEM_CHECK_METHOD" = "DM-E" ]; then
if [ ! -e u-boot/keys/root_passwd ]; then
echo "ERROR: No root passwd(u-boot/keys/root_passwd) found in u-boot"
echo " echo your root key for sudo to u-boot/keys/root_passwd"
echo " some operations need supper user permission when create encrypt image"
return -1
fi
if [ ! -e u-boot/keys/system_enc_key ]; then
echo "ERROR: No enc key(u-boot/keys/system_enc_key) found in u-boot"
echo " Create it by ./build.sh createkeys or move your key to it"
return -1
fi
BOOT_FIXED_CONFIGS="${BOOT_FIXED_CONFIGS}
${BOOT_OPTEE_FIXED_CONFIGS}"
fi
echo "check kernel defconfig"
defconfig_check kernel/arch/$RK_ARCH/configs/$RK_KERNEL_DEFCONFIG "$BOOT_FIXED_CONFIGS"
if [ ! -z "${RK_PACKAGE_FILE_AB}" ]; then
UBOOT_FIXED_CONFIGS="${UBOOT_FIXED_CONFIGS}
${UBOOT_AB_FIXED_CONFIGS}"
defconfig_check buildroot/configs/${RK_CFG_BUILDROOT}_defconfig "$ROOTFS_AB_FIXED_CONFIGS"
fi
echo "check uboot defconfig"
defconfig_check u-boot/configs/${RK_UBOOT_DEFCONFIG}_defconfig "$UBOOT_FIXED_CONFIGS"
if [ "$RK_SYSTEM_CHECK_METHOD" = "DM-E" ]; then
echo "check ramdisk defconfig"
defconfig_check buildroot/configs/${RK_CFG_RAMBOOT}_defconfig "$ROOTFS_UPDATE_ENGINEBIN_CONFIGS"
fi
echo "check rootfs defconfig"
find_string_in_config "BR2_ROOTFS_OVERLAY=\".*board/rockchip/common/security-system-overlay.*" "buildroot/configs/${RK_CFG_BUILDROOT}_defconfig"
echo "Security: finish check"
}
function build_all(){
echo "============================================"
echo "TARGET_ARCH=$RK_ARCH"
echo "TARGET_PLATFORM=$RK_TARGET_PRODUCT"
echo "TARGET_UBOOT_CONFIG=$RK_UBOOT_DEFCONFIG"
echo "TARGET_SPL_CONFIG=$RK_SPL_DEFCONFIG"
echo "TARGET_KERNEL_CONFIG=$RK_KERNEL_DEFCONFIG"
echo "TARGET_KERNEL_DTS=$RK_KERNEL_DTS"
echo "TARGET_TOOLCHAIN_CONFIG=$RK_CFG_TOOLCHAIN"
echo "TARGET_BUILDROOT_CONFIG=$RK_CFG_BUILDROOT"
echo "TARGET_RECOVERY_CONFIG=$RK_CFG_RECOVERY"
echo "TARGET_PCBA_CONFIG=$RK_CFG_PCBA"
echo "TARGET_RAMBOOT_CONFIG=$RK_CFG_RAMBOOT"
echo "============================================"
# NOTE: On secure boot-up world, if the images build with fit(flattened image tree)
# we will build kernel and ramboot firstly,
# and then copy images into u-boot to sign the images.
if [ "$RK_RAMDISK_SECURITY_BOOTUP" != "true" ];then
#note: if build spl, it will delete loader.bin in uboot directory,
# so can not build uboot and spl at the same time.
if [ -z $RK_SPL_DEFCONFIG ]; then
build_uboot
else
build_spl
fi
fi
check_security_condition
build_loader
if [ "$RK_EXTBOOT" = "true" ]; then
build_kerneldeb
build_extboot
else
build_kernel
fi
build_toolchain
build_rootfs ${RK_ROOTFS_SYSTEM:-buildroot}
build_recovery
build_ramboot
if [ "$RK_RAMDISK_SECURITY_BOOTUP" = "true" ];then
#note: if build spl, it will delete loader.bin in uboot directory,
# so can not build uboot and spl at the same time.
if [ -z $RK_SPL_DEFCONFIG ]; then
build_uboot
else
build_spl
fi
fi
finish_build
}
function build_cleanall(){
echo "clean uboot, kernel, rootfs, recovery"
cd u-boot
make distclean
cd -
cd kernel
make distclean
cd -
rm -rf buildroot/output
rm -rf yocto/build/tmp
rm -rf debian/binary
rm -rf ubuntu/binary
finish_build
}
function build_firmware(){
./mkfirmware.sh $BOARD_CONFIG
finish_build
}
function build_updateimg(){
IMAGE_PATH=$TOP_DIR/rockdev
PACK_TOOL_DIR=$TOP_DIR/tools/linux/Linux_Pack_Firmware
cd $PACK_TOOL_DIR/rockdev
if [ -f "$RK_PACKAGE_FILE_AB" ]; then
build_sdcard_package
build_otapackage
cd $PACK_TOOL_DIR/rockdev
echo "Make Linux a/b update_ab.img."
source_package_file_name=`ls -lh package-file | awk -F ' ' '{print $NF}'`
ln -fs "$RK_PACKAGE_FILE_AB" package-file
./mkupdate.sh
mv update.img $IMAGE_PATH/update_ab.img
ln -fs $source_package_file_name package-file
else
echo "Make update.img"
if [ -f "$RK_PACKAGE_FILE" ]; then
source_package_file_name=`ls -lh package-file | awk -F ' ' '{print $NF}'`
ln -fs "$RK_PACKAGE_FILE" package-file
./mkupdate.sh
ln -fs $source_package_file_name package-file
else
./mkupdate.sh
fi
mv update.img $IMAGE_PATH
fi
finish_build
}
function build_otapackage(){
IMAGE_PATH=$TOP_DIR/rockdev
PACK_TOOL_DIR=$TOP_DIR/tools/linux/Linux_Pack_Firmware
echo "Make ota ab update_ota.img"
cd $PACK_TOOL_DIR/rockdev
if [ -f "$RK_PACKAGE_FILE_OTA" ]; then
source_package_file_name=`ls -lh $PACK_TOOL_DIR/rockdev/package-file | awk -F ' ' '{print $NF}'`
ln -fs "$RK_PACKAGE_FILE_OTA" package-file
./mkupdate.sh
mv update.img $IMAGE_PATH/update_ota.img
ln -fs $source_package_file_name package-file
fi
finish_build
}
function build_sdcard_package(){
check_config RK_UPDATE_SDCARD_ENABLE_FOR_AB || return 0
local image_path=$TOP_DIR/rockdev
local pack_tool_dir=$TOP_DIR/tools/linux/Linux_Pack_Firmware
local rk_sdupdate_ab_misc=${RK_SDUPDATE_AB_MISC:=sdupdate-ab-misc.img}
local rk_parameter_sdupdate=${RK_PARAMETER_SDUPDATE:=parameter-sdupdate.txt}
local rk_package_file_sdcard_update=${RK_PACKAGE_FILE_SDCARD_UPDATE:=sdcard-update-package-file}
local sdupdate_ab_misc_img=$TOP_DIR/device/rockchip/rockimg/$rk_sdupdate_ab_misc
local parameter_sdupdate=$TOP_DIR/device/rockchip/rockimg/$rk_parameter_sdupdate
local recovery_img=$TOP_DIR/buildroot/output/$RK_UPDATE_SDCARD_CFG_RECOVERY/images/recovery.img
if [ $RK_UPDATE_SDCARD_CFG_RECOVERY ]; then
if [ -f $recovery_img ]; then
echo -n "create recovery.img..."
ln -rsf $recovery_img $image_path/recovery.img
else
echo "error: $recovery_img not found!"
return 1
fi
fi
echo "Make sdcard update update_sdcard.img"
cd $pack_tool_dir/rockdev
if [ -f "$rk_package_file_sdcard_update" ]; then
if [ $rk_parameter_sdupdate ]; then
if [ -f $parameter_sdupdate ]; then
echo -n "create sdcard update image parameter..."
ln -rsf $parameter_sdupdate $image_path/
fi
fi
if [ $rk_sdupdate_ab_misc ]; then
if [ -f $sdupdate_ab_misc_img ]; then
echo -n "create sdupdate ab misc.img..."
ln -rsf $sdupdate_ab_misc_img $image_path/
fi
fi
source_package_file_name=`ls -lh $pack_tool_dir/rockdev/package-file | awk -F ' ' '{print $NF}'`
ln -fs "$rk_package_file_sdcard_update" package-file
./mkupdate.sh
mv update.img $image_path/update_sdcard.img
ln -fs $source_package_file_name package-file
rm -f $image_path/$rk_sdupdate_ab_misc $image_path/$rk_parameter_sdupdate $image_path/recovery.img
fi
finish_build
}
function build_save(){
IMAGE_PATH=$TOP_DIR/rockdev
DATE=$(date +%Y%m%d)
TARGET=$(echo $RK_ROOTFS_TARGET | sed -e "s/\b\(.\)/\u\1/g")
if [ "${RK_ROOTFS_SYSTEM}" != "buildroot" ];then
if [ "${RK_ROOTFS_SYSTEM}" != "debian" ];then
Version="ubuntu"$RK_UBUNTU_VERSION"-"$RK_ROOTFS_TARGET"-"$DATE
else
Version="debian"$RK_DEBIAN_VERSION"-"$RK_ROOTFS_TARGET"-"$DATE
fi
else
Version="$RK_ROOTFS_SYSTEM"-"$DATE"
fi
Device_Name=$RK_KERNEL_DTS
# Device_Name="$(echo $RK_KERNEL_DTS | tr '[:lower:]' '[:upper:]')"
ZIP_NAME=$Device_Name"-"$Version
STUB_PATH=IMAGE/$ZIP_NAME
export STUB_PATH=$TOP_DIR/$STUB_PATH
export STUB_PATCH_PATH=$STUB_PATH/PATCHES
mkdir -p $STUB_PATH
#Generate patches
.repo/repo/repo forall -c \
"$TOP_DIR/device/rockchip/common/gen_patches_body.sh"
#Copy stubs
.repo/repo/repo manifest -r -o $STUB_PATH/manifest_${DATE}.xml
mkdir -p $STUB_PATCH_PATH/kernel
cp kernel/.config $STUB_PATCH_PATH/kernel
cp kernel/vmlinux $STUB_PATCH_PATH/kernel
mkdir -p $STUB_PATH/IMAGES/
cp $IMAGE_PATH/* $STUB_PATH/IMAGES/
cd $STUB_PATH/IMAGES/
mv update.img ${ZIP_NAME}_update.img
md5sum ${ZIP_NAME}_update.img > md5sum.txt
# zip -o ../${ZIP_NAME}_update.zip ${ZIP_NAME}_update.img
7z a ../${ZIP_NAME}_update.7z ${ZIP_NAME}_update.img md5sum.txt
cd -
#Save build command info
echo "UBOOT: defconfig: $RK_UBOOT_DEFCONFIG" >> $STUB_PATH/build_cmd_info
echo "KERNEL: defconfig: $RK_KERNEL_DEFCONFIG, dts: $RK_KERNEL_DTS" >> $STUB_PATH/build_cmd_info
echo "BUILDROOT: $RK_CFG_BUILDROOT" >> $STUB_PATH/build_cmd_info
finish_build
}
function build_allsave(){
rm -fr $TOP_DIR/rockdev
build_all
build_firmware
build_updateimg
# build_save
# build_check_power_domain
finish_build
}
function create_keys() {
test -d u-boot/keys && echo "ERROR: u-boot/keys has existed" && return -1
mkdir u-boot/keys -p
cd u-boot/keys
$TOP_DIR/rkbin/tools/rk_sign_tool kk --bits 2048
cd -
ln -s private_key.pem u-boot/keys/dev.key
ln -s public_key.pem u-boot/keys/dev.pubkey
openssl req -batch -new -x509 -key u-boot/keys/dev.key -out u-boot/keys/dev.crt
openssl rand -out u-boot/keys/system_enc_key -hex 32
}
function security_is_enabled()
{
if [ "$RK_RAMDISK_SECURITY_BOOTUP" != "true" ]; then
echo "No security paramter found in .BoardConfig.mk"
exit -1
fi
}
#=========================
# build targets
#=========================
if echo $@|grep -wqE "help|-h"; then
if [ -n "$2" -a "$(type -t usage$2)" == function ]; then
echo "###Current SDK Default [ $2 ] Build Command###"
eval usage$2
else
usage
fi
exit 0
fi
OPTIONS="${@:-allsave}"
[ -f "device/rockchip/$RK_TARGET_PRODUCT/$RK_BOARD_PRE_BUILD_SCRIPT" ] \
&& source "device/rockchip/$RK_TARGET_PRODUCT/$RK_BOARD_PRE_BUILD_SCRIPT" # board hooks
for option in ${OPTIONS}; do
echo "processing option: $option"
case $option in
BoardConfig*.mk)
option=device/rockchip/$RK_TARGET_PRODUCT/$option
;&
*.mk)
CONF=$(realpath $option)
echo "switching to board: $CONF"
if [ ! -f $CONF ]; then
echo "not exist!"
exit 1
fi
ln -rsf $CONF $BOARD_CONFIG
;;
lunch) build_select_board ;;
all) build_all ;;
save) build_save ;;
allsave) build_allsave ;;
check) build_check ;;
cleanall) build_cleanall ;;
firmware) build_firmware ;;
updateimg) build_updateimg ;;
otapackage) build_otapackage ;;
sdpackage) build_sdcard_package ;;
toolchain) build_toolchain ;;
spl) build_spl ;;
uboot) build_uboot ;;
uefi) build_uefi ;;
loader) build_loader ;;
kernel) build_kernel ;;
kerneldeb) build_kerneldeb ;;
extboot) build_extboot ;;
modules) build_modules ;;
rootfs|buildroot|ubuntu|debian|distro|yocto) build_rootfs $option ;;
pcba) build_pcba ;;
ramboot) build_ramboot ;;
recovery) build_recovery ;;
multi-npu_boot) build_multi-npu_boot ;;
info) build_info ;;
app/*|external/*) build_pkg $option ;;
createkeys) create_keys ;;
security_boot) security_is_enabled; build_ramboot; build_uboot boot ;;
security_uboot) security_is_enabled; build_uboot uboot ;;
security_recovery) security_is_enabled; build_recovery; build_uboot recovery ;;
security_check) check_security_condition ;;
security_rootfs)
security_is_enabled
build_rootfs
build_ramboot
build_uboot
echo "please update rootfs.img / boot.img"
;;
*) usage ;;
esac
done