Trong Android 10 và 11, ramdisk giai đoạn đầu tiên chứa tệp nhị phân init giai đoạn đầu tiên (thực hiện quá trình gắn sớm theo quy định của các mục fstab) và các tệp fstab của nhà cung cấp. (Như trong Android 9 trở xuống, system.img chứa nội dung của $TARGET_ROOT_OUT.)
Đối với các thiết bị có boot-ramdisk (không phải A/B), giai đoạn khởi động đầu tiên là một tệp thực thi tĩnh nằm tại
/init. Các thiết bị này gắnsystem.imgdưới dạng/system, sau đó thực hiện thao tác chuyển đổi gốc để di chuyển điểm gắn tại/systemsang/. Nội dung của ramdisk sẽ được giải phóng sau khi quá trình gắn kết hoàn tất.Đối với những thiết bị sử dụng chế độ khôi phục làm ramdisk, giai đoạn khởi động đầu tiên nằm ở
/inittrong ramdisk khôi phục. Trước tiên, các thiết bị này sẽ chuyển gốc sang/first_stage_ramdiskđể xoá các thành phần khôi phục khỏi môi trường, sau đó tiến hành tương tự như các thiết bị có boot-ramdisk (tức là gắnsystem.imgdưới dạng/system, chuyển gốc để di chuyển điểm gắn đó sang/và giải phóng nội dung ramdisk sau khi gắn). Nếuandroidboot.force_normal_boot=1có trong dòng lệnh của nhân (hoặc bootconfig từ Android 12 trở đi), thì các thiết bị sẽ khởi động bình thường (vào Android) thay vì khởi động vào chế độ khôi phục.
Sau khi hoàn tất quá trình khởi chạy giai đoạn đầu tiên, hệ thống sẽ thực thi /system/bin/init với đối số selinux_setup để biên dịch và tải SELinux lên hệ thống. Cuối cùng, init sẽ thực thi lại /system/bin/init bằng đối số second_stage. Tại thời điểm này, giai đoạn chính của quá trình khởi động sẽ chạy và tiếp tục quy trình khởi động bằng cách sử dụng các tập lệnh init.rc.
Các phần sau đây trình bày chi tiết sự khác biệt về bố cục phân vùng cho các thiết bị không phải A/B trước và sau Android 10.
Bố cục phân vùng (thiết bị không phải A/B)
Các phần sau đây trình bày chi tiết sự khác biệt về bố cục phân vùng cho các thiết bị không phải A/B trước và sau Android 10.
boot.img
| Ramdisk (Android 8.x trở xuống) |
Hệ thống dưới dạng gốc (Android 9) |
Ramdisk (Android 10 và 11) |
|---|---|---|
Chứa một nhân và một
ramdisk.img
-/
- init.rc
- init
- etc -> /system/etc
- system/ (mount point)
- vendor/ (mount point)
- odm/ (mount point)
...
|
Chỉ chứa một kernel khởi động thông thường. | Chứa một nhân và
ramdisk.img
-/
- init
- vendor fstab files
- system/ (mount point)
- vendor/ (mount point)
- odm/ (mount point)
...
|
recovery.img
Chứa một nhân khôi phục và một ramdisk.img khôi phục
system.img
| Ramdisk (Android 8.x trở xuống) |
Hệ thống dưới dạng gốc (Android 9) |
Ramdisk (Android 10 và 11) |
|---|---|---|
Chứa một
system.img
-/
- bin/
- etc
- vendor -> /vendor
- ...
|
Chứa nội dung đã hợp nhất của
system.img
-/
- init.rc
- init
- etc -> /system/etc
- system/
- bin/
- etc/
- vendor -> /vendor
- ...
- vendor/ (mount point)
- odm/ (mount point)
...
|
Chứa nội dung đã hợp nhất của
system.img
-/
- init.rc
- init -> /system/bin/init
- etc -> /system/etc
- system/
- bin/
- etc/
- vendor -> /vendor
- ...
- vendor/ (mount point)
- odm/ (mount point)
...
|
Bố cục phân vùng (thiết bị A/B)
Các phần sau đây trình bày chi tiết sự khác biệt về bố cục phân vùng cho các thiết bị A/B trước và sau Android 10.
boot.img
| Hệ thống dưới dạng gốc (Android 9) |
Ramdisk (Android 10 và 11) |
|---|---|
Chứa nhân khởi động thông thường và ramdisk khôi phục (BOARD_USES_RECOVERY_AS_BOOT := true).Ramdisk khôi phục chỉ được dùng để khởi động vào chế độ khôi phục. |
Chứa nhân khởi động bình thường và recovery-ramdisk (BOARD_USES_RECOVERY_AS_BOOT := true). Recovery-ramdisk được dùng để khởi động vào cả chế độ khôi phục và 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
Chứa nội dung đã hợp nhất của $TARGET_SYSTEM_OUT và $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)
...