android 7.0以后,可以快速编译:
prebuilts/build-tools/linux-x86/bin/ninja -f out/build-ud710_haps_native.ninja bootimage
确认 config:
手机终端,zcat /proc/config.gz, 查看手机中的config定义。
源码中,编译目录,out/target/product/s9863a3h10/obj/KERNE/.config
kconfig、defconfig、.config
1.deconfig 文件:
一般由平台厂商提供,内核编译用做.config的参考,注意:如果,缺少该文件,无法进行编译。
文件位于:\kernel\..\arch\arm\configs\xxx_defconfig
2.kconfig
分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。
3.makefile
分布在各个目录下,用于集成编译。
4.config 文件
在内核编译时,主Makefile调用这个.config,用于或者用于的内核编译配置。当我们在内核源码目录下输入make menuconfig时,在出现的菜单界面中选择一项时,它会自动更新.config相应项的值。如果我们没有选择,则会在.config问下插入一行注释(# CONFIG_TOUCHSCREEN_GT9xx is not set)
文件位于 :kernel\...\out\xxx_defconfig\.config
修改defconfig :arch/arm64/configs/xxxx64_defconfig
1、make ARCH=arm xxxx32_defconfig
2、make ARCH=arm64 menuconfig
3、make ARCH=arm savedefconfig
4、diff -u arch/arm64/configs/xxxx32_defconfig defconfig
5、最后将上方命令打印出的那部分改动合入到 arch/arm/configs/xxxx32_defconfig
文件中就好了。
编译kernel 文件指定输出目录:
# 设置编译平台为64位arm
export ARCH=arm64
export SUBARCH=arm64
# 配置arm64的交叉编译路径
export PATH=/home/test/work/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin:$PATH
# 配置32位arm的交叉编译路径
# 测试过程中32位的不设置居然编译不过
export PATH=/home/test/work/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin:$PATH
# 设置64位交叉编译工具前缀
# 这个前缀其实就是交叉编译链路径/home/test/work/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin 下面的工具的公共前缀
export CROSS_COMPILE=aarch64-linux-android-
# 设置32位交叉编译工具前缀
# 这个前缀其实就是交叉编译链路径/home/test/work/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin 下面的工具的公共前缀
export CROSS_COMPILE_ARM32=arm-linux-androideabi-
# 通过make命令生成编译配置文件.config
# O=out指定输出目录 test_defconfig:这个是oneplus3的内核编译配置
make O=out test_defconfig
# 执行内核编译
make -j2 O=out ARCH=arm64
编译生成文件的输出格式,两种工具。
gcc中使用 objcopy。objcopy --help查看帮助。参考 objcopy的详细说明_Ye__sea的博客-CSDN博客_objcopy工具
armcc中使用 fromelf。参考 Keil/MDK中如何生成***.bin格式文…_yf夜风的博客-CSDN博客