#!/bin/bash
|
# This shell script used auto download bootloader source code and do cross compile
|
|
source ../scripts/setup_env.sh
|
|
KERNEL_SRC=linux-imx
|
|
patch_file=$(eval echo `jq -r ".KERNEL_SRC.PATCH" $JSON_CONF`)
|
arch=$(eval echo `jq -r ".CONFIG.ARCH" $JSON_CONF`)
|
defconf=$(eval echo `jq -r ".CONFIG.DEFCONF" $JSON_CONF`)
|
drvpath=$(eval echo `jq -r ".CONFIG.DRVPATH" $JSON_CONF`)
|
|
set -u
|
set -e
|
|
function do_fetch()
|
{
|
if [ -d $KERNEL_SRC ] ; then
|
pr_warn "$KERNEL_SRC fetched already."
|
return 0;
|
fi
|
|
do_fetch_json $JSON_CONF KERNEL_SRC $KERNEL_SRC
|
rm -rf *.tar*
|
}
|
|
function do_patch()
|
{
|
cd ${KERNEL_SRC}
|
|
if [ ! -s arch/arm/configs/$defconf -a -s $patch_file ] ; then
|
pr_warn "Patch for ${KERNEL_SRC} source code"
|
patch -p1 < $patch_file
|
fi
|
|
pr_warn "Modify cross compiler in Makefile: $CROSS_TOOL"
|
sed -i -e "s|^CROSS_COMPILE=.*|CROSS_COMPILE?=${CROSS_TOOL}|g" Makefile
|
|
cd ${PRJ_PATH}
|
}
|
|
function do_build()
|
{
|
pr_warn "Build for ${KERNEL_SRC} source code"
|
|
cd ${KERNEL_SRC}
|
|
make $defconf
|
make -j ${JOBS}
|
make modules_install INSTALL_MOD_PATH=$drvpath INSTALL_MOD_STRIP=1
|
|
cd ${PRJ_PATH}
|
}
|
|
|
function do_install()
|
{
|
pr_warn "Install linux kernel image"
|
|
cd ${KERNEL_SRC}
|
|
do_install_json $JSON_CONF "INSTALL"
|
|
cd ${PRJ_PATH}
|
}
|
|
function do_clean()
|
{
|
pr_warn "Clean ${KERNEL_SRC} source code"
|
|
cd ${KERNEL_SRC}
|
|
make distclean
|
|
cd ${PRJ_PATH}
|
}
|
|
function gen_patch()
|
{
|
pr_warn "Clean ${KERNEL_SRC} source code"
|
|
cd ${KERNEL_SRC}
|
if [ -f .config ] ; then
|
make savedefconfig
|
mv defconfig arch/arm/configs/$defconf
|
fi
|
make distclean
|
cd -
|
|
mv ${KERNEL_SRC} ${KERNEL_SRC}-${BOARD}
|
|
pr_warn "Fetch orignal source code"
|
do_fetch
|
|
pr_warn "Generate ${KERNEL_SRC} patch file"
|
|
set +e
|
diff -Nuar -x "include-prefixes" -x logo_linux_clut224.ppm ${KERNEL_SRC} ${KERNEL_SRC}-${BOARD} > $patch_file
|
|
rm -rf ${KERNEL_SRC}
|
mv ${KERNEL_SRC}-${BOARD} ${KERNEL_SRC}
|
}
|
|
function do_usage()
|
{
|
echo ""
|
echo "Usage:"
|
echo " $0 [-b] [-p] [-c] [-h]"
|
echo " -b: download and build $PRJ_NAME"
|
echo " -p: generate $PRJ_NAME patch file"
|
echo " -c: clean the source code"
|
echo " -h: show this help message"
|
echo ""
|
exit;
|
}
|
|
while getopts "bpch" OPTNAME
|
do
|
case "${OPTNAME}" in
|
"b")
|
break;
|
;;
|
|
"p")
|
gen_patch
|
exit;
|
;;
|
|
"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;
|