#!/bin/bash # This shell script used auto download bootloader source code and do cross compile source ../scripts/setup_env.sh PRJ_PATH=`pwd` KERNEL_SRC=linux-imx patch_file=${PRJ_PATH}/patch/linux-imx-${BSP_VER}.patch arch=arm defconf=${BOARD}_defconfig drvpath=${PRJ_PATH}/../images/drivers set -u set -e function do_fetch() { if [ -d $KERNEL_SRC ] ; then pr_warn "$KERNEL_SRC fetched already." return 0; fi do_fetch_json $JSON_CONF KERNEL_SRC $KERNEL_SRC } function do_patch() { cd ${KERNEL_SRC} if [ ! -s arch/arm/configs/$defconf -a -s $patch_file ] ; then pr_warn "Patch for ${KERNEL_SRC} source code" patch -p1 < $patch_file fi pr_warn "Modify cross compiler in Makefile: $CROSS_TOOL" sed -i -e "s|^CROSS_COMPILE.*|CROSS_COMPILE?=${CROSS_TOOL}|g" Makefile cd ${PRJ_PATH} } function do_build() { pr_warn "Build for ${KERNEL_SRC} source code" cd ${KERNEL_SRC} make $defconf make -j ${JOBS} make modules_install INSTALL_MOD_PATH=$drvpath INSTALL_MOD_STRIP=1 cd ${PRJ_PATH} } function do_install() { pr_warn "Install linux kernel image" cd ${KERNEL_SRC} do_install_json $JSON_CONF "INSTALL" cd ${PRJ_PATH} } function do_clean() { pr_warn "Clean ${KERNEL_SRC} source code" cd ${KERNEL_SRC} make distclean cd ${PRJ_PATH} } function gen_patch() { pr_warn "Clean ${KERNEL_SRC} source code" cd ${KERNEL_SRC} if [ -f .config ] ; then make savedefconfig mv defconfig arch/arm/configs/$defconf fi make distclean cd - mv ${KERNEL_SRC} ${KERNEL_SRC}-${BSP_VER} pr_warn "Fetch orignal source code" do_fetch pr_warn "Generate ${KERNEL_SRC} patch file" set +e diff -Nuar --no-dereference -x logo_linux_clut224.ppm ${KERNEL_SRC} ${KERNEL_SRC}-${BSP_VER} > $patch_file rm -rf ${KERNEL_SRC} mv ${KERNEL_SRC}-${BSP_VER} ${KERNEL_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; ;; "h") do_usage exit; ;; "*") do_usage exit; ;; esac done #default do build action do_fetch do_patch do_build do_install exit;