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