AOSP如何单独build kernel
解决方案
如果只是修改kernel 中单一模块,如何快速build kernel模块?
ARCH : 指的是所编译的类型 (arm 、arm64 或者x86)
project:指的是所要编译的Project name
1,build 对应的模块
cd kernel-3.10
mkdir out
make ARCH=arm64 O=out $project_defconfig
make ARCH=arm64 -j8 O=out [modules]
例如,build eccci module,
cd kernel-3.10
mkdir out
make ARCH=arm64 O=out $project_defconfig
make ARCH=arm64 -j8 O=out drivers/misc/mediatek/eccci/
生成image 文件, 如果包含dtb(device tree)将下面命令中的Image换成Image.gz-dtb
make -j8 O=out Image (32bit 处理器请使用zImage 或者zImage-dtb)
如果要new 整个kernel ,请执行以下命令:
cd kernel-3.10
mkdir out
make ARCH=arm64 O=out $project_defconfig
make ARCH=arm64 -j8 O=out
(之前有new 过kernel ,再次new kernel 的时间大概为1分钟)
对于6752和6582平台需要加header,所以请继续执行2,4步
对于6795、6735等平台不需要加header,所以请继续执行3,4步
2,对生成image文件加header
Step1:将如下code存为mkimage.sh
Step2:将mkimage.sh放在alps/kernel目录,例如alps/kernel-3.10
Step3:执行:./mkimage.sh project_name target_arch [dtb]
Example:
support device tree:source mkimage.sh k6752v1_64 arm64 dtb
no support device tree:source mkimage.sh k6752v1_64 arm64
#!/bin/bash
if [ -z "$1" ]; then
echo -e "\n[error]: project is empty ,you can input help."
echo -e "example: source mkimage.sh help\n"
elif [ "$1" = "help" ]; then
echo -e "\nUsage: mkimage.sh <project_name> <target_arch> <dtb> \n"
echo "<project_name>: project name,eg: k6752v1_64"
echo "<target_arch>: platform is arm or arm64,"
echo -e "<dtb>: if support device tree,you can input to check\n"
echo "eample:"
echo "support device tree:source mkimage.sh k6752v1_64 arm64 dtb "
echo -e "no support device:source mkimage.sh k6752v1_64 arm64\n"
else
project=$1
target_arch=$2
dtb=$3
if [ "$target_arch" = "arm" ]; then
if [ "$dtb" = "dtb" ]; then
target_prebuilt_kernel=out/arch/$target_arch/boot/zImage-dtb
else
target_prebuilt_kernel=out/arch/$target_arch/boot/zImage
fi
else
if [ "$dtb" = "dtb" ]; then
target_prebuilt_kernel=out/arch/$target_arch/boot/Image.gz-dtb
else
target_prebuilt_kernel=out/arch/$target_arch/boot/Image.gz
fi
fi
echo project=$project kernel image add header $target_prebuilt_kernel
../out/host/linux-x86/bin/mkimage $target_prebuilt_kernel KERNEL 0xffffffff > out/kernel.bin
cp out/kernel.bin ../out/target/product/$project/kernel
fi
3,将生成的image 移到out 目录并rename为kernel
Step1:将如下code存为mkimage.sh
Step2:将mkimage.sh放在alps/kernel目录,例如alps/kernel-3.10
Step3:执行:./mkimage.sh project_name [dtb]
Example:
support dtb:source mkimage.sh k6795v1_64 dtb
no support dtb:source mkimage.sh k6795v1_64
#!/bin/bash
if [ -z "$1" ]; then
echo -e "\n[error]: project is empty ,you can input help."
echo -e "example: source mkimage.sh help\n"
elif [ "$1" = "help" ]; then
echo -e "\nUsage: mkimage.sh <project_name> <target_arch> <dtb> \n"
echo "<project_name>: project name,eg: k6795v1_64"
echo -e "<dtb>: if support device tree,you can input to check\n"
echo "eample:"
echo "support dtb:source mkimage.sh k6795v1_64 dtb "
echo -e "no support dtb:source mkimage.sh k6795v1_64\n"
else
project=$1
dtb=$2
if [ "$dtb" = "dtb" ]; then
target_prebuilt_kernel=out/arch/$target_arch/boot/Image.gz-dtb
else
target_prebuilt_kernel=out/arch/$target_arch/boot/Image.gz
fi
echo $target_prebuilt_kernel
cp $target_prebuilt_kernel ../out/target/product/$project/kernel
fi
4, 快速打包boot image,
在alps 目录下执行:make bootimage-nodeps
注意: 如果修改了rootfs里面的bin,可以按照下面步骤操作来加速:
§ mmm编译相应的module
§ make ramdisk-nodeps
§ make bootimage-nodeps