Android全编编译kernel和uboot

在Android的工程目录下执行make命令,就会编译出system.img,执行本目录下的Makefile文件,该Makefile只有简单的一行,就是 build/core/main.mk。具体的话可以上网查Android编译过程。

本文主要是记录在Android的编译工程中加入编译kernel和uboot的功能。

需求

新开一个项目,编译环境是基于linux,移植android的编译系统。但是使用make进行编译,只编译出 uramdisksystem.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.mkdroidcore目标,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Build files and then package it into the rom formats
.PHONY: droidcore
droidcore: files \
systemimage \
$(INSTALLED_BOOTIMAGE_TARGET) \
$(INSTALLED_RECOVERYIMAGE_TARGET) \
$(INSTALLED_VBMETAIMAGE_TARGET) \
$(INSTALLED_USERDATAIMAGE_TARGET) \
$(INSTALLED_CACHEIMAGE_TARGET) \
$(INSTALLED_BPTIMAGE_TARGET) \
$(INSTALLED_VENDORIMAGE_TARGET) \
$(INSTALLED_PRODUCTIMAGE_TARGET) \
$(INSTALLED_SYSTEMOTHERIMAGE_TARGET) \
$(INSTALLED_FILES_FILE) \
$(INSTALLED_FILES_FILE_VENDOR) \
$(INSTALLED_FILES_FILE_PRODUCT) \
$(INSTALLED_FILES_FILE_SYSTEMOTHER) \
soong_docs

droidcore目标又依赖于上面的这些东西,这些东西又依赖于其他Makefile文件文件中定义的目标。


添加kernelimagebootloader的依赖

build/core/main.mk中的droidcore目标添加kernelimagebootloader依赖,如下:

1
2
3
4
5
6
# Build files and then package it into the rom formats
.PHONY: droidcore
droidcore: files \
bootloader \
kernelimage \
systemimage \

新增编译kernelimagebootloader的目标

build/core/Makefile 中添加新增编译kernelimagebootloader目标,如下:

1
2
3
4
5
6
7
8
9
10
11
12
.PHONY: bootloader
bootloader:
@echo "============================= make uboot ==============================="
./build-xxx-project.sh uboot
@install -D u-boot-imx6/u-boot.bin $(PRODUCT_OUT)/u-boot.bin


.PHONY: kernelimage
kernelimage:
@echo "============================= make kernel uImage ==============================="
./build-xxx-project.sh uImage
@install -D kernel-imx6/arch/arm/boot/uImage+dtb $(PRODUCT_OUT)/uImage+dtb

Title:Android全编编译kernel和uboot

Author:Victor Huang

Time:2019-06-08 / 13:06

Link:http://wowothink.com/3928006b/

License: Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)