用shell命令写打印log信息脚本
下面让RK的编译脚本在编译u-boot kernel android update.img时分别用文件uboot.log kernel.log android.log package.log记录编译时产生的log信息
修改后的脚本如下:
#!/bin/bash
# if want to build u-boot :./build.sh -U
# if want to build kernel :./build.sh -K
# if want to build android :./build.sh -A
# if want to build update.img : ./build.sh -u
usage()
{
echo "USAGE: [-o] [-u] [-v VERSION_NAME]"
echo "No ARGS means use default build option"
echo "WHERE: -o = generate ota package "
echo " -u = generate update.img "
echo " -v = set build version name for output image folder"
echo " -U = build u-boot"
echo " -K = build kernel"
echo " -A = build android "
exit 1
}
BUILD_UBOOT=false
BUILD_KERNEL=false
BUILD_ANDROID=false
BUILD_UPDATE_IMG=false
BUILD_OTA=false
BUILD_VARIANT=userdebug
########################下面是LOG创建定义所用到的宏######################
CUR_PATH=`pwd` #当前路径即代码根目录路径
LOG_FLID=$CUR_PATH/LOG #下面我会使用mkdir命令在代码根目录路径下创建一个LOG目录
UBOOT_LOG_FILE=$LOG_FLID/uboot.log #下面我会使用touch命令在LOG目录下创建uboot.log
KERNEL_LOG_FILE=$LOG_FLID/kernel.log #下面我会使用touch命令在LOG目录下创建kernel.log
ANDROID_LOG_FILE=$LOG_FLID/android.log #下面我会使用touch命令在LOG目录下创建android.log
PACKAGE_LOG_FILE=$LOG_FLID/package.log #下面我会使用touch命令在LOG目录下创建package.log
UBOOT_LOG=`echo "tee -a $UBOOT_LOG_FILE"` # tee -a 将log信息重定向追加到uboot.log
KERNEL_LOG=`echo "tee -a $KERNEL_LOG_FILE"` # tee -a 将log信息重定向追加到kernel.log
ANDROID_LOG=`echo "tee -a $ANDROID_LOG_FILE"` # tee -a 将log信息重定向追加到android.log
PACKAGE_LOG=`echo "tee -a $PACKAGE_LOG_FILE"` # tee -a 将log信息重定向追加到package.log
################################## log文件创建函数#########################################
########################## add :create log function start #####################################
function log_flie_creare(){
echo "------> current path: $CUR_PATH"
if [ -d "$LOG_FLID"]; then #如果根目录存在LOG目录
echo "-----> clean log"
rm -rvf $LOG_FLID/* #删除LOG目录下所有内容
else #如果根目录不存在LOG目录
echo "-----> create log folder"
mkdir $LOG_FLID #在根目录下创建LOG目录
fi
touch $UBOOT_LOG_FILE #在LOG目录下创建uboot.log
touch $KERNEL_LOG_FILE #在LOG目录下创建kernel.log
touch $ANDROID_LOG_FILE #在LOG目录下创建android.log
touch $PACKAGE_LOG_FILE #在LOG目录下创建package.log
}
######################### add :create log function end ########################################
# check pass argument
while getopts "UKAouv:" arg
do
case $arg in
U)
echo "will build u-boot"
BUILD_UBOOT=true
;;
K)
echo "will build kernel"
BUILD_KERNEL=true
;;
A)
echo "will build android"
BUILD_ANDROID=true
;;
o)
echo "will build ota package"
BUILD_OTA=true
;;
u)
echo "will build update.img"
BUILD_UPDATE_IMG=true
;;
v)
BUILD_VARIANT=$OPTARG
;;
?)
usage ;;
esac
done
log_flie_creare #编译前执行log文件创建函数
source build/envsetup.sh >/dev/null && setpaths
TARGET_PRODUCT=`get_build_var TARGET_PRODUCT`
#set jdk version
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
# source environment and chose target product
DEVICE=`get_build_var TARGET_PRODUCT`
UBOOT_DEFCONFIG=rk3288_secure_defconfig
KERNEL_DEFCONFIG=rockchip_defconfig
KERNEL_DTS=rk3288-evb-android-rk808-edp-lvds
echo "KERNEL_DTS : $KERNEL_DTS"
PACK_TOOL_DIR=RKTools/linux/Linux_Pack_Firmware
IMAGE_PATH=rockdev/Image-$TARGET_PRODUCT
export PROJECT_TOP=`gettop`
lunch $DEVICE-$BUILD_VARIANT | $ANDROID_LOG
PLATFORM_VERSION=`get_build_var PLATFORM_VERSION`
DATE=$(date +%Y%m%d.%H%M)
STUB_PATH=Image/"$KERNEL_DTS"_"$PLATFORM_VERSION"_"$DATE"_RELEASE_TEST_$BUILD_VARIANT
STUB_PATH="$(echo $STUB_PATH | tr '[:lower:]' '[:upper:]')"
export STUB_PATH=$PROJECT_TOP/$STUB_PATH
export STUB_PATCH_PATH=$STUB_PATH/PATCHES
# build uboot
if [ "$BUILD_UBOOT" = true ] ; then
############ UBOOT_LOG 将log信息重定向追加到uboot.log#########################################
echo "start build uboot" | $UBOOT_LOG
cd u-boot && make clean | $UBOOT_LOG
make $UBOOT_DEFCONFIG | $UBOOT_LOG
./mkv7.sh | $UBOOT_LOG
cd -
if [ $? -eq 0 ]; then
echo "Build uboot ok!" | $UBOOT_LOG
else
echo "Build uboot failed!" | $UBOOT_LOG
exit 1
fi
fi
# build kernel
if [ "$BUILD_KERNEL" = true ] ; then
################################ #KERNEL_LOG 将log信息重定向追加到kernel.log##################
echo "Start build kernel" | $KERNEL_LOG
cd kernel && make clean | $KERNEL_LOG
make ARCH=arm $KERNEL_DEFCONFIG | $KERNEL_LOG
make ARCH=arm $KERNEL_DTS.img -j24 | $KERNEL_LOG
cd -
if [ $? -eq 0 ]; then
echo "Build kernel ok!" | $KERNEL_LOG
else
echo "Build kernel failed!" | $KERNEL_LOG
exit 1
fi
fi
# build android
if [ "$BUILD_ANDROID" = true ] ; then
##################################### ANDROID_LOG 将log信息重定向追加到android.log#######################################
echo "start build android" | $ANDROID_LOG
make installclean -j8 | $ANDROID_LOG
make -j24 | $ANDROID_LOG
if [ $? -eq 0 ]; then
echo "Build android ok!" | $ANDROID_LOG
else
echo "Build android failed!" | $ANDROID_LOG
exit 1
fi
fi
if [ "$BUILD_VARIANT" = user ] ; then
if [ -e $PROJECT_TOP/build_back/system/build.prop ] ; then
echo "restore system/build.prop"
cp $PROJECT_TOP/build_back/system/build.prop $OUT/system/
else
echo "backup system/build.prop"
mkdir -p $PROJECT_TOP/build_back/system
cp $OUT/system/build.prop $PROJECT_TOP/build_back/system/build.prop
fi
if [ -e $PROJECT_TOP/build_back/system/etc/prop.default ] ; then
echo "restore system/etc/prop.default"
cp $PROJECT_TOP/build_back/system/etc/prop.default $OUT/system/etc/
else
echo "backup system/etc/prop.default"
mkdir -p $PROJECT_TOP/build_back/system/etc
cp $OUT/system/etc/prop.default $PROJECT_TOP/build_back/system/etc/prop.default
fi
if [ -e $PROJECT_TOP/build_back/vendor/build.prop ] ; then
echo "restore vendor/build.prop"
cp $PROJECT_TOP/build_back/vendor/build.prop $OUT/vendor/
else
echo "backup vendor/build.prop"
mkdir -p $PROJECT_TOP/build_back/vendor
cp $OUT/vendor/build.prop $PROJECT_TOP/build_back/vendor/build.prop
fi
if [ -e $PROJECT_TOP/build_back/vendor/default.prop ] ; then
echo "restore vendor/default.prop"
cp $PROJECT_TOP/build_back/vendor/default.prop $OUT/vendor/
else
echo "backup vendor/default.prop"
mkdir -p $PROJECT_TOP/build_back/vendor
cp $OUT/vendor/default.prop $PROJECT_TOP/build_back/vendor/default.prop
fi
fi
# mkimage.sh
echo "make and copy android images" | $PACKAGE_LOG
./mkimage.sh | $PACKAGE_LOG
if [ $? -eq 0 ]; then
echo "Make image ok!" | $PACKAGE_LOG
else
echo "Make image failed!" | $PACKAGE_LOG
exit 1
fi
# build ota_package
if [ "$BUILD_OTA" = true ] ; then
INTERNAL_OTA_PACKAGE_OBJ_TARGET=obj/PACKAGING/target_files_intermediates/$TARGET_PRODUCT-target_files-*.zip
INTERNAL_OTA_PACKAGE_TARGET=$TARGET_PRODUCT-ota-*.zip
echo "generate ota package"
make otapackage -j4
./mkimage.sh ota
cp $OUT/$INTERNAL_OTA_PACKAGE_TARGET $IMAGE_PATH/
cp $OUT/$INTERNAL_OTA_PACKAGE_OBJ_TARGET $IMAGE_PATH/
fi
# build update_image
if [ "$BUILD_UPDATE_IMG" = true ] ; then
#########################################PACKAGE_LOG 将log信息重定向追加到package.log##############
mkdir -p $PACK_TOOL_DIR/rockdev/Image/ | $PACKAGE_LOG
cp -f $IMAGE_PATH/* $PACK_TOOL_DIR/rockdev/Image/ | $PACKAGE_LOG
echo "Make update.img" | $PACKAGE_LOG
cd $PACK_TOOL_DIR/rockdev && ./mkupdate.sh | $PACKAGE_LOG
if [ $? -eq 0 ]; then
echo "Make update image ok!" | $PACKAGE_LOG
else
echo "Make update image failed!" | $PACKAGE_LOG
exit 1
fi
cd -
mv $PACK_TOOL_DIR/rockdev/update.img $IMAGE_PATH/ | $PACKAGE_LOG
rm $PACK_TOOL_DIR/rockdev/Image -rf | $PACKAGE_LOG
fi
mkdir -p $STUB_PATH | $PACKAGE_LOG
#Generate patches
mkdir -p $STUB_PATCH_PATH && .repo/repo/repo forall -c "git diff > local_diff.patch" && (find . -name local_diff.patch -type f -size 0c| xargs rm) && (find . -path ./IMAGE -prune -o -name local_diff.patch | cpio -pdv $STUB_PATCH_PATH/)
if [ -d $STUB_PATCH_PATH/IMAGE ]; then
rm $STUB_PATCH_PATH/IMAGE -rf
fi
#Copy stubs
# cp commit_id.xml $STUB_PATH/manifest_${DATE}.xml
mkdir -p $STUB_PATH/kernel | $PACKAGE_LOG
cp kernel/.config $STUB_PATH/kernel | $PACKAGE_LOG
cp kernel/vmlinux $STUB_PATH/kernel | $PACKAGE_LOG
mkdir -p $STUB_PATH/IMAGES/ | $PACKAGE_LOG
cp $IMAGE_PATH/* $STUB_PATH/IMAGES/ | $PACKAGE_LOG
cp build.sh $STUB_PATH/build.sh | $PACKAGE_LOG
#Save build command info
echo "UBOOT: defconfig: $UBOOT_DEFCONFIG" >> $STUB_PATH/build_cmd_info | $PACKAGE_LOG
echo "KERNEL: defconfig: $KERNEL_DEFCONFIG, dts: $KERNEL_DTS" >> $STUB_PATH/build_cmd_info | $PACKAGE_LOG
echo "ANDROID:$DEVICE-$BUILD_VARIANT" >> $STUB_PATH/build_cmd_info | $PACKAGE_LOG