# 编译内核 进入到内核源码目录 执行 ```bash 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-~~ 注:你需要自己修改编译器的位置 然后输入 ```bash make defconfig ``` 将defconfig换成`arch/arm64/configs`里的本机编译文件名称。 注:某些源码的配置文件可能放在`arch/arm64/configs/vendor`文件夹。 然后会输出类似以下的结果 ```bash 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 # ``` 可能输出的结果有所不同。 然后执行 ```bash make -j8 CC=clang ``` 意思是使用8线程编译,编译器为clang/bin/clang 注:使用gcc编译的话请忽略掉CC=clang 注:某些内核需要添加其他参数,例如LD=ld.lld 编译后的文件在arch/arm64/boot目录下,一般为Image,Image.gz-dtb或Image.gz