#!/bin/bash INST_DRIVER=0 PRJ_PATH=`pwd` IMG_PATH=${PRJ_PATH}/../images/bin BOARD=imx6ull CROSS_TOOL=/opt/buildroot/cortexA7/bin/arm-linux- # linux kernel tarball path and branch TAR_PATH=${PRJ_PATH}/../tarball BSP_BRANCH=lf-5.10.52-2.1.0 BOOT=emmc LINUX_SRC=linux-imx PATCH_FILE=${PRJ_PATH}/patch/${LINUX_SRC}-${BOARD}.patch CONF_FILE=.cfg-${BOARD} JOBS=`cat /proc/cpuinfo | grep processor | wc -l` set -u set -e STAGE=0 function msg_banner() { STAGE=`expr $STAGE + 1` echo "" echo "+---------------------------------------------+" printf " Stage $STAGE: $1\n" echo "+---------------------------------------------+" echo "" } function do_fetch() { msg_banner "Fetch ${LINUX_SRC} source code" if [ -d ${LINUX_SRC} ] ; then printf "\n\n -- ${LINUX_SRC} fetched already -- \n\n" return 0; fi printf "\n -- decompress ${LINUX_SRC}-${BSP_BRANCH}.tar.xz now ... -- \n\n" tar -xJf ${TAR_PATH}/${LINUX_SRC}-${BSP_BRANCH}.tar.xz } function do_patch() { msg_banner "Patch for ${LINUX_SRC} source code" cd ${LINUX_SRC} if [ ! -s $CONF_FILE -a -s $PATCH_FILE ] ; then patch -p1 < $PATCH_FILE fi printf "\n\nModify cross compiler in Makefile: $CROSS_TOOL\n\n" sed -i -e "s|^CROSS_COMPILE=.*|CROSS_COMPILE=${CROSS_TOOL}|g" Makefile cd ${PRJ_PATH} } function do_build() { msg_banner "Build for ${LINUX_SRC} source code" cd ${LINUX_SRC} if [ ! -f .config ] ; then cp $CONF_FILE .config fi make -j ${JOBS} cd ${PRJ_PATH} } function do_install() { msg_banner "Install linux kernel image" cd ${LINUX_SRC} mkdir -p ${IMG_PATH} cp arch/arm/boot/zImage ${IMG_PATH} cp arch/arm/boot/dts/imx6ul-14x14-evk-emmc.dtb ${IMG_PATH}/${BOARD}-${BOOT}.dtb cp arch/arm/boot/zImage /tftp cp arch/arm/boot/dts/imx6ul-14x14-evk-emmc.dtb /tftp/${BOARD}-${BOOT}.dtb if [ $INST_DRIVER != 0 ] ;then make modules_install INSTALL_MOD_PATH=${PRJ_PATH}/../rootfs INSTALL_MOD_STRIP=1 fi cd ${PRJ_PATH} } function do_clean() { msg_banner "Clean ${LINUX_SRC} source code" cd ${LINUX_SRC} cp .config $CONF_FILE make distclean cd ${PRJ_PATH} } function gen_patch() { do_clean mv ${LINUX_SRC} ${LINUX_SRC}-${BOARD} do_fetch msg_banner "Generate ${LINUX_SRC} patch file" set +e diff -Nuar ${LINUX_SRC} ${LINUX_SRC}-${BOARD} > ${LINUX_SRC}-${BOARD}.patch rm -rf ${LINUX_SRC} mv ${LINUX_SRC}-${BOARD} ${LINUX_SRC} } if [[ $# == 1 ]] && [[ $1 == "patch" ]] ; then gen_patch exit 0; fi do_fetch do_patch do_build do_install