编译内核

进入到内核源码目录 执行

export ARCH=arm64
export PATH=clang/bin:${PATH}
export BUILD_CROSS_COMPILE=aarch64-linux-android-4.9/bin/aarch64-linux-android-
export CLANG_PATH=$HOME/clang/bin
export CROSS_COMPILE_ARM32=arm-linux-androideabi-4.9/bin/arm-linux-androideabi-

export CLANG_TRIPLE=aarch64-linux-gnu-

来决定编译内核的架构和编译器的路径。

一些参数的详细解释:

  • CC: 指定使用的编译器,因为 make 默认使用 gcc,因此实际上只有你在使用 clang 进行编译的时候才会使用该参数

  • CROSS_COMPILE: 主要的交叉编译链工具,如果你在使用谷歌的 gcc 4.9,请指定参数为 aarch64-linux-android-,32 位同理

  • CLANG_TRIPLE: 只在使用 clang 进行编译的时候才需要使用,用于指定当 clang 不生效时候使用的工具链,~~可以不用指定~~

  • CROSS_COMPILE_ARM32: 只在编译 32 位内核或者带 vdso 补丁的内核时需要指定该参数

  • ARCH: 编译内核的架构,默认为本机架构

~~使用gcc编译的话请忽略export PATH=clang/bin:${PATH},CLANG_TRIPLE=aarch64-linux-gnu和CLANG_PATH=$HOME/clang/bin-~~

注:你需要自己修改编译器的位置

然后输入

make defconfig

将defconfig换成arch/arm64/configs里的本机编译文件名称。

注:某些源码的配置文件可能放在arch/arm64/configs/vendor文件夹。

然后会输出类似以下的结果

HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#

可能输出的结果有所不同。

然后执行

make -j8 CC=clang 

意思是使用8线程编译,编译器为clang/bin/clang

注:使用gcc编译的话请忽略掉CC=clang

注:某些内核需要添加其他参数,例如LD=ld.lld

编译后的文件在arch/arm64/boot目录下,一般为Image,Image.gz-dtb或Image.gz