Android 驱动(16)---AOSP如何单独build kernel

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

 

猜你喜欢

转载自blog.csdn.net/zhangbijun1230/article/details/81253901
今日推荐