В Android 10 и 11 виртуальный диск первого этапа содержит двоичный файл инициализации первого этапа (который выполняет раннее монтирование, как указано в записях fstab) и файлы fstab поставщика. (Как и в Android 9 и более ранних версиях, system.img
содержит содержимое $TARGET_ROOT_OUT
.)
Для устройств с загрузочным виртуальным диском (не A/B) первый этап init представляет собой статический исполняемый файл, расположенный в
/init
. Эти устройства монтируютsystem.img
как/system
, затем выполняют операцию переключения root, чтобы переместить монтирование из/system
в/
. Содержимое виртуального диска освобождается после завершения монтирования.Для устройств, которые используют восстановление в качестве виртуального диска, первый этап инициализации находится в
/init
внутри виртуального диска восстановления. Эти устройства сначала переключают корень на/first_stage_ramdisk
, чтобы удалить компоненты восстановления из среды, затем действуют так же, как и устройства с загрузочным виртуальным диском (то есть монтируютsystem.img
как/system
, переключают корень, чтобы переместить это монтирование в/
, и свободное содержимое виртуального диска после монтирования). Если в командной строке ядра присутствуетandroidboot.force_normal_boot=1
(или bootconfig, начиная с Android 12), устройства загружаются нормально (в Android), а не в режиме восстановления.
После завершения первого этапа инициализации он выполняет /system/bin/init
с аргументом selinux_setup
для компиляции и загрузки SELinux в систему. Наконец, init снова выполняет /system/bin/init
с аргументом second_stage
. На этом этапе запускается основная фаза инициализации, и процесс загрузки продолжается с использованием сценариев init.rc
В следующих разделах подробно описаны различия в макетах разделов для устройств, отличных от A/B, до и после Android 10.
Макеты разделов (устройства, отличные от A/B)
В следующих разделах подробно описаны различия в макетах разделов для устройств, отличных от A/B, до и после Android 10.
boot.img
Рамдиск (Android 8.x и ниже) | Система как root (Андроид 9) | Рамдиск (Андроид 10 и 11) |
---|---|---|
Содержит ядро и ramdisk.img -/ - init.rc - init - etc -> /system/etc - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... | Содержит только обычное загрузочное ядро. | Содержит ядро и ramdisk.img -/ - init - vendor fstab files - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... |
восстановление.img
Содержит ядро восстановления и восстановительный ramdisk.img
system.img
Рамдиск (Android 8.x и ниже) | Система как root (Андроид 9) | Рамдиск (Андроид 10 и 11) |
---|---|---|
Содержит файл system.img -/ - bin/ - etc - vendor -> /vendor - ... | Содержит объединенное содержимое system.img -/ - init.rc - init - etc -> /system/etc - system/ - bin/ - etc/ - vendor -> /vendor - ... - vendor/ (mount point) - odm/ (mount point) ... | Содержит объединенное содержимое system.img -/ - init.rc - init -> /system/bin/init - etc -> /system/etc - system/ - bin/ - etc/ - vendor -> /vendor - ... - vendor/ (mount point) - odm/ (mount point) ... |
Макеты разделов (устройства A/B)
В следующих разделах подробно описаны различия в макетах разделов для устройств A/B до и после Android 10.
boot.img
Система как root (Андроид 9) | Рамдиск (Андроид 10 и 11) |
---|---|
Содержит обычное загрузочное ядро и виртуальный диск восстановления ( BOARD_USES_RECOVERY_AS_BOOT := true ).Recovery-ramdisk используется только для загрузки в рекавери. | Содержит обычное загрузочное ядро и виртуальный диск восстановления ( BOARD_USES_RECOVERY_AS_BOOT := true ).Recovery-ramdisk используется для загрузки как в рекавери, так и в Android. ramdisk.img -/ - init -> /system/bin/init - first_stage_ramdisk - vendor fstab files - etc -> /system/etc - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... |
system.img
Содержит объединенное содержимое $TARGET_SYSTEM_OUT
и $TARGET_ROOT_OUT
.
system.img
-/
- init.rc
- init -> /system/bin/init
- etc -> /system/etc
- system/
- bin/
- etc/
- vendor -> /vendor
- ...
- vendor/ (mount point)
- odm/ (mount point)
...