You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
290 lines
7.4 KiB
290 lines
7.4 KiB
#!/bin/bash
|
|
|
|
# ----------------------------------------------------------
|
|
# base setup
|
|
|
|
# export or set ROCKCHIP_DEVICE_DIR in .rockchip_device.mk
|
|
# to build image for different combos
|
|
|
|
KERNEL_VER=5.10
|
|
KERNEL_DIR=kernel-${KERNEL_VER}
|
|
|
|
UBOOT_DIR=u-boot
|
|
|
|
# lunched combo
|
|
PRODUCT=${TARGET_PRODUCT}
|
|
VARIANT=${TARGET_BUILD_VARIANT}
|
|
|
|
source build/envsetup.sh
|
|
true ${PRODUCT:="aosp_nanopi3"}
|
|
true ${VARIANT:="userdebug"}
|
|
|
|
#----------------------------------------------------------
|
|
# local functions
|
|
|
|
MAKE="make -j$(nproc)"
|
|
|
|
start_time=$(date +"%s")
|
|
|
|
FA_ShowTime() {
|
|
local ret=$1
|
|
local end_time=$(date +"%s")
|
|
local tdiff=$(($end_time-$start_time))
|
|
local hours=$(($tdiff / 3600 ))
|
|
local mins=$((($tdiff % 3600) / 60))
|
|
local secs=$(($tdiff % 60))
|
|
local ncolors=$(tput colors 2>/dev/null)
|
|
if [ -n "$ncolors" ] && [ $ncolors -ge 8 ]; then
|
|
color_failed=$'\E'"[0;31m"
|
|
color_success=$'\E'"[0;32m"
|
|
color_reset=$'\E'"[00m"
|
|
else
|
|
color_failed=""
|
|
color_success=""
|
|
color_reset=""
|
|
fi
|
|
echo
|
|
if [ $ret -eq 0 ] ; then
|
|
echo -n "${color_success}#### make completed successfully "
|
|
else
|
|
echo -n "${color_failed}#### make failed to build some targets "
|
|
fi
|
|
if [ $hours -gt 0 ] ; then
|
|
printf "(%02g:%02g:%02g (hh:mm:ss))" $hours $mins $secs
|
|
elif [ $mins -gt 0 ] ; then
|
|
printf "(%02g:%02g (mm:ss))" $mins $secs
|
|
elif [ $secs -gt 0 ] ; then
|
|
printf "(%s seconds)" $secs
|
|
fi
|
|
echo " ####${color_reset}"
|
|
echo
|
|
return $ret
|
|
}
|
|
|
|
FA_RunCmd() {
|
|
[ "$V" = "1" ] && echo "+ ${@}"
|
|
eval $@ || exit $?
|
|
}
|
|
|
|
function usage()
|
|
{
|
|
echo "Usage: $0 [ARGS]"
|
|
echo
|
|
echo "Options:"
|
|
echo " -a build Android"
|
|
echo " -B build U-Boot"
|
|
echo " -K build Linux kernel"
|
|
echo
|
|
echo " -F, --all build all (U-Boot, kernel, Android)"
|
|
echo " -M make rockdev image"
|
|
echo " -u generate update.img"
|
|
echo
|
|
echo " -h show this help message and exit"
|
|
exit 1
|
|
}
|
|
|
|
function parse_args()
|
|
{
|
|
[ -z "$1" ] && usage;
|
|
TEMP=`getopt -o "aBKFMOuh" --long "all,clang,ota" -n "$SELF" -- "$@"`
|
|
if [ $? != 0 ] ; then exit 1; fi
|
|
eval set -- "$TEMP"
|
|
|
|
while true; do
|
|
case "$1" in
|
|
-a ) BUILD_ANDROID=true; shift 1;;
|
|
-B ) BUILD_UBOOT=true; shift 1;;
|
|
-K ) BUILD_KERNEL=true; shift 1;;
|
|
-O|--ota)
|
|
BUILD_OTA=true; shift 1;;
|
|
-F|--all)
|
|
BUILD_UBOOT=true;
|
|
BUILD_KERNEL=true;
|
|
BUILD_ANDROID=true;
|
|
shift 1;;
|
|
--clang)
|
|
BUILD_KERNEL_WITH_CLANG=true;
|
|
shift 1;;
|
|
-M ) MAKE_RKDEV_IMG=true; shift 1;;
|
|
-u ) GEN_UPDATE_IMG=true; shift 1;;
|
|
|
|
-h ) usage; exit 1 ;;
|
|
-- ) shift; break ;;
|
|
* ) echo "invalid option $1"; usage; return 1 ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
#----------------------------------------------------------
|
|
function check_android_ab() {
|
|
true
|
|
}
|
|
|
|
function build_uboot() {
|
|
local UBOOT_CFG=$(get_build_var PRODUCT_UBOOT_CONFIG)
|
|
|
|
check_android_ab
|
|
true ${UBOOT_CFG:=nanopi6}
|
|
|
|
cd ${UBOOT_DIR} && {
|
|
FA_RunCmd ./make.sh ${UBOOT_CFG}
|
|
ret=$?
|
|
FA_ShowTime $ret
|
|
cd - >/dev/null
|
|
}
|
|
}
|
|
|
|
function build_kernel() {
|
|
local KERNEL_CFG=$(get_build_var PRODUCT_KERNEL_CONFIG)
|
|
local KERNEL_IMG=$(get_build_var PRODUCT_KERNEL_DTS)
|
|
|
|
true ${KERNEL_CFG:=nanopi6_android_defconfig}
|
|
true ${KERNEL_IMG:=nanopi6-images}
|
|
|
|
if [ "${KERNEL_VER}" = "5.10" ] ; then
|
|
echo "Force use clang and llvm to build ${KERNEL_DIR}"
|
|
BUILD_KERNEL_WITH_CLANG=true
|
|
fi
|
|
if [ "$BUILD_KERNEL_WITH_CLANG" = true ] ; then
|
|
ADDON_ARGS="CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1"
|
|
fi
|
|
|
|
cd ${KERNEL_DIR} && {
|
|
FA_RunCmd ${MAKE} ARCH=arm64 ${ADDON_ARGS} ${KERNEL_CFG}
|
|
FA_RunCmd ${MAKE} ARCH=arm64 ${ADDON_ARGS} ${KERNEL_IMG}
|
|
ret=$?
|
|
declare -F make >/dev/null || FA_ShowTime $ret
|
|
cd - >/dev/null
|
|
[ -d "$OUT" ] || return 0
|
|
}
|
|
|
|
# repack v2 boot
|
|
if [ "$BUILD_ANDROID" != "true" ]; then
|
|
echo "Repacking header 2 boot.img: "
|
|
local BOOT_CMDLINE=`get_build_var BOARD_KERNEL_CMDLINE`
|
|
local SECURITY_LEVEL=`get_build_var PLATFORM_SECURITY_PATCH`
|
|
local IMAGE_PATH=rockdev/Image-${PRODUCT}
|
|
local REL_OUT=$(realpath $OUT --relative-to=.)
|
|
|
|
FA_RunCmd cp -af $KERNEL_DIR/arch/arm64/boot/Image $OUT/kernel
|
|
[ -f $OUT/dtb.img ] && DTB_IMG_ARGS="--dtb $OUT/dtb.img"
|
|
|
|
mkbootimg --kernel $OUT/kernel \
|
|
--ramdisk $OUT/ramdisk.img ${DTB_IMG_ARGS} \
|
|
--cmdline "$BOOT_CMDLINE" \
|
|
--os_version 12 --os_patch_level $SECURITY_LEVEL \
|
|
--header_version 2 \
|
|
--second $KERNEL_DIR/resource.img \
|
|
--output $REL_OUT/boot.img &&
|
|
cp -av $REL_OUT/boot.img ${IMAGE_PATH}/boot.img
|
|
fi
|
|
}
|
|
|
|
function build_android() {
|
|
true ${BUILD_NUMBER:=$(date +"6%y%m%d")$(($(date +"%H")/4))}
|
|
export BUILD_NUMBER
|
|
|
|
FA_RunCmd lunch ${PRODUCT}-${VARIANT}
|
|
|
|
clean_prop_target "$(cat ./out/soong/build_number.txt 2>/dev/null)"
|
|
FA_RunCmd ${MAKE} $*
|
|
}
|
|
|
|
function make_rockdev_img() {
|
|
if [ -z ${TARGET_PRODUCT} ]; then
|
|
FA_RunCmd lunch ${PRODUCT}-${VARIANT}
|
|
fi
|
|
|
|
FA_RunCmd ./mkimage.sh
|
|
ret=$?
|
|
|
|
[ "$BUILD_OTA" = true ] && copy_ota_images
|
|
FA_ShowTime $ret
|
|
}
|
|
|
|
function build_ota() {
|
|
echo "generate ota package"
|
|
local OTA_FULL=$TARGET_PRODUCT-ota-${BUILD_NUMBER}.zip
|
|
local OTA_PATH=rockdev/otapackage
|
|
local ota_build_number=$(cat $OTA_PATH/build_number.txt 2>/dev/null)
|
|
local ota_target_start=$TARGET_PRODUCT-target_files-${ota_build_number}.zip
|
|
local ota_target_build=$TARGET_PRODUCT-target_files-${BUILD_NUMBER}.zip
|
|
|
|
build_android dist
|
|
ret=$?
|
|
|
|
mkdir -p $OTA_PATH
|
|
FA_RunCmd "cp out/dist/${ota_target_build} $OTA_PATH/ -f"
|
|
FA_RunCmd "cp out/dist/${OTA_FULL} $OTA_PATH/ -f"
|
|
|
|
if [ "$BUILD_NUMBER" != "$ota_build_number" ] &&
|
|
[ -f $OTA_PATH/${ota_target_start} ] &&
|
|
[ -f $OTA_PATH/${ota_target_build} ]; then
|
|
ota_from_target_files -v \
|
|
-i $OTA_PATH/${ota_target_start} \
|
|
$OTA_PATH/${ota_target_build} \
|
|
$OTA_PATH/ota-update-${BUILD_NUMBER}.zip
|
|
cp device/friendlyelec/nanopi3/gen_ota_json.sh $OTA_PATH/ -f
|
|
fi
|
|
|
|
FA_RunCmd "cp ./out/soong/build_number.txt $OTA_PATH/ -f"
|
|
FA_ShowTime $ret
|
|
}
|
|
|
|
function clean_prop_target() {
|
|
[ "$BUILD_NUMBER" == "$1" ] && return 0
|
|
|
|
FA_RunCmd "rm -f $OUT/obj/ETC/system_build_prop_intermediates/build.prop"
|
|
FA_RunCmd "rm -f $OUT/odm/etc/build.prop"
|
|
FA_RunCmd "rm -f $OUT/product/build.prop"
|
|
FA_RunCmd "rm -f $OUT/system/build.prop"
|
|
FA_RunCmd "rm -f $OUT/vendor/build.prop"
|
|
FA_RunCmd "rm -f $OUT/recovery/root/default.prop"
|
|
FA_RunCmd "rm -f $OUT/recovery/root/prop.default"
|
|
}
|
|
|
|
function copy_ota_images() {
|
|
local IMAGE_PATH=rockdev/Image-${PRODUCT}
|
|
local target_files=$OUT/obj/PACKAGING/target_files_intermediates
|
|
|
|
echo -n "copy mass production super.img for OTA..."
|
|
FA_RunCmd "cp -f $OUT/obj/PACKAGING/super.img_intermediates/super.img $IMAGE_PATH/"
|
|
echo "done."
|
|
}
|
|
|
|
function gen_update_img() {
|
|
echo "generate update.img"
|
|
local PACK_TOOL_DIR=RKTools/linux/Linux_Pack_Firmware
|
|
local IMAGE_PATH=rockdev/Image-${PRODUCT}
|
|
local UPDATE_GEN=rockdev/update_gen
|
|
|
|
[ -d ${IMAGE_PATH} ] || make_rockdev_img
|
|
[ -f ${IMAGE_PATH}/update.img ] && rm -vf ${IMAGE_PATH}/update.img
|
|
|
|
mkdir -p $PACK_TOOL_DIR/rockdev/Image/
|
|
FA_RunCmd "cp ${IMAGE_PATH}/* $PACK_TOOL_DIR/rockdev/Image/ -f"
|
|
|
|
check_android_ab
|
|
cd $PACK_TOOL_DIR/rockdev && {
|
|
./mkupdate.sh $TARGET_BOARD_PLATFORM Image
|
|
ret=$?
|
|
FA_ShowTime $ret
|
|
cd - >/dev/null
|
|
}
|
|
|
|
mv $PACK_TOOL_DIR/rockdev/update.img $IMAGE_PATH/
|
|
rm $PACK_TOOL_DIR/rockdev/Image -rf
|
|
}
|
|
|
|
#----------------------------------------------------------
|
|
|
|
parse_args $@
|
|
|
|
[ "$BUILD_UBOOT" = true ] && build_uboot
|
|
[ "$BUILD_KERNEL" = true ] && build_kernel
|
|
[ "$BUILD_ANDROID" = true ] && build_android
|
|
[ "$BUILD_OTA" = true ] && build_ota
|
|
[ "$MAKE_RKDEV_IMG" = true ] && make_rockdev_img
|
|
[ "$GEN_UPDATE_IMG" = true ] && gen_update_img
|
|
|