#!/bin/bash INST_DRIVER=1 PRJ_PATH=`pwd` IMG_PATH=${PRJ_PATH}/../images/boot BOARD=igkboard 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=arch/arm/configs/${BOARD}_defconfig 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} make ${BOARD}_defconfig make -j ${JOBS} cd ${PRJ_PATH} } function do_install() { msg_banner "Install linux kernel image" cd ${LINUX_SRC} mkdir -p ${IMG_PATH} set -x 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 set +x if [ $INST_DRIVER != 0 ] ;then make modules_install INSTALL_MOD_PATH=${PRJ_PATH}/../rootfs/driver INSTALL_MOD_STRIP=1 fi cd ${PRJ_PATH} } function do_clean() { msg_banner "Clean ${LINUX_SRC} source code" cd ${LINUX_SRC} make distclean cd ${PRJ_PATH} } function gen_patch() { msg_banner "Clean ${LINUX_SRC} source code" cd ${LINUX_SRC} make savedefconfig mv defconfig ${CONF_FILE} make distclean cd - mv ${LINUX_SRC} ${LINUX_SRC}-${BOARD} do_fetch msg_banner "Generate ${LINUX_SRC} patch file" set +e diff -Nuar -x "include-prefixes" -x logo_linux_clut224.ppm ${LINUX_SRC} ${LINUX_SRC}-${BOARD} > ${LINUX_SRC}-${BOARD}.patch rm -rf ${LINUX_SRC} mv ${LINUX_SRC}-${BOARD} ${LINUX_SRC} } function do_usage() { echo "" echo "Usage:" echo " $0 [-b] [p] [-c] [-h]" echo " -b: download and build $PRJ_NAME" echo " -p: generate $PRJ_NAME patch file" echo " -c: clean the source code" echo " -h: show this help message" echo "" exit; } while getopts "bpch" OPTNAME do case "${OPTNAME}" in "b") break; ;; "p") gen_patch exit; ;; "c") do_clean exit; ;; "*") do_usage exit; ;; esac done # Default do build action do_fetch do_patch do_build do_install exit;