在Android的工程目录下执行make
命令,就会编译出system.img
,执行本目录下的Makefile
文件,该Makefile
只有简单的一行,就是 build/core/main.mk
。具体的话可以上网查Android编译过程。
本文主要是记录在Android的编译工程中加入编译kernel和uboot的功能。
需求
新开一个项目,编译环境是基于linux,移植android的编译系统。但是使用make进行编译,只编译出 uramdisk
和system.img
,uboot和kernel只能单独执行下面的脚本进行编译:./build-xxx-project.sh uboot
:编译uboot./build-xxx-project.sh uImage
:编译kernel
这就有个问题,如果我们想要将kernel编译出来的某些ko打包进system.img,通过宏PRODUCT_COPY_FILES
进行拷贝。这就有个问题,如果是个干净的库,编译system.img
,有需要.ko文件才能打包,但是kernel没有编译,这就导致编译出错了。关于如何将ko打包进system.img,可以参照打包ko到image中
所以现在需要在执行 make 的时候,先编译kernel,再编译system.img
。
make
执行make的时候,会默认去执行 build/core/main.mk
的droidcore目标,内容如下:
1 | # Build files and then package it into the rom formats |
droidcore
目标又依赖于上面的这些东西,这些东西又依赖于其他Makefile文件文件中定义的目标。
添加kernelimage
和bootloader
的依赖
在 build/core/main.mk
中的droidcore
目标添加kernelimage
和bootloader
的依赖,如下:
1 | # Build files and then package it into the rom formats |
新增编译kernelimage
和bootloader
的目标
在 build/core/Makefile
中添加新增编译kernelimage
和bootloader
的目标,如下:
1 | .PHONY: bootloader |