凌云实验室推出的ARM Linux物联网网关开发板IGKBoard(IoT Gateway Kit Board)项目源码
guowenxue
2022-09-05 211d57bdb4b4c14906a2e6b5702987ce5e05be72
Add yocto build shell script
1 files added
192 ■■■■■ changed files
yocto/build.sh 192 ●●●●● patch | view | raw | blame | history
yocto/build.sh
New file
@@ -0,0 +1,192 @@
#!/bin/bash
# This shell script used to build yocto for igkbaord
BOARD=igkboard
VERSION=honister
PACKDIR=`pwd`/yocto_packets
WORKDIR=`pwd`/workspace-${VERSION}
YOCTO_SRC=imx-yocto-bsp
PRJ_PATH=${WORKDIR}/${YOCTO_SRC}
SRV_URL=http://weike-iot.com:2211/yocto/
YOCTO_TAR=${YOCTO_SRC}-${VERSION}.tar.xz
set -e
# display in red
function pr_error() {
    echo -e "\033[40;31m --E-- $1 \033[0m"
}
# display in yellow
function pr_warn() {
    echo -e "\033[40;33m --W-- $1 \033[0m"
}
# display in green
function pr_info() {
    echo -e "\033[40;32m --I-- $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"
    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)
            tar -xf $tarball -C $dstpath
            ;;
        *.zip)
            unzip -qo $tarball -d $dstpath
            ;;
        *)
            pr_error "decompress Unsupport packet: $tarball"
            return 1;
            ;;
    esac
}
function do_fetch()
{
    if [ -d $YOCTO_SRC ] ; then
        pr_warn "$YOCTO_SRC fetched already."
        return 0;
    fi
    if [ ! -f tarballs/$YOCTO_TAR ] ; then
    mkdir -p tarballs/ && cd tarballs
    wget $SRV_URL/$YOCTO_TAR
    fi
    cd $WORKDIR
    do_unpack tarballs/$YOCTO_TAR
    cd ${PRJ_PATH}
}
function do_patch()
{
    if [ -d ${PRJ_PATH}/sources/meta-${BOARD} ] ; then
        pr_warn "$YOCTO_SRC patch already."
        return 0;
    fi
    cd ${PRJ_PATH}/sources
    cp -af ${WORKDIR}/../${VERSION}/meta-${BOARD} .
    sed -i "s|^DL_DIR.*|DL_DIR ?= \"${PACKDIR}\"|g"  meta-${BOARD}/conf/local.conf
    cd ${PRJ_PATH}
}
function do_build()
{
    TARGET=linuxsys-image
    pr_warn "Build ${YOCTO_SRC} for ${TARGET}."
    cd ${PRJ_PATH}
    if [ -f ${BOARD}/conf/local.conf ] ; then
        pr_info "$YOCTO_SRC source poky."
    source sources/poky/oe-init-build-env ${BOARD}
    else
        pr_info "$YOCTO_SRC source meta."
        MACHINE=${BOARD} source sources/meta-${BOARD}/tools/${BOARD}-setup.sh -b ${BOARD}
    fi
    bitbake linuxsys-image
    cd ${PRJ_PATH}
}
function do_install()
{
    pr_warn "List yocto build output images."
    cd $WORKDIR
    set -x
    ls $WORKDIR/imx-yocto-bsp/${BOARD}/tmp/deploy/images/igkboard/
    set +x
}
function do_clean()
{
    pr_warn "Clean ${YOCTO_SRC} source code"
    rm -rf $WORKDIR
}
function do_usage()
{
    echo ""
    echo "Usage:"
    echo "  $0 [-b] [-c] [-h]"
    echo "     -b: download and build $PRJ_NAME"
    echo "     -c: clean the source code"
    echo "     -h: show this help message"
    echo ""
    exit;
}
while getopts "bch" OPTNAME
do
    case "${OPTNAME}" in
        "b")
            break;
            ;;
        "c")
            do_clean
            exit;
            ;;
        "h")
            do_usage
            exit;
            ;;
        "*")
            do_usage
            exit;
            ;;
    esac
done
#defualt do build action
mkdir -p $WORKDIR
cd $WORKDIR
do_fetch
do_patch
do_build
do_install
exit;