#!/bin/bash # This shell script used to build yocto for igkbaord BOARD=igkboard # https://wiki.yoctoproject.org/wiki/Releases # Version should be: hardknott(3.3) honister(3.4) kirkstone(4.0) VERSION=kirkstone # i.MX BSP release version: # https://www.nxp.com/design/software/embedded-software/i-mx-software/embedded-linux-for-i-mx-applications-processors:IMXLINUX BSPVER=lf-5.15.71-2.2.0 PACKDIR=`pwd`/yocto_packets BUILDIR=$BOARD PRJ_PATH=`pwd` WORKDIR=${PRJ_PATH}/${VERSION}-${BSPVER} SRV_URL=http://master.iot-yun.club:2211/imx/bsp/yocto/ #SRV_URL=http://127.0.0.1:2211/imx/bsp/yocto/ YOCTO_TAR=imx-yocto-bsp-${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 ${WORKDIR}/sources/meta-imx/ ] ; then pr_warn "Yocto ${VERSION} fetched already." return 0; fi pr_info "start fetch Yocto ${VERSION}" cd ${PRJ_PATH} if [ ! -f tarballs/$YOCTO_TAR ] ; then mkdir -p tarballs/ && cd tarballs wget $SRV_URL/$YOCTO_TAR fi cd ${PRJ_PATH} do_unpack tarballs/$YOCTO_TAR mv imx-yocto-bsp $WORKDIR } function do_patch() { if [ -d ${WORKDIR}/sources/meta-${BOARD} ] ; then pr_warn "Yocto ${VERSION} patch already." return 0; fi pr_info "start patch Yocto ${VERSION}" cd ${WORKDIR}/sources cp -af ${WORKDIR}/../meta-${BOARD}/${VERSION}-${BSPVER} meta-${BOARD} cd ${WORKDIR} } function do_build() { TARGET=linuxsys-image pr_warn "Build Yocto ${VERSION} for ${TARGET}." cd ${WORKDIR} if [ -f ${BUILDIR}/conf/local.conf ] ; then pr_info "Yocto ${VERSION} source poky." source sources/poky/oe-init-build-env ${BUILDIR} else pr_info "Yocto ${VERSION} source meta." MACHINE=${BOARD} source sources/meta-${BOARD}/tools/${BOARD}-setup.sh -b ${BUILDIR} fi sed -i "s|^DL_DIR.*|DL_DIR ?= \"${PACKDIR}\"|g" conf/local.conf #bitbake -c clean u-boot-imx linux-imx ${TARGET} bitbake ${TARGET} cd ${WORKDIR} } function do_install() { pr_warn "List yocto build output images." cd $WORKDIR set -x ls $WORKDIR/${BUILDIR}/tmp/deploy/images/${BOARD}/ set +x } function do_clean() { pr_warn "Clean Yocto ${VERSION} 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 do_fetch do_patch do_build do_install exit;