guowenxue
2024-01-26 8e61092dcc0e3dd733d8632f6fd83eb75c332c87
kernel/build.sh
@@ -12,6 +12,9 @@
# binaries finally install path if needed
#INST_PATH=/tftp
# download taballs path
TARBALL_PATH=$PRJ_PATH/tarballs
# config file path
CONF_FILE=$TOP_PATH/config.json
@@ -34,25 +37,76 @@
    echo -e "\033[40;32m $1 \033[0m"
}
# decompress a packet to destination path
function do_unpack()
{
    tarball=$1
    dstpath=`pwd`
    if [[ $# == 2 ]] ; then
        dstpath=$2
    fi
    pr_info "decompress $tarball => $dstpath"
    mkdir -p $dstpath
    case $tarball in
        *.tar.gz)
            tar -xzf $tarball -C $dstpath
            ;;
        *.tar.bz2)
            tar -xjf $tarball -C $dstpath
            ;;
        *.tar.xz)
            tar -xJf $tarball -C $dstpath
            ;;
        *.tar.zst)
            tar -I zstd -xf $tarball -C $dstpath
            ;;
        *.tar)
            tar -xf $tarball -C $dstpath
            ;;
        *.zip)
            unzip -qo $tarball -d $dstpath
            ;;
        *)
            pr_error "decompress Unsupport packet: $tarball"
            return 1;
            ;;
    esac
}
# parser configure file and export environment variable
function export_env()
{
    export BOARD=`jq -r ".bsp.board" $CONF_FILE | tr 'A-Z' 'a-z'`
    export BSP_VER=`jq -r ".bsp.version" $CONF_FILE | tr 'A-Z' 'a-z'`
    export GIT_URL=`jq -r ".bsp.giturl" $CONF_FILE | tr 'A-Z' 'a-z'`
    export CROSS_COMPILE=`jq -r ".bsp.cortexAtool" $CONF_FILE | tr 'A-Z' 'a-z'`
    export BSP_URL=`jq -r ".bsp.giturl" $CONF_FILE`
    export CROSS_COMPILE=`jq -r ".bsp.cortexAtool" $CONF_FILE`
    export BRANCH=$BSP_VER
    export KER_PATH=$PRJ_PATH/linux-imx
    export KER_SRC=linux-imx
    export KER_PATH=$PRJ_PATH/$KER_SRC
    export JOBS=`cat /proc/cpuinfo | grep processor | wc -l`
    export ARCH=arm64
    export SRCS="linux-imx"
    if [[ $BOARD =~ mx6ull ]] ; then
        export ARCH=arm
    else
        export ARCH=arm64
    fi
}
function build_kernel()
{
    PATCH_FILE=$PRJ_PATH/patches/$BOARD/linux-imx-$BSP_VER.patch
    defconfig=${BOARD}_defconfig
    patch_file=$PRJ_PATH/patches/$BOARD/${KER_SRC}-$BSP_VER.patch
    cd $PRJ_PATH
@@ -60,12 +114,19 @@
        pr_info "linux kernel source code fetched already"
    else
        pr_info "start fetch linux kernel source code"
        git clone $GIT_URL/linux-imx.git -b $BRANCH --depth=1
        if [ -s $PATCH_FILE ] ; then
            pr_warn "do patch for $KER_PATH now..."
            cd $KER_PATH
            patch -p1 < $PATCH_FILE
        if [[ $BSP_URL =~ github.com ]] ; then
            git clone $BSP_URL/$KER_SRC.git -b $BRANCH --depth=1
        else
            mkdir -p $TARBALL_PATH
            # Download source code packet
            if [ ! -s $TARBALL_PATH/$KER_SRC.tar.xz ] ; then
                wget $BSP_URL/bsp/$BSP_VER/$KER_SRC.tar.xz -P $TARBALL_PATH
            fi
            # decompress source code packet
            do_unpack $TARBALL_PATH/$KER_SRC.tar.xz
        fi
    fi
@@ -73,7 +134,11 @@
    cd $KER_PATH
    defconfig=${BOARD}_defconfig
    if [ ! -s arch/$ARCH/configs/$defconfig -a -s $patch_file ] ; then
        pr_warn "do patch for $KER_PATH now..."
        patch -p1 < $patch_file
    fi
    if [ ! -s .config ] ; then
        make ${defconfig}
    fi
@@ -89,13 +154,25 @@
    if [ -d $PRFX_PATH ] ; then
        rm -rf $PRFX_PATH/*
    else
        mkdir -p $PRFX_PATH
    fi
    # Install image
    cp arch/arm64/boot/Image $PRFX_PATH
    cp arch/arm64/boot/dts/freescale/${BOARD}.dtb $PRFX_PATH
    mkdir -p $PRFX_PATH/overlays
    # Install system image and device tree binaries
    if [[ $BOARD =~ 6ull ]] ; then
        set -x
        cp -f arch/${ARCH}/boot/zImage $PRFX_PATH
        cp -f arch/${ARCH}/boot/dts/${BOARD}.dtb $PRFX_PATH
        cp -f arch/${ARCH}/boot/dts/${BOARD}/*.dtbo $PRFX_PATH/overlays
        set +x
    else
        set -x
        cp -f arch/${ARCH}/boot/Image $PRFX_PATH
        cp -f arch/${ARCH}/boot/dts/freescale/${BOARD}.dtb $PRFX_PATH
        #cp -f arch/${ARCH}/boot/dts/freescale/${BOARD}/*.dtbo $PRFX_PATH/overlays
        set +x
    fi
    # Install kernel modules
    make modules_install INSTALL_MOD_PATH=$PRFX_PATH INSTALL_MOD_STRIP=1
@@ -106,8 +183,8 @@
    if [[ -n "$INST_PATH" && -w $INST_PATH ]] ; then
        pr_info "install linux kernel to '$INST_PATH'"
        cp $PRFX_PATH/Image $INST_PATH
        cp $PRFX_PATH/${BOARD}.dtb $INST_PATH
        cp -f $PRFX_PATH/*Image $INST_PATH
        cp -f $PRFX_PATH/${BOARD}.dtb $INST_PATH
    fi
}
@@ -124,11 +201,8 @@
{
    cd $PRJ_PATH
    for d in $SRCS
    do
        rm -rf $PRJ_PATH/$d
    done
    rm -rf $PRJ_PATH/$KER_SRC
    rm -rf $PRJ_PATH/tarballs
    rm -rf $PRFX_PATH
}