【前言】
本文以我使用的 Intel x86 cherrytrail 平台为例进行说明,部分细节可能会与其它设备上看到的不同,比如 easyimage 是我们产品上自定义的分区,其它设备上如果没有是正常的。
【正文】
编译完成后我们可以在out/target/product/<ProductModelName>/obj/PACKAGING/target_files_intermediates/<ImageTypeName>/
路径下找到打包前的 Android 各镜像文件的原始数据。该路径下包含了以下目录,对应设备上的各个实际分区:
BOOT/
COUNTRY/
DATA/
EASYIMAGE/
META/
OTA/
RADIO/
RECOVERY/
SYSTEM/
boot.img 镜像是由 BOOT/ 目录中的数据打包而来。我们进入该目录,查看其中的文件有:
-rw-rw-r-- 1 huangqd1 huangqd1 337 Jun 19 16:06 cmdline
-rw-rw-r-- 1 huangqd1 huangqd1 8514064 Jun 19 16:06 kernel
drwxrwxr-x 1 huangqd1 huangqd1 4096 Jun 19 16:06 RAMDISK
其中cmdline
文件中存放了 Linux Kernel 的启动参数,使用 file 命令查看文件类型为:cmdline: ASCII text, with very long lines
而kernel
就是可执行的 Linux Kernel 文件,使用 file 命令查看文件类型为:kernel: x86 boot sector
(因为是 x86 平台,所以是 x86 启动扇区)
RAMDISK/
目录中存放的自然就是根文件系统的文件和目录,部分目录和文件列表如下:
acct/
cache/
config/
country/
data/
dev/
frp/
lib/
mnt/
oem/
proc/
res/
root/
sbin/
storage/
sys/
system/
...
在编译 Android 系统镜像时,最终会将 cmdline、kernel、RAMDISK/ 打包并添加上 header 组成我们看到的 boot.img。