Firefly开源社区
标题:
【开发基础】 FirePrime 内核编译脚本,将生成的文件放到指定目录,不在内核源码树里
[打印本页]
作者:
54zw
时间:
2016-5-24 14:57
标题:
【开发基础】 FirePrime 内核编译脚本,将生成的文件放到指定目录,不在内核源码树里
本帖最后由 54zw 于 2016-5-24 15:15 编辑
为什么这样做的起源:
由于看内核代码经常都需要在源码树中搜索各种各样的东西,所以不希望有太多的二进制文件在内核的源码树种,给搜索的时候造成视觉上的干扰,而且源码树里肯定会用代码管理工具比如git管理,不希望在git status的时候看到这些不必要的文件,当然可以在.gitinore里处理,但是不爽。
大产们都是怎么做的?(参考高通):
把代码编译的东西生成到制定目录去,比如android的out/target/product/vendor/xxxx这样的目录下,很多厂商都喜欢放在
out/target/product/vendor/obj/KERNEL 这个目录,有点不成文的规定了都,所以这里也制定生成的目录为
out/target/product/rk312x/obj/KERNEL/这个
原理:在编译内核的时候加上 O选项制定生成目录即可
比如fireprime的命令如下:
make -C kernel -j8 rk3128-fireprime.img O=/home/zerowaylin/fireprimes/out/target/product/rk312x/obj/KERNEL CROSS_COMPILE=/home/zerowaylin/fireprimes/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- ARCH=arm
O=后面指定的就是编译生成的目录
我的编辑内核,并且生成boot.img system.img的脚本如下:也可以去我的github上下载,地址:
点这里下载我的fireprime编译脚本genk
可以看到脚本前面有一段比较扯的mkdir cp的操作,这些是只在FirePrime代码才需要的,有兴趣的看官可以看下我github上我在高通和Freescale上用的genk的脚本,不会有这样的问题。编译代码需要liense 没仔细看是怎么玩的:( 有点讨厌,这样理应在make的时候也处理了,应该是Makefile没写好
###### compile kernel ###############
#rm -rvf op/obj/KERNEL/drivers/gpu/arm/mali400/ump/linux
#rm -rvf op/obj/KERNEL/drivers/gpu/arm/mali400/mali/linux
mkdir -p op/obj/KERNEL/drivers/gpu/arm/mali400/ump/linux
mkdir -p op/obj/KERNEL/drivers/gpu/arm/mali400/mali/linux
mkdir -p op/obj/KERNEL/drivers/net/wireless/rockchip_wlan/wifi_sys
cp -rf kernel/logo.bmp op/obj/KERNEL/
cp -rfd kernel/drivers/gpu/arm/mali400/ump/arch-default op/obj/KERNEL/drivers/gpu/arm/mali400/ump/
cp -rfd kernel/drivers/gpu/arm/mali400/ump/linux/license op/obj/KERNEL/drivers/gpu/arm/mali400/ump/linux/license
cp -rfd kernel/drivers/gpu/arm/mali400/mali/linux/license op/obj/KERNEL/drivers/gpu/arm/mali400/mali/linux/license
#make config
#make -C kernel fireprime_defconfig O=/home/zerowaylin/fireprimes/out/target/product/rk312x/obj/KERNEL CROSS_COMPILE=/home/zerowaylin/fireprimes/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- ARCH=arm
#make
make -C kernel -j8 rk3128-fireprime.img O=/home/zerowaylin/fireprimes/out/target/product/rk312x/obj/KERNEL CROSS_COMPILE=/home/zerowaylin/fireprimes/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- ARCH=arm
###### compile kernel ###############
############ start make images #################
#set -e
. build/envsetup.sh >/dev/null && setpaths
export PATH=$ANDROID_BUILD_PATHS:$PATH
TARGET_PRODUCT=`get_build_var TARGET_PRODUCT`
TARGET_HARDWARE=`get_build_var TARGET_BOARD_HARDWARE`
echo TARGET_PRODUCT=$TARGET_PRODUCT
echo TARGET_HARDWARE=$TARGET_HARDWARE
TARGET="withoutkernel"
IMG_TARGET='all'
echo IMG_TARGET=$IMG_TARGET , ota = $TARGET
IMAGE_PATH=rockdev/Image-$TARGET_PRODUCT
FSTYPE=ext4
echo system filesysystem is $FSTYPE
BOARD_CONFIG=device/rockchip/common/device.mk
KERNEL_SRC_PATH="$PWD/out/target/product/rk312x/obj/KERNEL"
echo $KERNEL_SRC_PATH
[ $(id -u) -eq 0 ] || FAKEROOT=fakeroot
BOOT_OTA="ota"
cp -rfv $KERNEL_SRC_PATH/arch/arm/boot/zImage /home/zerowaylin/fireprimes/out/target/product/rk312x/kernel
echo -n "create boot.img without kernel... "
[ -d $OUT/root ] && \
mkbootfs $OUT/root | minigzip > $OUT/ramdisk.img && \
truncate -s "%4" $OUT/ramdisk.img && \
rkst/mkkrnlimg $OUT/ramdisk.img $IMAGE_PATH/boot.img >/dev/null
echo "done."
echo -n "create system.img... "
system_size=`ls -l $OUT/system.img | awk '{print $5;}'`
[ $system_size -gt "0" ] || { echo "Please make first!!!" && exit 1; }
MAKE_EXT4FS_ARGS=" -L system -S $OUT/root/file_contexts -a system $IMAGE_PATH/system.img $OUT/system"
ok=0
while [ "$ok" = "0" ]; do
make_ext4fs -l $system_size $MAKE_EXT4FS_ARGS >/dev/null 2>&1 &&
tune2fs -c -1 -i 0 $IMAGE_PATH/system.img >/dev/null 2>&1 &&
ok=1 || system_size=$(($system_size + 5242880))
done
e2fsck -fyD $IMAGE_PATH/system.img >/dev/null 2>&1 || true
echo "done."
echo "Copy kenrel.img..."
echo "Copy resource.img..."
cp $KERNEL_SRC_PATH/kernel.img $IMAGE_PATH/
cp $KERNEL_SRC_PATH/resource.img $IMAGE_PATH/
chmod a+r -R $IMAGE_PATH/
############ end make images #################
复制代码
写在后面的话:
第一次使用的时候打开脚本里配置config的那行,只要不需要修改配置文件就可以注释掉那行。
把这个脚本放到你的环境变量里,就可以在android顶层目录里直接执行genk来编译
作者:
qinchwuhuai
时间:
2016-7-10 19:33
牛逼,我说每次编译完找不到文件了,谢谢
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/)
Powered by Discuz! X3.1