#!/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;