概览
在 Android 12 中,通用boot映像称为 通用内核映像 (GKI),包含通用 ramdisk 和 GKI 内核。
对于搭载 Android 13 的设备,通用 ramdisk 将从boot.img中删除并放置在单独的init_boot.img中。此更改使boot.img仅包含 GKI 内核。
Android 12中的通用内核映像(Generic Kernel Image,GKI):
在Android 12中,通用内核映像包含通用ramdisk和GKI内核。
Android 13中的变化:
Android 13中,通用ramdisk从启动映像中移除,并放置在一个独立的init_boot映像中。这使得启动映像仅包含GKI内核。
对于继续使用Android 12或更早内核版本的设备,通用ramdisk仍保持在原来的位置,不需要新的init_boot映像。
构建通用ramdisk的要求:
通用ramdisk应该仅包含第一阶段初始化和一个包含时间戳信息的属性文件。
为了构建通用ramdisk,需要将供应商特定的资源从ramdisk中移出。
对没有专用recovery分区的设备的影响:
没有专用恢复分区的设备上,所有恢复相关的部分从通用ramdisk移到vendor_boot ramdisk。
对使用专用recovery分区的设备的影响:
使用专用恢复分区的设备不需要更改恢复ramdisk,因为恢复ramdisk是自包含的。
通用ramdisk是Android系统中的一个组件,它是一个包含特定启动所需文件和脚本的ramdisk(RAM磁盘)。这个ramdisk在启动过程中被加载到内存中,以提供系统初始化所需的文件系统、设备节点、二进制文件和其他必要资源。
在Android中,ramdisk通常包含两个主要部分:
第一阶段初始化(init): 这是Android系统启动时运行的第一个用户空间进程。它负责执行设备初始化和启动后台服务等任务。
属性文件: 包含有关设备属性和配置信息的文件,例如硬件特性、制造商信息等。
通用ramdisk的目的是提供一个通用的启动环境,以确保Android系统能够在各种设备上正常启动。这种通用性有助于简化Android的开发和维护,使其更容易移植到不同的硬件平台上。
关于init_boot.img,根据提供的信息,Android 13中的变化包括将通用ramdisk从启动映像中移除,并将其放置在一个独立的init_boot映像中。这样的设计可能是为了更好地模块化系统,使得通用ramdisk可以在不同设备上共享,而不需要嵌入在启动映像中。init_boot.img 可能包含通用ramdisk和其他启动相关的文件,为系统提供更灵活的启动配置。
架构
下图说明了运行 Android 12 及更高版本的设备的架构。init_boot使用 Android 13 启动的设备有一个包含通用 ramdisk 的新 映像。从 Android 12 升级到 Android 13 的设备使用与 Android 12 相同的架构。
随 Android 13 一起启动,无专用recovery
Figure 1. Devices launching or upgrading to Android 13, with GKI, no dedicated recovery
随 Android 13 一起启动,专用和 A / B recovery(专用 ramdisk)
Figure 2. Devices launching or upgrading to Android 13, with GKI, dedicated and A/B recovery
如果设备有 recovery_a 和 recovery_b 分区,请参考此图。
随 Android 13 一起启动,专用和 non-A / B recovery(专用 ramdisk)
Figure 3. Devices launching or upgrading to Android 13, with GKI, dedicated and non-A/B recovery
如果设备有一个名为 recovery 但没有插槽后缀的分区,请参考此图。
启动或升级到Android 12,没有专用recovery
Figure 4. Devices launching or upgrading to Android 12, with GKI, no dedicated recovery
启动或升级到Android 12,专用和A/B recovery(专用Ramdisk)
Figure 5. Devices launching or upgrading to Android 12, with GKI, dedicated and A/B recovery
如果设备有 recovery_a 和 recovery_b 分区,请参考此图。
启动或升级到Android 12,专用和非A/B recovery(专用Ramdisk)
Figure 6. Devices launching or upgrading to Android 12, with GKI, dedicated and non-A/B recovery
如果设备有一个名为 recovery 但没有插槽后缀的分区,请参考此图。
升级到Android 12, recovery-as-boot (recovery-as-ramdisk)
Figure 7. Devices upgrading to Android 12, no GKI, recovery-as-boot
升级到Android 12,专用recovery(专用ramdisk)
Figure 8. Devices upgrading to Android 12, no GKI, dedicated recovery
Boot images contents
通用ramdisk图像内容
通用ramdisk包含以下组件:
- init
- Added system/etc/ramdisk/build.prop
- ro.PRODUCT.bootimg.* build props
- Empty directories for mount points: debug_ramdisk/, mnt/, dev/, sys/, proc/, metadata/
- first_stage_ramdisk/
– Duplicated empty directories for mount points: debug_ramdisk/, mnt/, dev/, sys/, proc/, metadata/
更详细步骤请参考:
https://source.android.com/docs/core/architecture/partitions/generic-boot