298 lines
9.0 KiB
Bash
298 lines
9.0 KiB
Bash
|
|
#!/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 <<EOF
|
||
|
|
Usage: ./mk [OPTION]
|
||
|
|
Build script for compile the source of telechips project.
|
||
|
|
|
||
|
|
-j=n using n threads when building source project (example: -j=16)
|
||
|
|
-u, --uboot build bootloader uboot from source
|
||
|
|
-k, --kernel build kernel from source
|
||
|
|
-b, --rootfs build linux file system from source
|
||
|
|
-r, --recovery build recovery for linux platform
|
||
|
|
-U, --update build update file
|
||
|
|
-a, --all build all, include anything
|
||
|
|
-h, --help display this help and exit
|
||
|
|
EOF
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "./mk: Unrecognised option $1" >&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
|