diff -drupN a/scripts/build.sh b/scripts/build.sh --- a/scripts/build.sh 1970-01-01 03:00:00.000000000 +0300 +++ b/scripts/build.sh 2022-06-12 05:28:14.000000000 +0300 @@ -0,0 +1,678 @@ +#!/bin/bash +set -e + +#Setup common variables +export ARCH=arm +export CROSS_COMPILE=arm-linux-gnueabi- +if [ -n "`echo ${LICHEE_CHIP} | grep "sun5[0-9]i"`" ] && \ + [ "x${LICHEE_ARCH}" = "xarm64" ]; then + export ARCH=arm64 + export CROSS_COMPILE=aarch64-linux-gnu- +fi + +if [ -n "${LICHEE_TOOLCHAIN_PATH}" \ + -a -d "${LICHEE_TOOLCHAIN_PATH}" ]; then + GCC=$(find ${LICHEE_TOOLCHAIN_PATH} -perm /a+x -a -regex '.*-gcc'); + export CROSS_COMPILE="${GCC%-*}-"; +elif [ -n "${LICHEE_CROSS_COMPILER}" ]; then + export CROSS_COMPILE="${LICHEE_CROSS_COMPILER}-" +fi + +export AS=${CROSS_COMPILE}as +export LD=${CROSS_COMPILE}ld +export CC=${CROSS_COMPILE}gcc +export AR=${CROSS_COMPILE}ar +export NM=${CROSS_COMPILE}nm +export STRIP=${CROSS_COMPILE}strip +export OBJCOPY=${CROSS_COMPILE}objcopy +export OBJDUMP=${CROSS_COMPILE}objdump +export LOCALVERSION="" +MKBOOTIMG=${LICHEE_TOOLS_DIR}/pack/pctools/linux/android/mkbootimg +if [ -f ${MKBOOTIMG} ]; then + export MKBOOTIMG +else + export MKBOOTIMG=${KUNOS_TOOLS_DIR}/android/mkbootimg +fi +if [ "x$CCACHE_DIR" != "x" ];then + CCACHE_Y="ccache " +fi + +KERNEL_VERSION=`make -s kernelversion -C ./` +LICHEE_KDIR=`pwd` +LICHEE_MOD_DIR=${LICHEE_KDIR}/output/lib/modules/${KERNEL_VERSION} +export LICHEE_KDIR + +update_kern_ver() +{ + if [ -r include/generated/utsrelease.h ]; then + KERNEL_VERSION=`cat include/generated/utsrelease.h |awk -F\" '{print $2}'` + fi + LICHEE_MOD_DIR=${LICHEE_KDIR}/output/lib/modules/${KERNEL_VERSION} +} + +show_help() +{ + printf " + Build script for Lichee platform + + Invalid Options: + + help - show this help + kernel - build kernel + modules - build kernel module in modules dir + clean - clean kernel and modules + + " +} + +build_nand() +{ + NAND_ROOT=${LICHEE_KDIR}/modules/nand + + make -C modules/nand LICHEE_MOD_DIR=${LICHEE_MOD_DIR} \ + LICHEE_KDIR=${LICHEE_KDIR} \ + CONFIG_CHIP_ID=${CONFIG_CHIP_ID} install + +} + +gpu_message() +{ + echo -ne "\033[34;1m" + echo "[GPU]: $1" + echo -ne "\033[0m" +} + +build_gpu() +{ + GPU_TYPE=`fgrep CONFIG_SUNXI_GPU_TYPE ${LICHEE_KDIR}/.config | cut -d \" -f 2` + if [ "X$GPU_TYPE" = "XNone" -o "X$GPU_TYPE" = "X" ]; then + { + gpu_message "No GPU type is configured in ${LICHEE_KDIR}/.config." + return + } + fi + + gpu_message "Building $GPU_TYPE device driver..." + + if [ "X${LICHEE_PLATFORM}" = "Xandroid" -o "X${LICHEE_PLATFORM}" = "Xsecureandroid" ] ; then + { + TMP_OUT=$OUT + TMP_TOP=$TOP + unset OUT + unset TOP + } + fi + + make -C modules/gpu LICHEE_MOD_DIR=${LICHEE_MOD_DIR} LICHEE_KDIR=${LICHEE_KDIR} + + if [ "X${LICHEE_PLATFORM}" = "Xandroid" -o "X${LICHEE_PLATFORM}" = "Xsecureandroid" ] ; then + { + export OUT=$TMP_OUT + export TOP=$TMP_TOP + } + fi + + gpu_message "$GPU_TYPE device driver has been built." +} + +clean_gpu() +{ + GPU_TYPE=`fgrep CONFIG_SUNXI_GPU_TYPE ${LICHEE_KDIR}/.config | cut -d \" -f 2` + if [ "X$GPU_TYPE" = "XNone" -o "X$GPU_TYPE" = "X" ]; then + { + gpu_message "No GPU type is configured in .config." + return + } + fi + + gpu_message "Cleaning $GPU_TYPE device driver..." + make -C modules/gpu LICHEE_MOD_DIR=${LICHEE_MOD_DIR} LICHEE_KDIR=${LICHEE_KDIR} clean + gpu_message "$GPU_TYPE device driver has been cleaned." +} + +build_check() +{ + if [ "x$SUNXI_CHECK" = "x1" ];then + SUNXI_SPARSE_CHECK=1 + SUNXI_SMATCH_CHECK=1 + SUNXI_STACK_CHECK=1 + fi + + checktools_dir=$LICHEE_TOOLS_DIR/codecheck + tools_sparse=$checktools_dir/sparse/sparse + tools_smatch=$checktools_dir/smatch/smatch + + if [ "x$SUNXI_SPARSE_CHECK" = "x1" ] && [ -f $tools_sparse ];then + echo "\n\033[0;31;1mBuilding Round for sparse check...\033[0m\n\n" + CHECK="$tools_sparse" + make CHECK=${CHECK} ARCH=${ARCH} CROSS_COMPILE="${CCACHE_Y}${CROSS_COMPILE}" -j${LICHEE_JLEVEL} \ + C=2 all modules 2>&1|tee output/build_sparse.txt + cat output/build_sparse.txt|egrep -w '(warn|error|warning)' >output/warn_sparse.txt + fi + + if [ "x$SUNXI_SMATCH_CHECK" = "x1" ]&& [ -f $tools_smatch ];then + echo "\n\033[0;31;1mBuilding Round for smatch check...\033[0m\n\n" + CHECK="$tools_smatch --full-path --no-data -p=kkernel" + make CHECK=${CHECK} ARCH=${ARCH} CROSS_COMPILE="${CCACHE_Y}${CROSS_COMPILE}" -j${LICHEE_JLEVEL} \ + C=2 all modules 2>&1|tee output/build_smatch.txt + cat output/build_smatch.txt|egrep -w '(warn|error|warning)' >output/warn_smatch.txt + fi + + if [ "x$SUNXI_STACK_CHECK" = "x1" ];then + make ARCH=${ARCH} CROSS_COMPILE="${CCACHE_Y}${CROSS_COMPILE}" -j${LICHEE_JLEVEL} checkstack 2>&1 \ + |tee output/warn_stack.txt + fi +} + +build_dts(){ + if [ ! -f .config ] ; then + printf "\n\033[0;31;1mUsing default config ${LICHEE_KERN_DEFCONF_ABSOLUTE} ...\033[0m\n\n" + make ARCH=${ARCH} defconfig KBUILD_DEFCONFIG=${LICHEE_KERN_DEFCONF_RELATIVE} + fi + + echo "---build dts for ${LICHEE_CHIP} ${LICHEE_BOARD}-----" + if [ "x${ARCH}" = "xarm" ];then + dts_path="arch/arm/boot/dts" + else + dts_path="arch/arm64/boot/dts/sunxi" + prefix="sunxi/" + fi + dtb_file=board.dtb + dts_file=board.dts + if [ ! -f $dts_path/$dts_file ];then + dtb_file="${LICHEE_CHIP}-${LICHEE_BOARD}.dtb" + dts_file="${LICHEE_CHIP}-${LICHEE_BOARD}.dts" + fi + if [ ! -f $dts_path/$dts_file ];then + dts_file="${LICHEE_CHIP}-soc.dts" + dtb_file="${LICHEE_CHIP}-soc.dtb" + fi + make ARCH=${ARCH} ${prefix}${dtb_file} +} + +build_kernel() +{ + echo "Building kernel" + + cd ${LICHEE_KDIR} + rm -rf output/ + echo "${LICHEE_MOD_DIR}" + mkdir -p ${LICHEE_MOD_DIR} + + # uImage is arm architecture specific target + local arch_target="" + if [ "${ARCH}" = "arm" ]; then + arch_target="uImage dtbs" + else + arch_target="all" + fi + + #exchange sdc0 and sdc2 for dragonBoard card boot + if [ "x${LICHEE_PLATFORM}" = "xdragonboard" -o "x${LICHEE_PLATFORM}" = "xdragonmat" ]; then + local SYS_CONFIG_FILE=../tools/pack/chips/${LICHEE_CHIP}/configs/${LICHEE_BOARD}/sys_config.fex + local DTS_PATH=./arch/${ARCH}/boot/dts/ + + if [ -f ${DTS_PATH}/${LICHEE_CHIP}_bak.dtsi ];then + rm -f ${DTS_PATH}/${LICHEE_CHIP}.dtsi + mv ${DTS_PATH}/${LICHEE_CHIP}_bak.dtsi ${DTS_PATH}/${LICHEE_CHIP}.dtsi + fi + # if find dragonboard_test=1 in sys_config.fex ,then will exchange sdc0 and sdc2 + if [ -n "`grep "dragonboard_test" $SYS_CONFIG_FILE | grep "1" | grep -v ";"`" ]; then + echo "exchange sdc0 and sdc2 for dragonboard card boot" + ./scripts/exchange-sdc0-sdc2-for-dragonboard.sh ${LICHEE_CHIP} + fi + fi + + if [ ! -f .config ] ; then + printf "\n\033[0;31;1mUsing default config ${LICHEE_KERN_DEFCONF_ABSOLUTE} ...\033[0m\n\n" + make ARCH=${ARCH} defconfig KBUILD_DEFCONFIG=${LICHEE_KERN_DEFCONF_RELATIVE} + fi + + if [ "x$PACK_TINY_ANDROID" = "xtrue" ]; then + ARCH=${ARCH} scripts/kconfig/merge_config.sh .config \ + linaro/configs/sunxi-tinyandroid.conf + fi + if [ "x$PACK_AUTOTEST" != "x" ]; then + if [ -f linaro/configs/sunxi-sata.conf ];then + ARCH=${ARCH} scripts/kconfig/merge_config.sh .config \ + linaro/configs/sunxi-common.conf + fi + fi + + if [ "x$PACK_BSPTEST" != "x" -o "x$BUILD_SATA" != "x" -o "x$LICHEE_LINUX_DEV" = "xsata" ]; then + if [ -f linaro/configs/sunxi-sata.conf ];then + ARCH=${ARCH} scripts/kconfig/merge_config.sh .config \ + linaro/configs/sunxi-common.conf + fi + if [ -f linaro/configs/sunxi-sata.conf ];then + ARCH=${ARCH} scripts/kconfig/merge_config.sh .config \ + linaro/configs/sunxi-sata.conf + fi + if [ -f linaro/configs/sunxi-sata-${LICHEE_CHIP}.conf ];then + ARCH=${ARCH} scripts/kconfig/merge_config.sh .config \ + linaro/configs/sunxi-sata-${LICHEE_CHIP}.conf + fi + if [ -f linaro/configs/sunxi-sata-${ARCH}.conf ];then + ARCH=${ARCH} scripts/kconfig/merge_config.sh .config \ + linaro/configs/sunxi-sata-${ARCH}.conf + fi + fi + + make ARCH=${ARCH} CROSS_COMPILE="${CCACHE_Y}${CROSS_COMPILE}" -j${LICHEE_JLEVEL} ${arch_target} modules + build_check + update_kern_ver + + #The Image is origin binary from vmlinux. + if [ -f arch/${ARCH}/boot/Image ]; then + cp -vf arch/${ARCH}/boot/Image output/bImage + fi + + if [ -f arch/${ARCH}/boot/zImage ] || [ -f arch/${ARCH}/boot/uImage ]; then + cp -vf arch/${ARCH}/boot/[zu]Image output/ + fi + + if [ -f arch/${ARCH}/boot/Image.gz ]; then + cp -vf arch/${ARCH}/boot/Image.gz output/ + fi + + echo "Copy rootfs.cpio.gz for ${ARCH}" + if [ "${ARCH}" = "arm" ]; then + cp -f rootfs_32bit.cpio.gz output/rootfs.cpio.gz + else + cp -f rootfs.cpio.gz output/rootfs.cpio.gz + fi + + #1. longan, if it's self ramdisk is exist, use it + #2. longan, if it's self ramdisk is not exist, use default ramdisk + #3. else, use default ramdisk + local longan_ramdisk="${LICHEE_PLAT_OUT}/ramfs/images/rootfs.cpio.gz" + if [ "x${LICHEE_LINUX_DEV}" = "xlongan" -a -f ${longan_ramdisk} ]; then + echo "Use longan ramdisk ...." + cp -f ${longan_ramdisk} output/rootfs.cpio.gz + fi + + cp .config output/ + + tar -jcf output/vmlinux.tar.bz2 vmlinux + for file in $(find drivers sound crypto block fs security net -name "*.ko"); do + cp $file ${LICHEE_MOD_DIR} + done + cp -f Module.symvers ${LICHEE_MOD_DIR} + +} + +build_modules() +{ + + echo "Building modules" + + if [ ! -f include/generated/utsrelease.h ]; then + printf "Please build kernel first!\n" + exit 1 + fi + + update_kern_ver + build_nand + if [ "${LICHEE_CHIP}" != "sun8iw8p1" ]; then + build_gpu + fi +} + +regen_rootfs_cpio() +{ + echo "regenerate rootfs cpio" + + cd ${LICHEE_KDIR}/output + if [ -x "../scripts/build_rootfs.sh" ]; then + ../scripts/build_rootfs.sh e ./rootfs.cpio.gz > /dev/null + else + echo "No such file: scripts/build_rootfs.sh" + exit 1 + fi + + mkdir -p ./skel/lib/modules/${KERNEL_VERSION} + + if [ -e ${LICHEE_MOD_DIR}/nand.ko ]; then + cp ${LICHEE_MOD_DIR}/nand.ko ./skel/lib/modules/${KERNEL_VERSION} + if [ $? -ne 0 ]; then + echo "copy nand module error: $?" + exit 1 + fi + fi + + ko_file=`find ./skel/lib/modules/$KERNEL_VERSION/ -name *.ko` + if [ ! -z "$ko_file" ]; then + ${STRIP} -d ./skel/lib/modules/$KERNEL_VERSION/*.ko + fi + + rm -f rootfs.cpio.gz + ../scripts/build_rootfs.sh c rootfs.cpio.gz > /dev/null + rm -rf skel + cd - > /dev/null +} + +longan_modify_init() +{ + sed -i '/\(\[ -x \/mnt\/sbin\/init\)/c\if [ -x /mnt/init ]; then\n mount -n --move /proc /mnt/proc\n mount -n --move /sys /mnt/sys\n mount -n --move /dev /mnt/dev\n exec switch_root /mnt /init\nfi\n' ./skel/init +} + +update_roofs_for_longan() +{ + local rootfs_cpio="./rootfs.cpio.gz" + + echo "update roofs for longan ...." + + cd ${LICHEE_KDIR}/output + if [ -x "../scripts/build_rootfs.sh" ]; then + ../scripts/build_rootfs.sh e ${rootfs_cpio} > /dev/null + else + echo "No such file: scripts/build_rootfs.sh" + exit 1 + fi + + longan_modify_init + + rm -f ${rootfs_cpio} + ../scripts/build_rootfs.sh c ${rootfs_cpio} > /dev/null + rm -rf skel + cd - > /dev/null +} + +build_ramfs() +{ + local bss_sz=0; + local bss_offset=0; + local bss_size=0; + local CHIP=""; + + local BIMAGE="output/bImage"; + local RAMDISK="output/rootfs.cpio.gz"; + local TINYOS_RAMDISK="${LICHEE_BR_OUT}/images/rootfs.cpio.gz" + local BASE=""; + local RAMDISK_OFFSET=""; + local KERNEL_OFFSET=""; + + if [ "x${LICHEE_LINUX_DEV}" = "xtinyos" -a -f ${TINYOS_RAMDISK} ];then + RAMDISK=${TINYOS_RAMDISK} + else + # update rootfs.cpio.gz with new module files + regen_rootfs_cpio + + if [ "x${LICHEE_LINUX_DEV}" = "xlongan" ]; then + update_roofs_for_longan + fi + fi + + CHIP=`echo ${LICHEE_CHIP} | sed -e 's/.*\(sun[0-9x]*i\).*/\1/g'`; + + if [ "${CHIP}" = "sun9i" ]; then + BASE="0x20000000"; + else + BASE="0x40000000"; + fi + + if [ "${ARCH}" = "arm" ]; then + KERNEL_OFFSET="0x8000"; + elif [ "${ARCH}" = "arm64" ]; then + KERNEL_OFFSET="0x80000"; + fi + + if [ -f vmlinux ]; then + bss_offset=`${CROSS_COMPILE}readelf -S vmlinux | \ + awk '/\.bss/ {print $5}'`; + bss_size=`${CROSS_COMPILE}readelf -S vmlinux | \ + awk '/\.bss/ {print $6}'`; + + # If linux-4.9 the bss_size will be in next line + if [ -z "$bss_size" ]; then + bss_size=`${CROSS_COMPILE}readelf -S vmlinux | \ + awk '/\.bss/ {getline var; print var}' | awk '{print $1}'`; + fi + + bss_sz=$[ $((16#$bss_offset))+$((16#$bss_size))] + fi + + # If the size of bImage larger than 16M, will offset 0x02000000 + if [ ${bss_sz} -gt $((16#1000000)) ]; then + RAMDISK_OFFSET="0x02000000"; + else + RAMDISK_OFFSET="0x01000000"; + fi + + ${MKBOOTIMG} --kernel ${BIMAGE} \ + --ramdisk ${RAMDISK} \ + --board ${CHIP}_${ARCH} \ + --base ${BASE} \ + --kernel_offset ${KERNEL_OFFSET} \ + --ramdisk_offset ${RAMDISK_OFFSET} \ + -o output/boot.img + + # If uboot use *bootm* to boot kernel, we should use uImage. + echo build_ramfs + echo "Copy boot.img to output directory ..." + cp output/boot.img ${LICHEE_PLAT_OUT} + cp output/vmlinux.tar.bz2 ${LICHEE_PLAT_OUT} + + if [ -f output/zImage ] || [ -f output/uImage ]; then + cp output/[zu]Image ${LICHEE_PLAT_OUT} + fi + + if [ ! -f output/arisc ]; then + echo "arisc" > output/arisc + fi + cp output/arisc ${LICHEE_PLAT_OUT} + + if [ "x${ARCH}" = "xarm64" ]; then + if [ -f arch/${ARCH}/boot/dts/sunxi/board.dtb ]; then + cp arch/${ARCH}/boot/dts/sunxi/board.dtb output/sunxi.dtb + elif [ -f arch/${ARCH}/boot/dts/sunxi/${LICHEE_CHIP}-${LICHEE_BOARD}.dtb ]; then + cp arch/${ARCH}/boot/dts/sunxi/${LICHEE_CHIP}-${LICHEE_BOARD}.dtb output/sunxi.dtb + elif [ -f arch/${ARCH}/boot/dts/sunxi/${LICHEE_CHIP}-soc.dtb ]; then + cp arch/${ARCH}/boot/dts/sunxi/${LICHEE_CHIP}-soc.dtb output/sunxi.dtb + else + echo "sunxi.dtb" > output/sunxi.dtb + fi + else + if [ -f arch/${ARCH}/boot/dts/board.dtb ]; then + cp arch/${ARCH}/boot/dts/board.dtb output/sunxi.dtb + elif [ -f arch/${ARCH}/boot/dts/${LICHEE_CHIP}-${LICHEE_BOARD}.dtb ]; then + cp arch/${ARCH}/boot/dts/${LICHEE_CHIP}-${LICHEE_BOARD}.dtb output/sunxi.dtb + elif [ -f arch/${ARCH}/boot/dts/${LICHEE_CHIP}-soc.dtb ]; then + cp arch/${ARCH}/boot/dts/${LICHEE_CHIP}-soc.dtb output/sunxi.dtb + else + echo "sunxi.dtb" > output/sunxi.dtb + fi + fi + + # It's used for dtb debug + ./scripts/dtc/dtc -I dtb -O dts -o output/.sunxi.dts output/sunxi.dtb -W no-unit_address_vs_reg + + cp output/.sunxi.dts ${LICHEE_PLAT_OUT} + cp output/sunxi.dtb ${LICHEE_PLAT_OUT} +} + +gen_output() +{ + if [ "x${LICHEE_PLATFORM}" = "xandroid" ] ; then + echo "Copy modules to target ..." + rm -rf ${LICHEE_PLAT_OUT}/lib + cp -rf ${LICHEE_KDIR}/output/* ${LICHEE_PLAT_OUT} + return + fi + + if [ -d ${LICHEE_BR_OUT}/target ] ; then + echo "Copy modules to target ..." + local module_dir="${LICHEE_BR_OUT}/target/lib/modules" + rm -rf ${module_dir} + mkdir -p ${module_dir} + cp -rf ${LICHEE_MOD_DIR} ${module_dir} + fi + + echo "$0" +} + +clean_kernel() +{ + clarg="clean" + if [ "x$1" == "xdistclean" ]; then + clarg="distclean" + fi + echo "Cleaning kernel, arg: $clarg ..." + make ARCH=${ARCH} "$clarg" + rm -rf output/* + echo +} + +clean_modules() +{ + echo "Cleaning modules ..." + clean_gpu + echo +} + +deal_verity_utils() +{ + cd ${LICHEE_KDIR}/output + + if [ "${ARCH}" = "arm" ]; then + local verity_tools_dir="../verity_tools/32_bit"; + elif [ "${ARCH}" = "arm64" ]; then + local verity_tools_dir="../verity_tools/64_bit"; + fi + if [ ! -d ${verity_tools_dir} ]; then + if [ x"$2" = x"clean" ];then + #no tools, obviously dont need to clean, do nothing + exit 0 + fi + fi + + if [ -x "../scripts/build_rootfs.sh" ]; then + ../scripts/build_rootfs.sh e ./rootfs.cpio.gz > /dev/null + else + echo "No such file: scripts/build_rootfs.sh" + exit 1 + fi + + if [ x"$2" = x"clean" ];then + rm -f skel/verity_key + rm -f skel/verityInfo + else + local blk_size=$2 + local verity_dev=$3 + local ROOTFSTYPE=$4 + local key_file=$5 + + #echo "blk_size="${blk_size} + #echo "verity_dev="${verity_dev} + #echo "ROOTFSTYPE="${ROOTFSTYPE} + + echo "blk_size="${blk_size} > skel/verityInfo + echo "verity_dev="${verity_dev} >> skel/verityInfo + echo "ROOTFSTYPE="${ROOTFSTYPE} >> skel/verityInfo + + if [ ! -f skel/usr/bin/openssl ]; then + if [ -f ${verity_tools_dir}/openssl ]; then + echo "ramfs do not have openssl bin, use a prebuild one" + cp ${verity_tools_dir}/openssl skel/usr/bin + else + echo "no avaliable openssl found, can not enable dm-verity" + exit 2 + fi + fi + + if [ ! -f skel/usr/sbin/veritysetup ]; then + if [ -f ${verity_tools_dir}/veritysetup ]; then + echo "ramfs do not have veritysetup bin, use a prebuild one" + cp ${verity_tools_dir}/veritysetup skel/usr/sbin + else + echo "no avaliable veritysetup found, can not enable dm-verity" + exit 2 + fi + fi + cp ${key_file} skel/verity_key + fi + + rm -f rootfs.cpio.gz + ../scripts/build_rootfs.sh c rootfs.cpio.gz > /dev/null + rm -rf skel1 + mv -f skel skel1 + cd - > /dev/null + + local BIMAGE="output/bImage"; + local RAMDISK="output/rootfs.cpio.gz"; + CHIP=`echo ${LICHEE_CHIP} | sed -e 's/.*\(sun[0-9x]*i\).*/\1/g'`; + + if [ "${CHIP}" = "sun9i" ]; then + BASE="0x20000000"; + else + BASE="0x40000000"; + fi + + if [ "${ARCH}" = "arm" ]; then + KERNEL_OFFSET="0x8000"; + elif [ "${ARCH}" = "arm64" ]; then + KERNEL_OFFSET="0x80000"; + fi + if [ -f vmlinux ]; then + bss_offset=`${CROSS_COMPILE}readelf -S vmlinux | \ + awk '/\.bss/ {print $5}'`; + bss_size=`${CROSS_COMPILE}readelf -S vmlinux | \ + awk '/\.bss/ {print $6}'`; + + # If linux-4.9 the bss_size will be in next line + if [ -z "$bss_size" ]; then + bss_size=`${CROSS_COMPILE}readelf -S vmlinux | \ + awk '/\.bss/ {getline var; print var}' | awk '{print $1}'`; + fi + + bss_sz=$[ $((16#$bss_offset))+$((16#$bss_size))] + fi + + # If the size of bImage larger than 16M, will offset 0x02000000 + if [ ${bss_sz} -gt $((16#1000000)) ]; then + RAMDISK_OFFSET="0x02000000"; + else + RAMDISK_OFFSET="0x01000000"; + fi + + ${MKBOOTIMG} --kernel ${BIMAGE} \ + --ramdisk ${RAMDISK} \ + --board ${CHIP}_${ARCH} \ + --base ${BASE} \ + --kernel_offset ${KERNEL_OFFSET} \ + --ramdisk_offset ${RAMDISK_OFFSET} \ + -o output/boot.img + cp output/boot.img ${LICHEE_PLAT_OUT} +} + +##################################################################### +# +# Main Runtine +# +##################################################################### + +case "$1" in + kernel) + build_kernel + ;; + modules) + build_modules + ;; + clean|distclean) + clean_modules + clean_kernel "$1" + ;; + deal_verity) + deal_verity_utils $@ + ;; + dts) + build_dts + ;; + *) + build_kernel + build_modules + build_ramfs + gen_output + echo -e "\n\033[0;31;1m${LICHEE_CHIP} compile Kernel successful\033[0m\n\n" + ;; +esac