1#!/bin/bash 2 3# Copyright (c) 2021-2023 HiHope Open Source Organization . 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16set -e 17 18pushd ${1} 19ROOT_DIR=${5} 20export PRODUCT_PATH=${4} 21export DEVICE_COMPANY=${6} 22export DEVICE_NAME=${7} 23export PRODUCT_COMPANY=${8} 24KERNEL_VERSION=${9} 25KERNEL_FORM=${10} 26KERNEL_PROD=${11} 27ENABLE_LTO_O0=${12} 28 29KERNEL_SRC_TMP_PATH=${ROOT_DIR}/out/kernel/src_tmp/${KERNEL_VERSION} 30KERNEL_OBJ_TMP_PATH=${ROOT_DIR}/out/kernel/OBJ/${KERNEL_VERSION} 31KERNEL_SOURCE=${ROOT_DIR}/kernel/linux/${KERNEL_VERSION} 32KERNEL_PATCH_PATH=${ROOT_DIR}/kernel/linux/patches/${KERNEL_VERSION} 33KERNEL_PATCH=${ROOT_DIR}/kernel/linux/patches/${KERNEL_VERSION}/rk3568_patch/kernel.patch 34BUILD_SCRIPT_PATH=${3} 35NEWIP_PATCH_FILE=${ROOT_DIR}/kernel/linux/common_modules/newip/apply_newip.sh 36TZDRIVER_PATCH_FILE=${ROOT_DIR}/kernel/linux/common_modules/tzdriver/apply_tzdriver.sh 37XPM_PATCH_FILE=${ROOT_DIR}/kernel/linux/common_modules/xpm/apply_xpm.sh 38CED_PATCH_FILE=${ROOT_DIR}/kernel/linux/common_modules/container_escape_detection/apply_ced.sh 39HIDEADDR_PATCH_FILE=${ROOT_DIR}/kernel/linux/common_modules/memory_security/apply_hideaddr.sh 40QOS_AUTH_PATCH_FILE=${ROOT_DIR}/kernel/linux/common_modules/qos_auth/apply_qos_auth.sh 41UNIFIED_COLLECTION_PATCH_FILE=${ROOT_DIR}/kernel/linux/common_modules/ucollection/apply_ucollection.sh 42CODE_SIGN_PATCH_FILE=${ROOT_DIR}/kernel/linux/common_modules/code_sign/apply_code_sign.sh 43DEC_PATCH_FILE=${ROOT_DIR}/kernel/linux/common_modules/dec/apply_dec.sh 44 45HARMONY_CONFIG_PATH=${ROOT_DIR}/kernel/linux/config/${KERNEL_VERSION} 46DEVICE_CONFIG_PATH=${ROOT_DIR}/kernel/linux/config/${KERNEL_VERSION}/${DEVICE_NAME} 47DEFCONFIG_BASE_FILE=${HARMONY_CONFIG_PATH}/base_defconfig 48DEFCONFIG_TYPE_FILE=${HARMONY_CONFIG_PATH}/type/standard_defconfig 49DEFCONFIG_FORM_FILE=${HARMONY_CONFIG_PATH}/form/${KERNEL_FORM}_defconfig 50DEFCONFIG_ARCH_FILE=${DEVICE_CONFIG_PATH}/arch/arm64_defconfig 51DEFCONFIG_PROC_FILE=${DEVICE_CONFIG_PATH}/product/${KERNEL_PROD}_defconfig 52 53RAMDISK_ARG="disable_ramdisk" 54MAKE_OHOS_ENV="GPUDRIVER=mali" 55export KBUILD_OUTPUT=${KERNEL_OBJ_TMP_PATH} 56 57source ${BUILD_SCRIPT_PATH}/kernel/kernel_source_checker.sh 58 59for i in "$@" 60do 61 case $i in 62 enable_ramdisk) 63 RAMDISK_ARG=enable_ramdisk 64 ;; 65 enable_mesa3d) 66 MAKE_OHOS_ENV="GPUDRIVER=mesa3d" 67 ;; 68 esac 69done 70 71function copy_and_patch_kernel_source() 72{ 73 rm -rf ${KERNEL_SRC_TMP_PATH} 74 mkdir -p ${KERNEL_SRC_TMP_PATH} 75 76 rm -rf ${KERNEL_OBJ_TMP_PATH} 77 mkdir -p ${KERNEL_OBJ_TMP_PATH} 78 79 cp -arf ${KERNEL_SOURCE}/* ${KERNEL_SRC_TMP_PATH}/ 80 81 cd ${KERNEL_SRC_TMP_PATH} 82 83 #HDF patch 84 bash ${ROOT_DIR}/drivers/hdf_core/adapter/khdf/linux/patch_hdf.sh ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${KERNEL_PATCH_PATH} ${DEVICE_NAME} 85 86 #update linux-6.6 kernel stdarg.h path to linux/stdarg.h 87 if [ ${KERNEL_VERSION} == "linux-6.6" ] 88 then 89 sed -i 's/<stdarg.h>/<linux\/stdarg.h>/' ${KERNEL_SRC_TMP_PATH}/bounds_checking_function/include/securec.h 90 fi 91 92 #kernel patch 93 patch -p1 < ${KERNEL_PATCH} 94 95 #newip 96 if [ -f $NEWIP_PATCH_FILE ]; then 97 bash $NEWIP_PATCH_FILE ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${DEVICE_NAME} ${KERNEL_VERSION} 98 fi 99 100 #tzdriver 101 if [ -f $TZDRIVER_PATCH_FILE ]; then 102 bash $TZDRIVER_PATCH_FILE ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${DEVICE_NAME} ${KERNEL_VERSION} 103 fi 104 105 #xpm 106 if [ -f $XPM_PATCH_FILE ]; then 107 bash $XPM_PATCH_FILE ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${DEVICE_NAME} ${KERNEL_VERSION} 108 fi 109 110 #ced 111 if [ -f $CED_PATCH_FILE ]; then 112 bash $CED_PATCH_FILE ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${DEVICE_NAME} ${KERNEL_VERSION} 113 fi 114 115 #qos_auth 116 if [ -f $QOS_AUTH_PATCH_FILE ]; then 117 bash $QOS_AUTH_PATCH_FILE ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${DEVICE_NAME} ${KERNEL_VERSION} 118 fi 119 120 #hideaddr 121 if [ -f $HIDEADDR_PATCH_FILE ]; then 122 bash $HIDEADDR_PATCH_FILE ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${DEVICE_NAME} ${KERNEL_VERSION} 123 fi 124 125 #ucollection 126 if [ -f $UNIFIED_COLLECTION_PATCH_FILE ]; then 127 bash $UNIFIED_COLLECTION_PATCH_FILE ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${DEVICE_NAME} ${KERNEL_VERSION} 128 fi 129 130 #code_sign 131 if [ -f $CODE_SIGN_PATCH_FILE ]; then 132 bash $CODE_SIGN_PATCH_FILE ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${DEVICE_NAME} ${KERNEL_VERSION} 133 fi 134 135 #dec 136 if [ -f $DEC_PATCH_FILE ]; then 137 bash $DEC_PATCH_FILE ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${DEVICE_NAME} ${KERNEL_VERSION} 138 fi 139 140 cp -rf ${BUILD_SCRIPT_PATH}/kernel/logo* ${KERNEL_SRC_TMP_PATH}/ 141 142 #config 143 if [ ! -f "$DEFCONFIG_FORM_FILE" ]; then 144 DEFCONFIG_FORM_FILE= 145 echo "warning no form config file $(DEFCONFIG_FORM_FILE)" 146 fi 147 if [ ! -f "$DEFCONFIG_PROC_FILE" ]; then 148 DEFCONFIG_PROC_FILE= 149 echo "warning no prod config file $(DEFCONFIG_PROC_FILE)" 150 fi 151 bash ${ROOT_DIR}/kernel/linux/${KERNEL_VERSION}/scripts/kconfig/merge_config.sh -O ${KERNEL_SRC_TMP_PATH}/arch/arm64/configs/ -m ${DEFCONFIG_TYPE_FILE} ${DEFCONFIG_FORM_FILE} ${DEFCONFIG_ARCH_FILE} ${DEFCONFIG_PROC_FILE} ${DEFCONFIG_BASE_FILE} 152 mv ${KERNEL_SRC_TMP_PATH}/arch/arm64/configs/.config ${KERNEL_SRC_TMP_PATH}/arch/arm64/configs/rockchip_linux_defconfig 153 154 #selinux config patch 155 for arg in "$@"; do 156 if [ "$arg" = "is_release" ]; then 157 echo "close selinux kernel config CONFIG_SECURITY_SELINUX_DEVELOP in release version" 158 ${KERNEL_SOURCE}/scripts/config --file ${KERNEL_SRC_TMP_PATH}/arch/arm64/configs/rockchip_linux_defconfig -d SECURITY_SELINUX_DEVELOP 159 fi 160 done 161 162 if [ $MAKE_OHOS_ENV == "GPUDRIVER=mesa3d" ]; then 163 python ${ROOT_DIR}/third_party/mesa3d/ohos/modifyDtsi.py ${KERNEL_SRC_TMP_PATH}/arch/arm64/boot/dts/rockchip/rk3568.dtsi 164 fi 165} 166 167set +e 168is_kernel_change ${ROOT_DIR} 169KERNEL_SOURCE_CHANGED=$? 170set -e 171if [ ${KERNEL_SOURCE_CHANGED} -ne 0 ]; then 172 echo "kernel or it's deps changed, start source update." 173 copy_and_patch_kernel_source 174else 175 echo "no changes to kernel, skip source copy." 176fi 177 178cd ${KERNEL_SRC_TMP_PATH} 179 180eval $MAKE_OHOS_ENV ./make-ohos.sh TB-RK3568X0 $RAMDISK_ARG ${ENABLE_LTO_O0} 181 182mkdir -p ${2} 183 184if [ "enable_ramdisk" != "${13}" ]; then 185 cp ${KERNEL_OBJ_TMP_PATH}/boot_linux.img ${2}/boot_linux.img 186fi 187cp ${KERNEL_OBJ_TMP_PATH}/resource.img ${2}/resource.img 188cp ${3}/loader/MiniLoaderAll.bin ${2}/MiniLoaderAll.bin 189cp ${3}/loader/uboot.img ${2}/uboot.img 190 191if [ "enable_absystem" == "${15}" ]; then 192 cp ${3}/loader/parameter_ab.txt ${2}/parameter_ab.txt 193 cp ${3}/loader/config_ab.cfg ${2}/config_ab.cfg 194else 195 cp ${3}/loader/parameter.txt ${2}/parameter.txt 196 cp ${3}/loader/config.cfg ${2}/config.cfg 197fi 198 199popd 200 201../kernel/src_tmp/${KERNEL_VERSION}/make-boot.sh .. 202 203if [ ${KERNEL_SOURCE_CHANGED} -ne 0 ]; then 204 cp ${ROOT_DIR}/out/kernel/checkpoint/last_build.info ${ROOT_DIR}/out/kernel/checkpoint/last_build.backup 205 cp ${ROOT_DIR}/out/kernel/checkpoint/current_build.info ${ROOT_DIR}/out/kernel/checkpoint/last_build.info 206 echo "kernel compile finish, save build info." 207else 208 echo "kernel compile finish." 209fi 210