1#!/bin/bash 2 3# Copyright (C) 2022 iSoftStone Device Co., Ltd. 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 16 17export LICHEE_IC=${1} 18export LICHEE_KERN_VER=${2} 19export LICHEE_ARCH=${3} 20 21# root path 22export OHOS_ROOT_PATH=${4} 23export PRODUCT_COMPANY=isoftstone 24export SOC_COMPANY=allwinner 25export LICHEE_PLATFORM=linux 26export LICHEE_LINUX_DEV=bsp 27export IC_COMPANY=allwinner 28export LICHEE_KERN_SYSTEM=kernel_boot 29export LICHEE_FLASH=default 30export PRODUCT_NAME=zhiyuan 31export DEVICE_NAME=${PRODUCT_NAME} 32# test_flag 33build_flag=${5} 34 35 36if [ "x$LICHEE_IC" == "xt507" ]; then 37 export LICHEE_BOARD=zhiyuan 38 export LICHEE_CHIP=sun50iw9p1 39 export LICHEE_KERN_DEFCONF=t507_standard_defconfig 40fi 41 42 43if [ "x$LICHEE_ARCH" == "xarm64" ]; then 44 export LICHEE_CROSS_COMPILER=aarch64-linux-gnu 45 export LICHEE_KERN_DEFCONF_RELATIVE=${LICHEE_KERN_DEFCONF} 46 export LICHEE_TOOLCHAIN_PATH=${OHOS_ROOT_PATH}/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu 47 export LICHEE_GNU_NAME=aarch64-linux-gnu- 48fi 49 50# src kernel path 51export OHOS_KERNEL_SRC_PATH=${OHOS_ROOT_PATH}/kernel/linux #kernel/linux 52 53# vendor path 54export LICHEE_VENDOR_DIR=${OHOS_ROOT_PATH}/vendor 55export PRODUCT_PATH=vendor/${PRODUCT_COMPANY}/${PRODUCT_NAME} #vendor/isoftstone/zhiyuan 56 57# out path 58export LICHEE_OUT_DIR=${OHOS_ROOT_PATH}/out 59export BUILD_ROOT_PATH=${LICHEE_OUT_DIR}/${PRODUCT_NAME} 60export LICHEE_KERN_DIR=${LICHEE_OUT_DIR}/KERNEL_OBJ/kernel/src_tmp/${LICHEE_KERN_VER} 61export KERNEL_BUILD_SCRIPT_DIR=${LICHEE_KERN_DIR} 62export KERNEL_BUILD_OUT_DIR=${LICHEE_KERN_DIR} 63export LICHEE_KERN_DEFCONF_ABSOLUTE=${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/configs/${LICHEE_KERN_DEFCONF} 64export LICHEE_PACK_OUT_DIR=/${LICHEE_OUT_DIR}/pack_out 65export LICHEE_PLAT_OUT=${LICHEE_OUT_DIR}/kernel/bsp 66 67# device soc path 68export DEVICE_COMPANY_PATH=${OHOS_ROOT_PATH}/device/soc/${IC_COMPANY} #device/soc/allwinner 69export DEVICE_CHIP_PATH=${DEVICE_COMPANY_PATH}/${LICHEE_IC} #device/soc/allwinner/t507 70 71# device board path 72export BOARD_COMPANY_PATH=${OHOS_ROOT_PATH}/device/board/${PRODUCT_COMPANY} #device/board/isoftstone 73export BOARD_PATH=${BOARD_COMPANY_PATH}/${PRODUCT_NAME} #device/board/isoftstone/zhiyuan 74export BOARD_KERNEL_PATH=${BOARD_PATH}/kernel #device/board/isoftstone/zhiyuan/kernel 75export LICHEE_TOP_DIR=${BOARD_KERNEL_PATH}/build #device/board/isoftstone/zhiyuan/kernel/build 76export LICHEE_BUILD_DIR=${LICHEE_TOP_DIR}/scripts #device/board/isoftstone/zhiyuan/kernel/build/scripts 77export LICHEE_TOOLS_DIR=${LICHEE_TOP_DIR}/tools #device/board/isoftstone/zhiyuan/kernel/build/tools 78export LICHEE_BSP_DIR=${BOARD_KERNEL_PATH}/driver #device/board/isoftstone/zhiyuan/kernel/driver 79export LICHEE_SRC_KERN_DEFCONF=${DEVICE_CHIP_PATH}/patches/config/${LICHEE_KERN_DEFCONF} 80export LICHEE_LOADER_DIR=${BOARD_PATH}/bootloader #device/board/isoftstone/zhiyuan/bootloader 81export LICHEE_CHIP_CONFIG_DIR=${LICHEE_LOADER_DIR} #device/board/isoftstone/zhiyuan/bootloader 82export LICHEE_BRANDY_OUT_DIR=${LICHEE_LOADER_DIR}/bin #device/board/isoftstone/zhiyuan/bootloader/bin 83export LICHEE_BOARD_CONFIG_DIR=${LICHEE_CHIP_CONFIG_DIR}/configs/${PRODUCT_NAME} #device/board/isoftstone/zhiyuan/bootloader/configs/zhiyuan 84[ -d "${LICHEE_BSP_DIR}" ] && export BSP_TOP=${LICHEE_KERN_DIR}/bsp/ 85 86 87 88pack_config_file=.packconfig 89 90export BUILD_CONFIG_FILE=${LICHEE_TOP_DIR}/${pack_config_file} 91 92 93function mk_error() 94{ 95 echo -e "\033[47;31mERROR: $*\033[0m" 96} 97 98function mk_warn() 99{ 100 echo -e "\033[47;34mWARN: $*\033[0m" 101} 102 103function mk_info() 104{ 105 echo -e "\033[47;30mINFO: $*\033[0m" 106} 107 108tag_version="kernel-v0.1" 109 110function check_env() 111{ 112 if [ -f $LICHEE_KERN_DIR/scripts/build.sh ]; then 113 KERNEL_BUILD_SCRIPT_DIR=$LICHEE_KERN_DIR 114 KERNEL_BUILD_SCRIPT=scripts/build.sh 115 KERNEL_BUILD_OUT_DIR=$LICHEE_KERN_DIR 116 KERNEL_STAGING_DIR=$LICHEE_KERN_DIR/output 117 else 118 KERNEL_BUILD_SCRIPT_DIR=$LICHEE_BUILD_DIR 119 KERNEL_BUILD_SCRIPT=mkkernel.sh 120 KERNEL_BUILD_OUT_DIR=$LICHEE_KERN_DIR 121 KERNEL_STAGING_DIR=$LICHEE_OUT_DIR/kernel/staging 122 fi 123} 124 125function load_kernel() 126{ 127 mk_info "start to load kernel" 128 129 if [ -d "$LICHEE_KERN_DIR" ]; then 130 rm -rf $LICHEE_KERN_DIR 131 fi 132 133 mkdir -p ${LICHEE_KERN_DIR} 134 135 #cp kernel to tmp kernel dir 136 git clone ${OHOS_KERNEL_SRC_PATH}/${LICHEE_KERN_VER} ${LICHEE_KERN_DIR} 137 mk_info "Finish copying ${LICHEE_LICHEE_KERN_VER} kernel to out path" 138 139 # enter kernel path to put sunxi patch 140 cd ${LICHEE_KERN_DIR} 141 git tag -a $tag_version -m "kernel tag" 142 143 mk_info "load kernel success" 144 145} 146 147ln_list=( 148 $OHOS_ROOT_PATH/drivers/hdf_core/adapter/khdf/linux drivers/hdf/khdf 149 $OHOS_ROOT_PATH/drivers/hdf_core/framework drivers/hdf/framework 150 $OHOS_ROOT_PATH/drivers/hdf_core/framework/include include/hdf 151 $OHOS_ROOT_PATH/drivers/hdf_core/interfaces/inner_api drivers/hdf/inner_api 152 $OHOS_ROOT_PATH/drivers/hdf_core/framework/include include/hdf 153) 154 155cp_list=( 156 $OHOS_ROOT_PATH/third_party/bounds_checking_function ./ 157 $OHOS_ROOT_PATH/device/soc/hisilicon/common/platform/wifi drivers/hdf/ 158 $OHOS_ROOT_PATH/third_party/FreeBSD/sys/dev/evdev drivers/hdf/ 159) 160 161function copy_external_compents() 162{ 163 for ((i=0; i<${#cp_list[*]}; i+=2)) 164 do 165 dst_dir=${cp_list[$(expr $i + 1)]}/${cp_list[$i]##*/} 166 mkdir -p $dst_dir 167 cp -arfL ${cp_list[$i]}/* $dst_dir/ 168 done 169} 170 171function ln_hdf_repos() 172{ 173 for ((i=0; i<${#ln_list[*]}; i+=2)) 174 do 175 ln -sf ${ln_list[$i]} ${ln_list[$(expr $i + 1)]} 176 done 177} 178 179function add_patch_to_kernel() 180{ 181 # get kernel patch path 182 183 # local patch_path=${OHOS_KERNEL_SRC_PATH}/patches/${LICHEE_KERN_VER}/zhiyuan_patch # Todo 184 # local kernel_patch=${patch_path}/kernel.patch # kernel patch 185 # local hdf_patch=${patch_path}/hdf.patch # hdf patch 186 # local kernel_config=${OHOS_KERNEL_SRC_PATH}/config/${LICHEE_KERN_VER}/arch/arm64/configs/${LICHEE_KERN_DEFCONF} # Todo 187 188 local patch_path=${DEVICE_CHIP_PATH}/patches # temp 189 local kernel_patch=${patch_path}/kernel/${LICHEE_KERN_VER}/kernel.patch # temp 190 local hdf_patch=${patch_path}/hdf/${LICHEE_KERN_VER}/hdf.patch # temp 191 local kernel_config=${patch_path}/config/${LICHEE_KERN_DEFCONF} # temp 192 193 echo "apply allwinner patch to kernel" 194 195 cd ${LICHEE_KERN_DIR} # enter kernel path 196 197 # add aw patch 198 if [ -f "$kernel_patch" ] ; then 199 git reset --hard $tag_version 200 git am ${kernel_patch} 201 else 202 mk_error "not found kernel patch: $kernel_patch" 203 exit 1 204 fi 205 206 # add bsp driver to kernel 207 if [ "x$LICHEE_KERN_VER" == "xlinux-5.10" ]; then 208 if [ -e "${LICHEE_BSP_DIR}" ]; then 209 rm -rf bsp 210 fi 211 cp -af ${LICHEE_BSP_DIR} bsp 212 fi 213 214#--------------------------------------------------------------------------- 215 # add hdf patch 216 if [ -f "$hdf_patch" ] ; then 217 git apply ${hdf_patch} 218 else 219 mk_error "not found hdf patch: $hdf_patch" 220 exit 1 221 fi 222#--------------------------------------------------------------------------- 223 224 # cp config to kernel 225 if [ -f "$kernel_config" ] ; then 226 cp -af ${kernel_config} ./arch/${LICHEE_ARCH}/configs/ 227 else 228 mk_error "not found kernel config: ${kernel_config}" 229 exit 1 230 fi 231 232 ln_hdf_repos 233 copy_external_compents 234 cd - 235 echo "put sunxi patches successfully" 236} 237 238function substitute_inittab() 239{ 240 241 declare console 242 env_cfg_dir=${LICHEE_CHIP_CONFIG_DIR}/configs/default/env.cfg 243 244 if [ ! -f ${env_cfg_dir} ];then 245 mk_info "not find env.cfg in ${env_cfg_dir}" 246 return; 247 fi 248 console=$(grep -m1 -o ${env_cfg_dir} -e 'console=\w\+') 249 console=$(sed -e 's/console=\(\w\+\).*/\1/g' <<< $console) 250 251 if [ ${console} ] 252 then 253 sed -ie "s/ttyS[0-9]*/${console}/g" $1 254 fi 255 256} 257 258function prepare_mkkernel() 259{ 260 # mark kernel .config belong to which platform 261 local config_mark="${KERNEL_BUILD_OUT_DIR}/.config.mark" 262 local board_dts="$LICHEE_BOARD_CONFIG_DIR/${LICHEE_KERN_VER}/board.dts" 263 264 if [ -f ${config_mark} ] ; then 265 local tmp=`cat ${config_mark}` 266 local tmp1="${LICHEE_CHIP}_${LICHEE_BOARD}_${LICHEE_PLATFORM}" 267 if [ ${tmp} != ${tmp1} ] ; then 268 mk_info "clean last time build for different platform" 269 if [ "x${LICHEE_KERN_DIR}" != "x" -a -d ${LICHEE_KERN_DIR} ]; then 270 (cd ${KERNEL_BUILD_SCRIPT_DIR} && [ -x ${KERNEL_BUILD_SCRIPT} ] && ./${KERNEL_BUILD_SCRIPT} "distclean") 271 rm -rf ${KERNEL_BUILD_OUT_DIR}/.config 272 echo "${LICHEE_CHIP}_${LICHEE_BOARD}_${LICHEE_PLATFORM}" > ${config_mark} 273 fi 274 fi 275 else 276 echo "${LICHEE_CHIP}_${LICHEE_BOARD}_${LICHEE_PLATFORM}" > ${config_mark} 277 fi 278} 279 280function mkkernel() 281{ 282 #source .buildconfig-bk 283 mk_info "build kernel ..." 284 285 LICHEE_KERN_SYSTEM="kernel_boot" 286 287 prepare_mkkernel 288 289 echo "(cd ${KERNEL_BUILD_SCRIPT_DIR} && [ -x ${KERNEL_BUILD_SCRIPT} ] && ./${KERNEL_BUILD_SCRIPT})" 290 (cd ${KERNEL_BUILD_SCRIPT_DIR} && [ -x ${KERNEL_BUILD_SCRIPT} ] && ./${KERNEL_BUILD_SCRIPT} $@) 291 [ $? -ne 0 ] && mk_error "build kernel Failed" && return 1 292 # copy files related to pack to platform out 293 294 cp ${KERNEL_BUILD_OUT_DIR}/vmlinux ${LICHEE_PLAT_OUT} 295 296 cp ${LICHEE_KERN_DIR}/scripts/dtc/dtc ${LICHEE_PLAT_OUT} 297 local dts_path=$LICHEE_KERN_DIR/arch/${LICHEE_ARCH}/boot/dts 298 [ "x${LICHEE_ARCH}" == "xarm64" ] && \ 299 dts_path=$dts_path/sunxi 300 rm -rf ${LICHEE_PLAT_OUT}/.sun*.dtb.*.tmp 301 cp $dts_path/.${LICHEE_CHIP}-*.dtb.d.dtc.tmp ${LICHEE_PLAT_OUT} 2>/dev/null 302 cp $dts_path/.${LICHEE_CHIP}-*.dtb.dts.tmp ${LICHEE_PLAT_OUT} 2>/dev/null 303 304 cp $dts_path/.board.dtb.d.dtc.tmp ${LICHEE_PLAT_OUT} 2>/dev/null 305 cp $dts_path/.board.dtb.dts.tmp ${LICHEE_PLAT_OUT} 2>/dev/null 306 307 mk_info "build kernel OK." 308 309 #delete board.dts 310 if [ "x${LICHEE_ARCH}" == "xarm64" ]; then 311 if [ -f ${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/boot/dts/sunxi/board.dts ]; then 312 rm ${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/boot/dts/sunxi/board.dts 313 fi 314 else 315 if [ -f ${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/boot/dts/board.dts ];then 316 rm ${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/boot/dts/board.dts 317 fi 318 fi 319} 320 321function delete_kernel_config() 322{ 323 if [ -f "${LICHEE_KERN_DIR}/.config" ] ; then 324 rm -rf ${LICHEE_KERN_DIR}/.config 325 fi 326 if [ -f "${LICHEE_KERN_DIR}/.config.mark" ] ; then 327 rm -rf ${LICHEE_KERN_DIR}/.config 328 fi 329 if [ -f "${LICHEE_KERN_DIR}/.config.old" ] ; then 330 rm -rf ${LICHEE_KERN_DIR}/.config 331 fi 332} 333 334function mklichee() 335{ 336 337 mk_info "----------------------------------------" 338 mk_info "build lichee ..." 339 mk_info "chip: $LICHEE_CHIP" 340 mk_info "platform: $LICHEE_PLATFORM" 341 mk_info "kernel: $LICHEE_KERN_VER" 342 mk_info "board: $LICHEE_BOARD" 343 mk_info "output: $LICHEE_PLAT_OUT" 344 mk_info "----------------------------------------" 345 346 check_output_dir 347 348 mkkernel 349 if [ $? -ne 0 ]; then 350 mk_info "mkkernel failed" 351 exit 1 352 fi 353} 354 355function check_output_dir() 356{ 357 #mkdir out directory: 358 if [ "x" != "x${LICHEE_PLAT_OUT}" ]; then 359 if [ ! -d ${LICHEE_PLAT_OUT} ]; then 360 mkdir -p ${LICHEE_PLAT_OUT} 361 fi 362 fi 363} 364 365allconfig=( 366LICHEE_IC 367LICHEE_IC_BIG 368LICHEE_KERN_VER 369LICHEE_PLATFORM 370LICHEE_LINUX_DEV 371LICHEE_CHIP 372LICHEE_ARCH 373LICHEE_BOARD 374LICHEE_FLASH 375LICHEE_CROSS_COMPILER 376LICHEE_ROOTFS 377LICHEE_KERN_DEFCONF 378LICHEE_KERN_DEFCONF_RELATIVE 379IC_COMPANY 380PRODUCT_PATH 381KERNEL_BUILD_SCRIPT 382LICHEE_KERN_SYSTEM 383OHOS_ROOT_PATH 384OHOS_KERNEL_SRC_PATH 385LICHEE_OUT_DIR 386LICHEE_KERN_DIR 387KERNEL_BUILD_SCRIPT_DIR 388KERNEL_BUILD_OUT_DIR 389KERNEL_STAGING_DIR 390LICHEE_KERN_DEFCONF_ABSOLUTE 391DEVICE_COMPANY_PATH 392DEVICE_CHIP_PATH 393LICHEE_TOP_DIR 394LICHEE_BUILD_DIR 395LICHEE_TOOLS_DIR 396LICHEE_DEVICE_DIR 397LICHEE_CHIP_CONFIG_DIR 398LICHEE_BOARD_CONFIG_DIR 399LICHEE_PRODUCT_CONFIG_DIR 400LICHEE_BRANDY_OUT_DIR 401LICHEE_PACK_OUT_DIR 402LICHEE_TOOLCHAIN_PATH 403LICHEE_PLAT_OUT 404BSP_TOP 405PRODUCT_NAME) 406 407function save_config() 408{ 409 local cfgkey=$1 410 local cfgval=$2 411 local cfgfile=$3 412 local dir=$(dirname $cfgfile) 413 [ ! -d $dir ] && mkdir -p $dir 414 cfgval=$(echo -e "$cfgval" | sed -e 's/^\s\+//g' -e 's/\s\+$//g') 415 if [ -f $cfgfile ] && [ -n "$(sed -n "/^\s*export\s\+$cfgkey\s*=/p" $cfgfile)" ]; then 416 sed -i "s|^\s*export\s\+$cfgkey\s*=\s*.*$|export $cfgkey=$cfgval|g" $cfgfile 417 else 418 echo "export $cfgkey=$cfgval" >> $cfgfile 419 fi 420} 421 422function save_all_config() 423{ 424 425 local cfgkey="" 426 local cfgval="" 427 428 for cfgkey in ${allconfig[@]}; do 429 [ "x$cfgkey" == "xCONFIG_SESSION_SEPARATE" ] && continue 430 cfgval="$(eval echo '$'${cfgkey})" 431 save_config "$cfgkey" "$cfgval" $BUILD_CONFIG_FILE 432 done 433 434} 435 436KERNEL_MAKE="make -C ${LICHEE_KERN_DIR} 0=${LICHEE_KERN_DIR} ARCH=${LICHEE_ARCH} " 437KERNEL_MAKE+="ARCH_PREFIX=${LICHEE_ARCH} " 438KERNEL_MAKE+="CROSS_COMPILE=${LICHEE_TOOLCHAIN_PATH}/bin/${LICHEE_GNU_NAME} " 439 440 441 442if [ "x$build_flag" == "xloadconfig" ]; then 443 mk_info "make loadconfig" 444 (cd ${LICHEE_KERN_DIR} && \ 445 ${KERNEL_MAKE} defconfig KBUILD_DEFCONFIG=$LICHEE_KERN_DEFCONF_RELATIVE 446 ) 447 exit 1 448elif [ "x$build_flag" == "xmenuconfig" ]; then 449 mk_info "make menuconfig" 450 cd ${LICHEE_KERN_DIR} && ${KERNEL_MAKE} menuconfig 451 exit 1 452elif [ "x$build_flag" == "xsaveconfig" ] ;then 453 mk_info "make saveconfig" 454 cd ${LICHEE_KERN_DIR} && ${KERNEL_MAKE} savedefconfig 455 cp $LICHEE_KERN_DIR/defconfig $LICHEE_KERN_DEFCONF_ABSOLUTE 456 cp $LICHEE_KERN_DIR/defconfig $LICHEE_SRC_KERN_DEFCONF 457 exit 1 458fi 459 460if [ "x$build_flag" == "xload" ] ; then 461 mk_info "Only load kernel" 462 load_kernel 463 add_patch_to_kernel 464 exit 0 465elif [ "x$build_flag" == "xkernel" ] ;then 466 mk_info "Only build kernel" 467else 468 load_kernel 469 add_patch_to_kernel 470fi 471 472delete_kernel_config 473 474check_env 475 476mklichee 477 478save_all_config 479 480mk_info "----------------------------------------" 481mk_info "build kernel OK." 482mk_info "----------------------------------------" 483 484 485