#!/bin/bash # # Description : rockchip linux Build Script for x30. # Authors : owen # Version : 1.1 # Notes : None # # # Some Directories # BS_DIR_TOP=$(cd `dirname $0` ; pwd) BS_DIR_TOOLS=${BS_DIR_TOP}/tools BS_DIR_OUTPUT=${BS_DIR_TOP}/output BS_DIR_UBOOT=${BS_DIR_TOP}/u-boot BS_DIR_KERNEL=${BS_DIR_TOP}/kernel BS_DIR_BUILDROOT=${BS_DIR_TOP}/buildroot # # CROSS_COMPILE # BS_DIR_TOOLCHAIN_ARM32=${BS_DIR_TOP}/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf- BS_DIR_TOOLCHAIN_ARM64=${BS_DIR_TOP}/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- # # Target Config # BS_CONFIG_BOOTLOADER_UBOOT=fustone_px30_defconfig BS_CONFIG_KERNEL=fustone_px30_linux_defconfig #BS_CONFIG_KERNEL_DTB=F1BNC002B-gateway.img BS_CONFIG_KERNEL_DTB=px30-evb-ddr4-v10-linux-aisuo.img BS_CONFIT_ROOTFS=rockchip_px30_64 BS_CONFIT_RECOVERY=rockchip_px30_recovery setup_environment() { LANG=C cd ${BS_DIR_TOP}; mkdir -p ${BS_DIR_OUTPUT} || return 1 [ -f "${BS_DIR_OUTPUT}/upgrade_tool" ] || { cp -a ${BS_DIR_TOOLS}/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool ${BS_DIR_OUTPUT};} [ -f "${BS_DIR_OUTPUT}/config.ini" ] || { cp -a ${BS_DIR_TOOLS}/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/config.ini ${BS_DIR_OUTPUT};} } build_bootloader_uboot() { if [ -f ${BS_DIR_UBOOT}/*_loader_*.bin ]; then rm ${BS_DIR_UBOOT}/*_loader_*.bin fi # Compiler uboot cd ${BS_DIR_UBOOT} || return 1 #make distclean || return 1 make ${BS_CONFIG_BOOTLOADER_UBOOT} CROSS_COMPILE=${BS_DIR_TOOLCHAIN_ARM64}|| return 1 make -j${threads} CROSS_COMPILE=${BS_DIR_TOOLCHAIN_ARM64}|| return 1 #pack uboot.img echo "--------pack uboot.img--------" UBOOT_LOAD_ADDR=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" ${BS_DIR_UBOOT}/include/autoconf.mk|tr -d '\r'` ${BS_DIR_TOP}/rkbin/tools/loaderimage --pack --uboot ${BS_DIR_UBOOT}/u-boot.bin uboot.img ${UBOOT_LOAD_ADDR} || return 1 # Delete u-boot.img and u-boot-dtb.img, which makes users not be confused with final uboot.img if [ -f ${BS_DIR_UBOOT}/u-boot.img ]; then rm ${BS_DIR_UBOOT}/u-boot.img fi if [ -f ${BS_DIR_UBOOT}/u-boot-dtb.img ]; then rm ${BS_DIR_UBOOT}/u-boot-dtb.img fi echo "pack uboot okay! Input: ${BS_DIR_UBOOT}/u-boot.bin" #pack *_loader_*.bin echo "--------pack loader--------" cd ${BS_DIR_TOP}/rkbin ${BS_DIR_TOP}/rkbin/tools/boot_merger ${BS_DIR_TOP}/rkbin/RKBOOT/PX30MINIALL.ini || return 1 mv ${BS_DIR_TOP}/rkbin/*_loader_*.bin ${BS_DIR_UBOOT}/ || return 1 cd - echo "pack loader okay! Input: ${BS_DIR_TOP}/rkbin/RKBOOT/PX30MINIALL.ini" #pack trust.img echo "--------pack trust.img--------" cd ${BS_DIR_TOP}/rkbin # ARM64 uses trust_merger if grep -Eq ''^CONFIG_ARM64=y'|'^CONFIG_ARM64_BOOT_AARCH32=y'' ${BS_DIR_UBOOT}/.config ; then ${BS_DIR_TOP}/rkbin/tools/trust_merger --rsa 3 --replace tools/rk_tools/ ./ ${BS_DIR_TOP}/rkbin/RKTRUST/PX30TRUST.ini || return 1 cd - mv ${BS_DIR_TOP}/rkbin/trust.img ${BS_DIR_UBOOT} || return 1 echo "pack trust okay! Input: ${BS_DIR_TOP}/rkbin/RKTRUST/PX30TRUST.ini" # ARM uses loaderimage else local TOS TOS_TA DARM_BASE TEE_LOAD_ADDR TEE_OFFSET=0x8400000 DARM_BASE=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" ${BS_DIR_UBOOT}/include/autoconf.mk|tr -d '\r'` TEE_LOAD_ADDR=$((DARM_BASE+TEE_OFFSET)) # Convert Dec to Hex TEE_LOAD_ADDR=$(echo "obase=16;${TEE_LOAD_ADDR}"|bc) ${BS_DIR_TOP}/rkbin/tools/loaderimage --pack --trustos ${BS_DIR_TOP}/rkbin/bin/rk32/rk3288_tee_ta_v1.33.bin ${BS_DIR_UBOOT}/trust.img ${TEE_LOAD_ADDR} || return 1 echo "trust.img with ta is ready" fi # Copy bootloader to release directory #px30_loader_v1.08.112.bin cp -v ${BS_DIR_UBOOT}/*_loader_*.bin ${BS_DIR_OUTPUT}/MiniLoaderAll.bin || return 1 cp -v ${BS_DIR_UBOOT}/uboot.img ${BS_DIR_OUTPUT} || return 1 cp -v ${BS_DIR_UBOOT}/trust.img ${BS_DIR_OUTPUT} || return 1 echo "^_^ uboot path: ${BS_DIR_OUTPUT}/MiniLoaderAll.bin" return 0 } build_kernel() { # Compiler kernel cd ${BS_DIR_KERNEL} || return 1 make ARCH=arm64 ${BS_CONFIG_KERNEL} CROSS_COMPILE=${BS_DIR_TOOLCHAIN_ARM64} || return 1 make ARCH=arm64 ${BS_CONFIG_KERNEL_DTB} CROSS_COMPILE=${BS_DIR_TOOLCHAIN_ARM64} -j${threads} || return 1 # Copy kernel.img & resource.img to release directory #cp -v ${BS_DIR_KERNEL}/kernel.img ${BS_DIR_OUTPUT} || return 1 #cp -v ${BS_DIR_KERNEL}/resource.img ${BS_DIR_OUTPUT} || return 1 cp -v ${BS_DIR_KERNEL}/boot.img ${BS_DIR_OUTPUT}/boot.img || return 1 return 0 } build_buildroot() { # build buildroot cd ${BS_DIR_TOP} || return 1 source ${BS_DIR_BUILDROOT}/build/envsetup.sh $BS_CONFIT_ROOTFS || return 1 #BUILD_CONFIG=`get_defconfig_name` #echo "$BUILD_CONFIG" make || return 1 cp -v ${BS_DIR_BUILDROOT}/output/$BS_CONFIT_ROOTFS/images/rootfs.ext4 ${BS_DIR_OUTPUT}/rootfs.img || return 1 return 0 } build_recovery() { # build kernel KERNEL_IMAGE=${BS_DIR_KERNEL}/arch/arm64/boot/Image KERNEL_DTB=${BS_DIR_KERNEL}/resource.img if [ -f ${KERNEL_IMAGE} ] then echo "found kernel image" else echo "kernel image doesn't exist, now build kernel image" build_kernel || return 1 if [ $? -eq 0 ]; then echo "build kernel done" else exit 1 fi fi # build recovery cd ${BS_DIR_TOP} || return 1 source ${BS_DIR_BUILDROOT}/build/envsetup.sh ${BS_CONFIT_RECOVERY} || return 1 #BUILD_CONFIG=`get_defconfig_name` #echo "$BUILD_CONFIG" echo "====Start build recovery====" make || return 1 echo -n "--------pack recovery image with zImage and resource...--------" RAMDISK_IMAGE=${BS_DIR_BUILDROOT}/output/$BS_CONFIT_RECOVERY/images/rootfs.cpio.gz RECOVERY_IMAGE=${BS_DIR_BUILDROOT}/output/$BS_CONFIT_RECOVERY/images/recovery.img ${BS_DIR_KERNEL}/scripts/mkbootimg --kernel $KERNEL_IMAGE --ramdisk $RAMDISK_IMAGE --second $KERNEL_DTB -o $RECOVERY_IMAGE || return 1 echo "done." cp -v ${BS_DIR_BUILDROOT}/output/$BS_CONFIT_RECOVERY/images/recovery.img ${BS_DIR_OUTPUT}/recovery.img || return 1 return 0 } build_update() { cd ${BS_DIR_OUTPUT} || return 1 # chmod a+r -R ${BS_DIR_OUTPUT}/ echo "start creating updateimg..." source ${BS_DIR_BUILDROOT}/build/envsetup.sh $BS_CONFIT_ROOTFS || return 1 #create oem.img # Set oem partition type, including ext2 squashfs echo "start creating oemimg..." RK_OEM_FS_TYPE=ext2 OEM_DIR=${BS_DIR_TOP}/device/rockchip/oem/oem_normal OEM_IMG=${BS_DIR_OUTPUT}/oem.img OEM_SIZE=18M ${BS_DIR_TOP}/device/rockchip/common/mk-image.sh $OEM_DIR $OEM_IMG $RK_OEM_FS_TYPE auto test || return 1 echo "start creating userdataimg..." #create userdata.img USERDATA_DIR=${BS_DIR_TOP}/device/rockchip/userdata/userdata_normal USERDATA_IMG=${BS_DIR_OUTPUT}/userdata.img RK_USERDATA_FS_TYPE=ext2 ${BS_DIR_TOP}/device/rockchip/common/mk-image.sh $USERDATA_DIR $USERDATA_IMG $RK_USERDATA_FS_TYPE auto test|| return 1 echo "cp img..." #generated update-linux.img cp -av ${BS_DIR_TOP}/device/rockchip/px30/parameter-buildroot.txt ${BS_DIR_OUTPUT}/parameter.txt cp -av ${BS_DIR_TOOLS}/package-file-buildroot ${BS_DIR_OUTPUT}/package-file cp -av ${BS_DIR_TOP}/device/rockchip/rockimg/wipe_all-misc.img ${BS_DIR_OUTPUT}/misc.img echo "create update-linux.img..." ${BS_DIR_TOP}/tools/linux/Linux_Pack_Firmware/rockdev/afptool -pack ${BS_DIR_OUTPUT}/ ${BS_DIR_OUTPUT}/temp.img || return 1; ${BS_DIR_TOP}/tools/linux/Linux_Pack_Firmware/rockdev/rkImageMaker -RKPX30 ${BS_DIR_OUTPUT}/MiniLoaderAll.bin ${BS_DIR_OUTPUT}/temp.img ${BS_DIR_OUTPUT}/update-linux.img -os_type:androidos || return 1; rm -rf ${BS_DIR_OUTPUT}/temp.img || return 1; echo "update-linux.img is generated now!" return 0 } threads=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}') uboot=no kernel=no buildroot=no recovery=no update=no if [ -z $1 ]; then uboot=yes kernel=yes buildroot=yes recovery=yes update=yes fi while [ "$1" ]; do case "$1" in -j=*) x=$1 threads=${x#-j=} ;; -u|--uboot) uboot=yes ;; -k|--kernel) kernel=yes ;; -b|--rootfs) buildroot=yes ;; -r|--recovery) recovery=yes ;; -U|--update) update=yes ;; -a|--all) uboot=yes kernel=yes buildroot=yes recovery=yes update=yes ;; -h|--help) cat >&2 <&2 exit 1 ;; esac shift done setup_environment || exit 1 if [ "${uboot}" = yes ]; then build_bootloader_uboot || exit 1 fi if [ "${kernel}" = yes ]; then build_kernel || exit 1 fi if [ "${buildroot}" = yes ]; then build_buildroot || exit 1 fi if [ "${recovery}" = yes ]; then build_recovery || exit 1 fi if [ "${update}" = yes ]; then build_update || exit 1 fi exit 0