Script to Build Android Kernel Under Ubuntu

#!/bin/bash
#
ANDROID=”android-4.1.1_r6.1″
GCC=4.4.3

KERNEL=goldfish
KCONFIG=goldfish_armv7_defconfig

#GIT_SERVER=aosp.zhenglei.net
GIT_SERVER=127.0.0.1
GIT_PATH=”git/aosp”

PREBUILT=prebuilt
HOST=”linux-x86″
ARCH=”arm”
BUILD_PATH=”build”

function get_Tool {
LOC=”$1″
TAG=”$2″
VER=”$3″
TOOL_CHAIN=${ARCH}-eabi-${GCC}

if [ ! -d ${LOC}/${TOOL_CHAIN} ];then
if [ ! -d ${PREBUILT}/${TOOL_PATH} ];then
if [ -d ${PREBUILT} ];then
rm -rf ${PREBUILT}
fi
git clone git://${GIT_SERVER}/${GIT_PATH}/platform/prebuilt
fi

cd ${PREBUILT}
CUR_BRANCH=`git branch|grep “^* “|sed “s/^* //”`
if [ “${CUR_BRANCH}” != “${TAG}” ];then
#    git tag -l
git checkout -b ${TAG}
fi
cd ..

cp -r ${PREBUILT}/${HOST}/toolchain/${TOOL_CHAIN} ${LOC}

fi
TOOL_PATH=”`pwd`/${LOC}/${TOOL_CHAIN}”
}

function get_Kernel {
kernel=”$1″
if [ ! -d ${kernel} ];then
git clone git://${GIT_SERVER}/${GIT_PATH}/kernel/${kernel}.git
fi

cd ${kernel}
# git branch -a
CUR_BRANCH=`git branch|grep “^* “|sed “s/^* //”`
if [ “${CUR_BRANCH}” != “${kernel}” ];then
git checkout -t remotes/origin/android-${kernel}-2.6.29 -b ${kernel}
fi
if [ ! -d ../${BUILD_PATH}/${kernel} ];then
mkdir ../${BUILD_PATH}/${kernel}
git archive –format tar HEAD|tar x -C ../${BUILD_PATH}/${kernel}/
fi
cd ..
}

function build_Kernel {
config=$1
cd ${BUILD_PATH}/${kernel}
#ls -l arch/${ARCH}/configs/
make ${config}

START=`date +%s`
echo “Start to build at time:  $START”
echo “################################”
echo
echo

make -j4

echo
echo
echo “################################”
FINISH=`date +%s`
echo “Finish build at time: $FINISH”
echo
ELAPSED=`expr $FINISH – $START`
echo “Elapsed time: $ELAPSED”
cd ..
cd ..
}

##### Main ######
if [ ! -d ${BUILD_PATH} ];then
mkdir ${BUILD_PATH}
fi

rm -rf ${BUILD_PATH}/*

get_Tool $BUILD_PATH $ANDROID $GCC

export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
export PATH=${TOOL_PATH}/bin:$PATH

get_Kernel $KERNEL

build_Kernel $KCONFIG

# Output

cp ${BUILD_PATH}/${KERNEL}/arch/${ARCH}/boot/zImage ${BUILD_PATH}/${KERNEL}/

# Luanch emulator with build kernel
# emulator -kernel ${KERNEL}/zImage