ใน Android 12 อิมเมจ boot
ทั่วไปหรือที่เรียกว่ารูปภาพ Kernel ทั่วไป (GKI) มี RAM ดิสก์ทั่วไปและเคอร์เนล GKI
สำหรับอุปกรณ์ที่เปิดตัวด้วย Android 13 ระบบจะนำ RAM ทั่วไปออกจากอิมเมจ boot
และวางในรูปภาพ init_boot
แยกต่างหาก การเปลี่ยนแปลงนี้จะทำให้รูปภาพ boot
มีเฉพาะเคอร์เนล GKI เท่านั้น
สำหรับการอัปเกรดอุปกรณ์ที่ใช้ Android 12 หรือเคอร์เนลเวอร์ชันเก่าต่อไป RAM เดิมจะยังคงอยู่โดยไม่มีข้อกำหนดสำหรับอิมเมจ init_boot
ใหม่
หากต้องการสร้าง RAM disk ทั่วไป ให้ย้ายทรัพยากรเฉพาะของผู้ให้บริการออกจาก RAM disk เพื่อให้ RAM disk ทั่วไปมีเฉพาะ init
ระยะที่ 1 และไฟล์พร็อพเพอร์ตี้ที่มีข้อมูลการประทับเวลา
ในอุปกรณ์ที่มีลักษณะดังนี้
อย่าใช้พาร์ติชัน
recovery
เฉพาะ เนื่องจากบิตการกู้คืนทั้งหมดจะย้ายจาก RAM ทั่วไปไปยัง RAM ดิสก์vendor_boot
ใช้พาร์ติชัน
recovery
โดยเฉพาะ ไม่จำเป็นต้องมีการเปลี่ยนแปลง RAM ดิสก์recovery
เนื่องจาก RAM ดิสก์recovery
เป็นแบบในตัว
สถาปัตยกรรม
แผนภาพต่อไปนี้แสดงสถาปัตยกรรมสำหรับอุปกรณ์ที่ใช้ Android 12 ขึ้นไป
อุปกรณ์ที่เปิดตัวด้วย Android 13 จะมีรูปภาพ init_boot
ใหม่ที่มี RAMdisk ทั่วไป
อุปกรณ์ที่อัปเกรดจาก Android 12 เป็น Android 13 ใช้สถาปัตยกรรมเดียวกันกับใน Android 12
เปิดตัวด้วย Android 13 ไม่มีการกู้คืนเฉพาะ
รูปที่ 1 อุปกรณ์ที่เปิดหรืออัปเกรดเป็น Android 13 ที่มี GKI ไม่มีการกู้คืนเฉพาะ
เปิดตัวด้วย Android 13 การกู้คืนแบบเฉพาะและ A/B (Ramdisk เฉพาะ)
รูปที่ 2 อุปกรณ์ที่เปิดตัวหรืออัปเกรดเป็น Android 13 ที่ใช้ GKI เฉพาะการกู้คืน และ A/B
ดูรูปภาพนี้หากอุปกรณ์มีพาร์ติชัน recovery_a
และ recovery_b
เปิดตัวด้วย Android 13, การกู้คืนเฉพาะและไม่ใช้ A/B (Ramdisk เฉพาะ)
รูปที่ 3 อุปกรณ์ที่เปิดหรืออัปเกรดเป็น Android 13 ที่มี GKI, การกู้คืนเฉพาะและไม่ใช่ A/B
ดูรูปภาพนี้หากอุปกรณ์มีพาร์ติชันชื่อ recovery
ที่ไม่มีส่วนต่อท้ายเป็น "slot"
เปิดหรืออัปเกรดเป็น Android 12 ไม่มีการกู้คืนโดยเฉพาะ
รูปที่ 4 อุปกรณ์ที่เปิดหรืออัปเกรดเป็น Android 12 ที่มี GKI ไม่มีการกู้คืนเฉพาะ
เปิดหรืออัปเกรดเป็น Android 12, การกู้คืนเฉพาะและ A/B (Ramdisk เฉพาะ)
รูปที่ 5 อุปกรณ์ที่เปิดตัวหรืออัปเกรดเป็น Android 12 ที่ใช้ GKI เฉพาะการกู้คืน และ A/B
ดูรูปนี้หากอุปกรณ์มีพาร์ติชัน recovery_a
และ recovery_b
เปิดหรืออัปเกรดเป็น Android 12, การกู้คืนเฉพาะและไม่ใช้ A/B (Ramdisk เฉพาะ)
รูปที่ 6 อุปกรณ์ที่เปิดตัวหรืออัปเกรดเป็น Android 12 ที่ใช้ GKI เฉพาะการกู้คืนที่ไม่ใช่ A/B
ดูรูปภาพนี้หากอุปกรณ์มีพาร์ติชันชื่อ recovery
ที่ไม่มีส่วนต่อท้ายเป็น "slot"
อัปเกรดเป็น Android 12, recovery-as-boot (recovery-as-ramdisk)
รูปที่ 7 อุปกรณ์ที่อัปเกรดเป็น Android 12, ไม่มี GKI, การกู้คืนเป็นบูต
อัปเกรดเป็น Android 12, การกู้คืนเฉพาะ (ramdisk เฉพาะ)
รูปที่ 8 อุปกรณ์ที่อัปเกรดเป็น Android 12, ไม่มี GKI, การกู้คืนเฉพาะ
เนื้อหาของอิมเมจบูท
รูปภาพสำหรับบูตของ Android มีข้อมูลต่อไปนี้
เพิ่มรูปภาพ
init_boot
รูปสำหรับอุปกรณ์ที่จะเปิดตัวด้วย Android 13- เวอร์ชันส่วนหัว V4
- อิมเมจ RAM Disk ทั่วไป
รูปภาพ
boot
ทั่วไป- เวอร์ชันส่วนหัว V3 หรือ
V4
boot_signature
สำหรับการรับรอง boot.img ของ GKI (v4 เท่านั้น) GKIboot.img
ที่ได้รับการรับรองไม่ได้ลงนามสำหรับการบูตที่ยืนยันแล้ว OEM ยังคงต้องลงนามในboot.img
ที่สร้างขึ้นล่วงหน้าด้วยคีย์ AVB เฉพาะอุปกรณ์- ทั่วไป
cmdline
(GENERIC_KERNEL_CMDLINE
) - เคอร์เนล GKI
- อิมเมจ ramdisk ทั่วไป
- มีเฉพาะใน
boot
รูปภาพจาก Android 12 และเก่ากว่า
- มีเฉพาะใน
- เวอร์ชันส่วนหัว V3 หรือ
V4
รูปภาพ
vendor_boot
(ดูรายละเอียดที่พาร์ติชันสำหรับบูตของผู้ให้บริการ)- ส่วนหัว
vendor_boot
- เฉพาะอุปกรณ์
cmdline
(BOARD_KERNEL_CMDLINE
)
- เฉพาะอุปกรณ์
vendor_boot
รูปภาพ ramdisklib/modules
- แหล่งข้อมูลการกู้คืน (หากไม่มีการกู้คืนเฉพาะ)
- รูปภาพ
dtb
- ส่วนหัว
รูปภาพ
recovery
- เวอร์ชันส่วนหัว V2
cmdline
เฉพาะอุปกรณ์สำหรับการกู้คืน หากจำเป็น- สำหรับพาร์ติชันการกู้คืนที่ไม่ใช่ A/B เนื้อหาของส่วนหัวต้องเป็นแบบสแตนด์อโลน โปรดดูอิมเมจการกู้คืน เช่น
cmdline
ไม่ได้ต่อท้ายboot
และvendor_boot
cmdline
- ส่วนหัวระบุ DTBO สำหรับการกู้คืน หากจำเป็น
- สำหรับพาร์ติชันการกู้คืน A/B เนื้อหาจะต่อเชื่อมหรืออนุมานจาก
boot
และvendor_boot
ได้ เช่น cmdline
ต่อท้ายboot
และvendor_boot
cmdline
- DTBO สามารถอนุมานได้จากส่วนหัว
vendor_boot
recovery
รูปภาพ ramdisk- แหล่งข้อมูลการกู้คืน
- สำหรับพาร์ติชันการกู้คืนที่ไม่ใช่ A/B เนื้อหาของ RAM ต้องอยู่เดี่ยวๆ โปรดดูอิมเมจการกู้คืน เช่น
lib/modules
ต้องมีโมดูลเคอร์เนลทั้งหมดที่จำเป็นในการบูตเข้าสู่โหมดการกู้คืน- แรมดิสก์การกู้คืนต้องมี
init
- สำหรับพาร์ติชันการกู้คืน A/B ระบบจะใส่ RAM disk สำหรับการกู้คืนไว้ที่ด้านหน้าของ RAM disk ทั่วไปและ
vendor_boot
จึงไม่จำเป็นต้องเป็นแบบสแตนด์อโลน เช่น lib/modules
อาจมีเฉพาะโมดูลเคอร์เนลเพิ่มเติมที่จําเป็นต่อการบูตโหมดการกู้คืนนอกเหนือจากโมดูลเคอร์เนลในแรมดิสก์vendor_boot
- ลิงก์สัญลักษณ์ที่
/init
อาจมีอยู่ แต่ถูกบดบังด้วยไบนารี/init
ระยะแรกในอิมเมจการเปิดเครื่อง
- เวอร์ชันส่วนหัว V2
เนื้อหาอิมเมจ RAMdisk ทั่วไป
แรมดิสก์ทั่วไปประกอบด้วยคอมโพเนนต์ต่อไปนี้
init
system/etc/ramdisk/build.prop
ro.PRODUCT.bootimg.* build
พร็อพ- ไดเรกทอรีว่างสำหรับจุดมาสก์:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
,metadata/
first_stage_ramdisk/
- ไดเรกทอรีว่างที่ซ้ำกันสำหรับจุดมาสก์:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
,metadata/
- ไดเรกทอรีว่างที่ซ้ำกันสำหรับจุดมาสก์:
การผสานรวมอิมเมจบูท
Flag การสร้างจะควบคุมวิธีสร้างรูปภาพ init_boot
, boot
, recovery
และ vendor_boot
ค่าของตัวแปรกระดานบูลีนต้องเป็นสตริง true
หรือว่างเปล่า (ซึ่งเป็นค่าเริ่มต้น)
TARGET_NO_KERNEL
ตัวแปรนี้ระบุว่าบิลด์ใช้อิมเมจการเปิดเครื่องที่สร้างไว้ล่วงหน้าหรือไม่ หากตั้งค่าตัวแปรนี้เป็นtrue
ให้กำหนดBOARD_PREBUILT_BOOTIMAGE
ไปยังตำแหน่งของอิมเมจเปิดเครื่องที่สร้างไว้ล่วงหน้า (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img
)BOARD_USES_RECOVERY_AS_BOOT
ตัวแปรนี้ระบุว่าอุปกรณ์ใช้อิมเมจrecovery
เป็นอิมเมจboot
หรือไม่ เมื่อใช้ GKI ตัวแปรนี้จะว่างเปล่าและควรย้ายแหล่งข้อมูลการกู้คืนไปยังvendor_boot
BOARD_USES_GENERIC_KERNEL_IMAGE
ตัวแปรนี้บ่งบอกว่ากระดานใช้ GKI ตัวแปรนี้ไม่ส่งผลต่อ sysprops หรือPRODUCT_PACKAGES
นี่คือสวิตช์ GKI ระดับบอร์ดที่ตัวแปรต่อไปนี้ทั้งหมดถูกจํากัด
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
. ตัวแปรนี้ควบคุมว่าจะสร้างแหล่งข้อมูลการกู้คืนจาก RAMdisk ไปยังvendor_boot
หรือไม่เมื่อตั้งค่าเป็น
true
ระบบจะสร้างทรัพยากรการกู้คืนเป็นvendor-ramdisk/
เท่านั้น และจะไม่สร้างเป็นrecovery/root/
หากเป็นค่าว่าง ระบบจะสร้างทรัพยากรการกู้คืนสำหรับ
recovery/root/
เท่านั้นและจะไม่สร้างสำหรับvendor-ramdisk/
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT
ตัวแปรนี้ควบคุมว่าจะสร้างคีย์ GSI AVB ไปยังvendor_boot
หรือไม่เมื่อตั้งค่าเป็น
true
ในกรณีต่อไปนี้BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
ตั้งค่าแล้ว คีย์ GSI AVB จะสร้างขึ้นเป็น
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb
ไม่ได้ตั้งค่าไว้ ระบบจะสร้างคีย์ GSI AVB เป็น
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
เมื่อว่างเปล่า หาก
BOARD_RECOVERY_AS_ROOT
ตั้งค่าแล้ว คีย์ GSI AVB จะสร้างขึ้นเป็น
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
ไม่ได้ตั้งค่า คีย์ GSI AVB จะสร้างขึ้นไปยัง
$ANDROID_PRODUCT_OUT/ramdisk/avb
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE
ตัวแปรนี้ควบคุมว่าอิมเมจrecovery
มีเคอร์เนลหรือไม่ อุปกรณ์ที่เปิดตัวด้วย Android 12 และใช้พาร์ติชัน A/Brecovery
ต้องตั้งค่าตัวแปรนี้เป็นtrue
อุปกรณ์ที่ใช้ Android 12 และไม่ได้ใช้ A/B ต้องตั้งค่าตัวแปรนี้เป็นfalse
เพื่อให้อิมเมจการกู้คืนมีในตัวBOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES
ตัวแปรนี้ควบคุมว่าระบบจะคัดลอก$OUT/boot*.img
ไปยังIMAGES/
ภายใต้ไฟล์เป้าหมายหรือไม่aosp_arm64
ต้องตั้งค่าตัวแปรนี้เป็นtrue
อุปกรณ์อื่นๆ ต้องเว้นว่างตัวแปรนี้ไว้
BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE
ตัวแปรนี้จะควบคุมว่าจะสร้างinit_boot.img
หรือไม่และกำหนดขนาด เมื่อตั้งค่าแล้ว ระบบจะเพิ่ม RAM ทั่วไปลงในinit_boot.img
แทนboot.img
และกําหนดให้ต้องตั้งค่าตัวแปรBOARD_AVB_INIT_BOOT*
สําหรับ vbmeta แบบเชน
ชุดค่าผสมที่อนุญาต
คอมโพเนนต์หรือตัวแปร | อัปเกรดอุปกรณ์โดยไม่มีพาร์ติชันการกู้คืน | อัปเกรดอุปกรณ์ด้วยพาร์ติชันการกู้คืน | เปิดอุปกรณ์โดยไม่มีพาร์ติชันการกู้คืน | เปิดอุปกรณ์ด้วยพาร์ติชันการกู้คืน A/B | เปิดอุปกรณ์ที่มีพาร์ติชันการกู้คืนที่ไม่ใช่ A/B | aosp_arm64 |
---|---|---|---|---|---|---|
มี boot |
ใช่ | ใช่ | ใช่ | ใช่ | ใช่ | ใช่ |
มี init_boot (Android 13) |
ไม่ | ไม่ | ใช่ | ใช่ | ใช่ | ใช่ |
มี vendor_boot |
ไม่บังคับ | ไม่บังคับ | ใช่ | ใช่ | ใช่ | ไม่ |
มี recovery |
ไม่ | ใช่ | ไม่ | ใช่ | ใช่ | ไม่ |
BOARD_USES_RECOVERY_AS_BOOT |
true |
ว่าง | ว่าง | ว่าง | ว่าง | ว่าง |
BOARD_USES_GENERIC_KERNEL_IMAGE |
ว่าง | ว่าง | true |
true |
true |
true |
PRODUCT_BUILD_RECOVERY_IMAGE |
ว่าง | true หรือว่างเปล่า |
ว่าง | true หรือว่างเปล่า |
true หรือว่างเปล่า |
ว่าง |
BOARD_RECOVERYIMAGE_PARTITION_SIZE |
ว่าง | > 0 | ว่าง | มากกว่า 0 | มากกว่า 0 | ว่าง |
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT |
ว่าง | ว่าง | true |
ว่าง | ว่าง | ว่าง |
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT |
ว่าง | ว่าง | true |
true |
true |
ว่าง |
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE |
ว่าง | ว่าง | ว่าง | true |
ว่าง | ว่าง |
BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES |
ว่าง | ว่าง | ว่าง | ว่าง | ว่าง | true |
อุปกรณ์ที่มีพาร์ติชัน recovery
โดยเฉพาะจะตั้งค่า PRODUCT_BUILD_RECOVERY_IMAGE
เป็น true
หรือว่างเปล่าได้ สำหรับอุปกรณ์เหล่านี้ หากตั้งค่า BOARD_RECOVERYIMAGE_PARTITION_SIZE
ระบบจะสร้างอิมเมจ recovery
เปิดใช้ vbmeta แบบเชนสำหรับบูต
ต้องเปิดใช้ vbmeta แบบเชนสำหรับอิมเมจ boot
และ init_boot
ระบุข้อมูลต่อไปนี้
BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA4096
BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_INIT_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_INIT_BOOT_ALGORITHM := SHA256_RSA2048
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX_LOCATION := 3
โปรดดูตัวอย่างการเปลี่ยนแปลงนี้
รากของระบบ
อุปกรณ์ที่ใช้ GKI ไม่รองรับระบบในรูท ในอุปกรณ์ดังกล่าว BOARD_BUILD_SYSTEM_ROOT_IMAGE
ต้องว่างเปล่า ระบบยังไม่รองรับการใช้พาร์ติชันแบบไดนามิกสำหรับอุปกรณ์ที่ใช้พาร์ติชันแบบไดนามิก
การกำหนดค่าผลิตภัณฑ์
อุปกรณ์ที่ใช้ RAM disk ทั่วไปต้องติดตั้งรายการไฟล์ที่ได้รับอนุญาตให้ติดตั้งใน RAM disk โดยระบุข้อมูลต่อไปนี้ใน
device.mk
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
ไฟล์ generic_ramdisk.mk
ยังป้องกันไม่ให้ไฟล์ make อื่นๆ ติดตั้งไฟล์อื่นๆ ลงในแรมดิสก์โดยไม่ตั้งใจด้วย (ให้ย้ายไฟล์ดังกล่าวไปยัง vendor_ramdisk
แทน)
ตั้งค่าอุปกรณ์
วิธีการตั้งค่าจะแตกต่างกันไปตามอุปกรณ์ที่เปิดตัวมาพร้อมกับ Android 13, การอัปเกรดเป็น Android 12 และการเปิดตัวมาพร้อมกับ Android 12 Android 13 มีการตั้งค่าคล้ายกับใน Android 12
อุปกรณ์ที่อัปเกรดเป็น Android 12
รักษาค่าของ
BOARD_USES_RECOVERY_AS_BOOT
ได้ หากมี ก็แสดงว่าใช้การกำหนดค่าเดิมและตัวแปรบิลด์ใหม่ต้องว่างเปล่า หากอุปกรณ์ดังกล่าวตั้งค่า
BOARD_USES_RECOVERY_AS_BOOT
เป็นว่างได้ หากมี ผู้ใช้ จะใช้การกำหนดค่าใหม่ ในกรณีที่อุปกรณ์ดังกล่าวมีลักษณะดังนี้อย่าใช้พาร์ติชัน
recovery
โดยเฉพาะ สถาปัตยกรรมจะเหมือนกับที่แสดงในรูปที่ 1 และตัวเลือกการตั้งค่าอุปกรณ์คือตัวเลือก 1ใช้พาร์ติชัน
recovery
โดยเฉพาะ โดยสถาปัตยกรรมจะเหมือนกับที่แสดงในรูปที่ 2ก หรือรูปที่ 2ข และตัวเลือกการตั้งค่าอุปกรณ์คือตัวเลือกที่ 2ก หรือตัวเลือกที่ 2ข
อุปกรณ์ที่เปิดตัวพร้อมกับ Android 12 ต้องตั้งค่า
BOARD_USES_RECOVERY_AS_BOOT
เป็นว่างและใช้การกำหนดค่าใหม่ หากอุปกรณ์ดังกล่าวอย่าใช้พาร์ติชัน
recovery
โดยเฉพาะ สถาปัตยกรรมจะเหมือนกับที่แสดงในรูปที่ 1 และตัวเลือกการตั้งค่าอุปกรณ์คือตัวเลือกที่ 1ใช้พาร์ติชัน
recovery
โดยเฉพาะ โดยสถาปัตยกรรมจะเหมือนกับที่แสดงในรูปที่ 2ก หรือรูปที่ 2ข และตัวเลือกการตั้งค่าอุปกรณ์คือตัวเลือกที่ 2ก หรือตัวเลือกที่ 2ข
เนื่องจาก aosp_arm64
สร้างเฉพาะ GKI (ไม่ใช่ vendor_boot
หรือการกู้คืน) จึงไม่ใช่เป้าหมายที่สมบูรณ์ สำหรับaosp_arm64
การกำหนดค่าบิลด์ โปรดดู
generic_arm64
ตัวเลือกที่ 1: ไม่มีพาร์ติชันการกู้คืนโดยเฉพาะ
อุปกรณ์ที่ไม่มีพาร์ติชัน recovery
มีอิมเมจ boot
ทั่วไปในพาร์ติชัน boot
แรมดิสก์ vendor_boot
มีทรัพยากรการกู้คืนทั้งหมด รวมถึง lib/modules
(ที่มีโมดูลเคอร์เนลของผู้ให้บริการ) ในอุปกรณ์ดังกล่าว การกําหนดค่าผลิตภัณฑ์จะรับค่าจาก generic_ramdisk.mk
ตั้งค่า BOARD
กำหนดค่าต่อไปนี้
BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT := true
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE :=
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
ไบนารีและลิงก์สัญลักษณ์ของ Init
แรมดิสก์ vendor_boot
อาจมีลิงก์สัญลักษณ์ /init
ไปยัง /system/bin/init
และ init_second_stage.recovery
ที่ /system/bin/init
แต่เนื่องจาก ramdisk ทั่วไปเชื่อมต่อกันหลังจากแรมดิสก์ vendor_boot
ระบบจึงเขียนทับลิงก์สัญลักษณ์ /init
เมื่ออุปกรณ์บูตเข้าสู่ Recovery จะต้องมีไฟล์ไบนารี /system/bin/init
เพื่อรองรับการเริ่มต้นระยะที่ 2 เนื้อหาของ vendor_boot
+ แรมดิสก์ทั่วไปมีดังนี้
/init
(จาก RAM disk ทั่วไปที่สร้างจากinit_first_stage
)/system/bin/init
(จากvendor_ramdisk
สร้างขึ้นจากinit_second_stage.recovery
)
ย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ที่ติดตั้งไว้ใน RAM disk ทั่วไปไปยัง vendor_ramdisk
โปรดดูตัวอย่างการเปลี่ยนแปลงนี้
ติดตั้งโมดูล
คุณสามารถติดตั้งโมดูลเฉพาะอุปกรณ์ใน vendor_ramdisk
(ข้ามขั้นตอนนี้หากคุณไม่มีโมดูลเฉพาะอุปกรณ์ที่จะติดตั้ง)
ใช้ตัวแปร
vendor_ramdisk
ของโมดูลเมื่อโมดูลติดตั้งใน/first_stage_ramdisk
โมดูลนี้ควรพร้อมใช้งานหลังจากที่init
เปลี่ยนรูทเป็น/first_stage_ramdisk
แต่ก่อนที่init
จะเปลี่ยนรูทเป็น/system
ดูตัวอย่างได้ที่การตรวจสอบผลรวมข้อมูลเมตาและการบีบอัด A/B เสมือนใช้ตัวแปร
recovery
ของโมดูลเมื่อติดตั้งโมดูลใน/
โมดูลนี้ควรพร้อมใช้งานก่อนที่init
จะเปลี่ยนรูทเป็น/first_stage_ramdisk
โปรดดูรายละเอียดเกี่ยวกับการติดตั้งโมดูลใน/
ที่หัวข้อคอนโซลระยะแรก
คอนโซลระยะแรก
เนื่องจากคอนโซลระยะแรกจะเริ่มขึ้นก่อนที่ init
จะเปลี่ยนรูทเป็น /first_stage_ramdisk
คุณจึงต้องติดตั้งโมดูลเวอร์ชัน recovery
โดยค่าเริ่มต้น ระบบจะติดตั้งตัวแปรของโมดูลทั้ง 2 รายการลงใน build/make/target/product/base_vendor.mk
ดังนั้นหากไฟล์ Make ของอุปกรณ์รับค่าจากไฟล์นั้น คุณไม่จําเป็นต้องติดตั้งตัวแปร recovery
อย่างชัดเจน
หากต้องการติดตั้งโมดูลการกู้คืนอย่างชัดเจน ให้ใช้คำสั่งต่อไปนี้
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
การดำเนินการนี้จะตรวจสอบว่า linker
, sh
และ toybox
ติดตั้งไปยัง $ANDROID_PRODUCT_OUT/recovery/root/system/bin
ซึ่งจะติดตั้งไปยัง /system/bin
ภายใต้ vendor_ramdisk
หากต้องการเพิ่มโมดูลที่จําเป็นสําหรับคอนโซลระยะที่ 1 (เช่น adbd) ให้ใช้คำสั่งต่อไปนี้
PRODUCT_PACKAGES += adbd.recovery
วิธีนี้ช่วยให้มั่นใจได้ว่าโมดูลที่ระบุจะติดตั้งใน $ANDROID_PRODUCT_OUT/recovery/root/system/bin
ซึ่งจะติดตั้งใน /system/bin
ภายใต้ vendor_ramdisk
Checksum ข้อมูลเมตา
อุปกรณ์ที่ไม่รองรับ GKI จะติดตั้งตัวแปรของ RAMdisk ของข้อบังคับต่อไปนี้เพื่อรองรับการตรวจสอบข้อมูลเมตาขณะที่ระบบทำการเมานต์ระยะแรก หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปยัง $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
ตัวอย่างเช่น โปรดดูรายการการเปลี่ยนแปลงนี้
การบีบอัด A/B เสมือน
หากต้องการรองรับการบีบอัด A/B เสมือน คุณต้องติดตั้ง snapuserd
ใน vendor_ramdisk
อุปกรณ์ควรรับค่าจาก virtual_ab_ota/compression.mk
ซึ่งติดตั้งตัวแปร vendor_ramdisk
ของ snapuserd
การเปลี่ยนแปลงขั้นตอนการเปิดเครื่อง
กระบวนการบูตเข้าสู่ Recovery หรือ Android จะไม่มีการเปลี่ยนแปลง ยกเว้นในกรณีต่อไปนี้
- Ramdisk
build.prop
ย้ายไปยัง/second_stage_resources
เพื่อให้ขั้นที่ 2init
อ่านการประทับเวลาบิลด์ของการเปิดเครื่องได้
เนื่องจากมีการย้ายทรัพยากรจาก RAM disk ทั่วไปไปยัง RAM disk vendor_boot
ผลลัพธ์ของการต่อ RAM disk ทั่วไปไปยัง RAM disk vendor_boot
จึงไม่มีการเปลี่ยนแปลง
ทำให้ e2fsck พร้อมใช้งาน
ไฟล์ Make ของอุปกรณ์สามารถรับค่าจากรายการต่อไปนี้
virtual_ab_ota/launch_with_vendor_ramdisk.mk
หากอุปกรณ์รองรับการทดสอบ A/B เสมือนจริงแต่ไม่รองรับการบีบอัดvirtual_ab_ota/compression.mk
หากอุปกรณ์รองรับการบีบอัด A/B เสมือน
ผลิตภัณฑ์จะติดตั้ง $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
ในระยะรันไทม์ ระยะที่ 1 init
จะเปลี่ยนรูทเป็น /first_stage_ramdisk
แล้วดำเนินการ /system/bin/e2fsck
ตัวเลือกที่ 2ก: พาร์ติชันการกู้คืนเฉพาะและ A/B
ใช้ตัวเลือกนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน recovery
แบบ A/B กล่าวคือ อุปกรณ์มี recovery_a
และ recovery_b partition
อุปกรณ์ดังกล่าวรวมถึงอุปกรณ์ A/B และ A/B เสมือนซึ่งสามารถอัปเดตพาร์ติชันการกู้คืนได้ โดยมีการกำหนดค่าต่อไปนี้
AB_OTA_PARTITIONS += recovery
แรมดิสก์ vendor_boot
มีบิตของผู้ให้บริการสำหรับแรมดิสก์และโมดูลเคอร์เนลของผู้ให้บริการ ซึ่งรวมถึงรายการต่อไปนี้
ไฟล์
fstab
สำหรับอุปกรณ์โดยเฉพาะlib/modules
(รวมถึงโมดูลเคอร์เนลของผู้ให้บริการ)
แรมดิสก์ recovery
มีทรัพยากรการกู้คืนทั้งหมด การกำหนดค่าผลิตภัณฑ์จะรับค่ามาจาก generic_ramdisk.mk
ในอุปกรณ์ดังกล่าว
ตั้งค่า BOARD
ตั้งค่าต่อไปนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน recovery
A/B
BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE := true
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
ไบนารีและลิงก์สัญลักษณ์ของ Init
แรมดิสก์ recovery
อาจมี /init -> /system/bin/init
symlink และ init_second_stage.recovery
ที่ /system/bin/init
อย่างไรก็ตาม เนื่องจากระบบจะต่อเชื่อมไฟล์ RAM ของบูตต่อจากไฟล์ RAM ของ recovery
ระบบจึงเขียนทับสัญลักษณ์ลิงก์ /init
เมื่ออุปกรณ์บูตเข้าสู่โหมดการกู้คืน /system/bin/init
ต้องใช้ไฟล์ไบนารีเพื่อรองรับการเริ่มต้นระยะที่ 2
เมื่ออุปกรณ์บูตเข้าสู่ recovery
เนื้อหาของ recovery
+
vendor_boot
+ แรมดิสก์ทั่วไปจะเป็นดังนี้
/init
(จาก RAM disk ที่สร้างขึ้นจากinit_first_stage
)/system/bin/init
(จากแรมดิสก์recovery
ที่สร้างขึ้นจากinit_second_stage.recovery
และดำเนินการจาก/init
)
เมื่ออุปกรณ์บูตเข้าสู่ Android เนื้อหาของ vendor_boot
+ generic
ramdisks จะเป็นดังนี้
/init
(จาก RAM disk ทั่วไปที่สร้างจากinit_first_stage
)
ย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ที่ติดตั้งไว้ใน RAM disk ทั่วไปไปยัง
vendor_ramdisk
โปรดดูตัวอย่างการเปลี่ยนแปลงนี้
ติดตั้งโมดูล
คุณอาจติดตั้งข้อบังคับเฉพาะอุปกรณ์ใน vendor_ramdisk
(ข้ามขั้นตอนนี้หากคุณไม่มีข้อบังคับเฉพาะอุปกรณ์ที่จะติดตั้ง) Init
ไม่เปลี่ยนเป็นรูท โมดูลตัวแปร vendor_ramdisk
จะติดตั้งในรูทของ vendor_ramdisk
ดูตัวอย่างการติดตั้งโมดูลไปยัง vendor_ramdisk
ได้ที่คอนโซลขั้นตอนแรก การตรวจสอบข้อมูลเมตา และการบีบอัด A/B เสมือน
คอนโซลระยะแรก
หากต้องการติดตั้งโมดูลเวอร์ชัน vendor_ramdisk
ให้ใช้คำสั่งต่อไปนี้
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
วิธีนี้ช่วยให้มั่นใจได้ว่า linker
, sh
และ toybox
จะติดตั้งใน $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
ซึ่งจะติดตั้งใน /system/bin
ภายใต้ vendor_ramdisk
หากต้องการเพิ่มโมดูลที่จําเป็นสําหรับคอนโซลระยะที่ 1 (เช่น adbd) ให้เปิดใช้ตัวแปร vendor_ramdisk
ของโมดูลเหล่านี้โดยการอัปโหลดแพตช์ที่เกี่ยวข้องไปยัง AOSP จากนั้นใช้คำสั่งต่อไปนี้
PRODUCT_PACKAGES += adbd.vendor_ramdisk
ซึ่งช่วยให้มั่นใจได้ว่าโมดูลที่ระบุจะติดตั้งใน $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
หากโหลดvendor_boot
ramdisk
ในโหมดการกู้คืน โมดูลจะพร้อมใช้งานในrecovery
ด้วย หากระบบไม่โหลดแรมดิสก์ vendor_boot
ในโหมดการกู้คืน อุปกรณ์จะติดตั้ง adbd.recovery
ด้วยก็ได้
Checksum ข้อมูลเมตา
เพื่อให้รองรับการตรวจสอบข้อมูลเมตาระหว่างการต่อเชื่อมขั้นแรก อุปกรณ์ที่ไม่รองรับ GKI จะติดตั้งตัวแปร RAM ของโมดูลต่อไปนี้ หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปที่ $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
โปรดดูตัวอย่างที่รายการการเปลี่ยนแปลงนี้
การบีบอัด A/B เสมือน
ต้องติดตั้ง snapuserd
ใน vendor_ramdisk
เพื่อรองรับการบีบอัด A/B เสมือน อุปกรณ์ควรรับค่าจาก virtual_ab_ota/compression.mk
ซึ่งติดตั้งตัวแปร vendor_ramdisk
ของ snapuserd
การเปลี่ยนแปลงขั้นตอนการเปิดเครื่อง
เมื่อเปิดเครื่องใน Android ขั้นตอนการเปิดเครื่องจะไม่เปลี่ยนแปลง vendor_boot
+
Ramdisk ทั่วไปจะคล้ายกับกระบวนการบูตที่มีอยู่ ยกเว้นว่า fstab
จะโหลดจาก vendor_boot
เนื่องจากไม่มี system/bin/recovery
first_stage_init
จึงจัดการเป็นการบูตตามปกติ
เมื่อบูตเข้าสู่โหมดการกู้คืน กระบวนการบูตจะเปลี่ยนแปลง การกู้คืน +
vendor_boot
+ แรมดิสก์ทั่วไปจะคล้ายกับกระบวนการกู้คืนที่มีอยู่ แต่ระบบจะโหลดเคอร์เนลจากอิมเมจ boot
แทนอิมเมจ recovery
กระบวนการบูตสำหรับโหมดการกู้คืนมีดังนี้
Bootloader จะเริ่มทำงาน แล้วทำสิ่งต่อไปนี้
- พุชการกู้คืน +
vendor_boot
+ แรมดิสก์ทั่วไปไปยัง/
(หาก OEM ทำซ้ำโมดูลเคอร์เนลใน RAM การกู้คืนด้วยการเพิ่มโมดูลเคอร์เนลลงในBOARD_RECOVERY_KERNEL_MODULES
) คุณจะเลือกใช้vendor_boot
ก็ได้) - เรียกใช้เคอร์เนลจากพาร์ติชัน
boot
- พุชการกู้คืน +
เคอร์เนลจะต่อเชื่อม RAM disk กับ
/
จากนั้นจะเรียกใช้/init
จาก RAM disk ทั่วไประยะแรกจะเริ่มต้นการเริ่มต้น จากนั้นจะทำสิ่งต่อไปนี้
- ชุด
IsRecoveryMode() == true
และForceNormalBoot() == false
- โหลดโมดูลเคอร์เนลของผู้ให้บริการจาก
/lib/modules
- โทรหา
DoFirstStageMount()
แต่ข้ามการต่อเชื่อมเนื่องจากIsRecoveryMode() == true
(อุปกรณ์ไม่เพิ่มพื้นที่ว่างสำหรับ RAM (เนื่องจาก/
ยังเหมือนเดิม) แต่เรียกใช้SetInitAvbVersionInRecovery()
) - เริ่มการเริ่มต้นระยะที่ 2 จาก
/system/bin/init
จากแรมดิสก์recovery
- ชุด
ทำให้ e2fsck พร้อมใช้งาน
ไฟล์ Make ของอุปกรณ์สามารถรับค่าจากรายการต่อไปนี้
virtual_ab_ota/launch_with_vendor_ramdisk.mk
หากอุปกรณ์รองรับการทดสอบ A/B เสมือนจริงแต่ไม่รองรับการบีบอัดvirtual_ab_ota/compression.mk
หากอุปกรณ์รองรับการบีบอัด A/B เสมือน
ติดตั้งไฟล์ Make ของผลิตภัณฑ์
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck
ในระยะรันไทม์ ระยะที่ 1 init
จะดำเนินการ /system/bin/e2fsck
ตัวเลือกที่ 2ข: พาร์ติชันการกู้คืนเฉพาะและไม่ใช่ A/B
ใช้ตัวเลือกนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน recovery
ที่ไม่ใช่ A/B กล่าวคือ อุปกรณ์มีพาร์ติชันชื่อ recovery
โดยไม่มีคำต่อท้ายช่อง อุปกรณ์ดังกล่าวได้แก่
- อุปกรณ์ที่ไม่ใช่ A/B
- A/B และอุปกรณ์ A/B เสมือน ซึ่งพาร์ติชันการกู้คืนไม่สามารถอัปเดตได้ (ซึ่งผิดปกติ)
แรมดิสก์ vendor_boot
มีบิตของผู้ให้บริการสำหรับแรมดิสก์และโมดูลเคอร์เนลของผู้ให้บริการ ซึ่งรวมถึงรายการต่อไปนี้
- ไฟล์
fstab
สำหรับอุปกรณ์โดยเฉพาะ lib/modules
(รวมถึงโมดูลเคอร์เนลของผู้ให้บริการ)
รูปภาพ recovery
ต้องแสดงข้อมูลทั้งหมด โดยต้องมีทรัพยากรที่จำเป็นทั้งหมดในการบูตโหมดการกู้คืน ซึ่งรวมถึง
- อิมเมจเคอร์เนล
- รูปภาพ DTBO
- โมดูลเคอร์เนลใน
lib/modules
- อินิจเคชันระยะที่ 1 เป็นลิงก์สัญลักษณ์
/init -> /system/bin/init
- ไบนารี init ระยะที่ 2
/system/bin/init
- ไฟล์
fstab
สำหรับอุปกรณ์โดยเฉพาะ - แหล่งข้อมูลการกู้คืนอื่นๆ ทั้งหมด รวมถึงไฟล์
recovery
ในอุปกรณ์ดังกล่าว การกําหนดค่าผลิตภัณฑ์จะรับค่าจาก generic_ramdisk.mk
ตั้งค่า BOARD
ตั้งค่าต่อไปนี้สำหรับอุปกรณ์ที่ไม่ใช่ A/B
BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE :=
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
ไบนารีและลิงก์สัญลักษณ์ของ Init
แรมดิสก์ recovery
ต้องมี /init -> /system/bin/init
symlink และ init_second_stage.recovery
ที่ /system/bin/init
เมื่ออุปกรณ์บูตเข้าสู่โหมดการกู้คืน คุณต้องใช้ไบนารี /system/bin/init
เพื่อรองรับทั้งการเริ่มต้นระยะที่ 1 และระยะที่ 2
เมื่ออุปกรณ์บูตเข้าสู่ recovery
เนื้อหาของแรมดิสก์ recovery
จะเป็นดังนี้
/init -> /system/bin/init
(จากแรมดิสก์recovery
)/system/bin/init
(จากแรมดิสก์recovery
ที่สร้างขึ้นจากinit_second_stage.recovery
และดำเนินการจาก/init
)
เมื่ออุปกรณ์เปิดเครื่องใน Android เนื้อหาของ vendor_boot
+ RAM ทั่วไปมีดังนี้
/init
(จาก ramdisk สร้างจากinit_first_stage
)
ย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ที่ติดตั้งไปยัง RAM ทั่วไปไปยัง RAM ดิสก์ vendor_ramdisk
และ recovery
โปรดดูตัวอย่างการเปลี่ยนแปลงนี้
ติดตั้งโมดูล
คุณสามารถติดตั้งโมดูลเฉพาะอุปกรณ์ลงในแรมดิสก์ของ vendor_ramdisk
และ recovery
(ข้ามขั้นตอนนี้หากคุณไม่มีโมดูลเฉพาะอุปกรณ์ที่จะติดตั้ง) init
ไม่เปลี่ยนรูท โมดูลตัวแปร vendor_ramdisk
จะติดตั้งในรูทของ vendor_ramdisk
ตัวแปร recovery
ของโมดูลจะติดตั้งลงในรูทของแรมดิสก์ recovery
ดูตัวอย่างการติดตั้งโมดูลในแรมดิสก์ vendor_ramdisk
และ recovery
ได้ที่คอนโซลระยะที่ 1 และการตรวจสอบข้อมูลเมตา
คอนโซลระยะแรก
หากต้องการติดตั้งโมดูลเวอร์ชัน vendor_ramdisk
ให้ใช้คำสั่งต่อไปนี้
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
วิธีนี้ช่วยให้มั่นใจได้ว่า linker
, sh
และ toybox
จะติดตั้งใน $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
ซึ่งจะติดตั้งใน /system/bin
ภายใต้ vendor_ramdisk
หากต้องการเพิ่มโมดูลที่จําเป็นสําหรับคอนโซลระยะที่ 1 (เช่น adbd) ให้เปิดใช้ตัวแปร vendor_ramdisk
ของโมดูลเหล่านี้โดยการอัปโหลดแพตช์ที่เกี่ยวข้องไปยัง AOSP จากนั้นใช้คำสั่งต่อไปนี้
PRODUCT_PACKAGES += adbd.vendor_ramdisk
ซึ่งจะช่วยให้มั่นใจได้ว่าโมดูลที่ระบุจะติดตั้งใน $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
หากต้องการติดตั้งโมดูลเวอร์ชัน recovery
ให้แทนที่ vendor_ramdisk
ด้วย recovery
ดังนี้
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
adbd.recovery \
การตรวจสอบข้อผิดพลาดข้อมูลเมตา
อุปกรณ์ที่ไม่รองรับ GKI จะติดตั้งตัวแปรของแรมดิสก์ของข้อบังคับต่อไปนี้เพื่อรองรับการตรวจสอบข้อมูลเมตาขณะที่ระบบทำการเมานต์ระยะแรก หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปยัง $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
หากต้องการรองรับการตรวจสอบผลรวมข้อมูลเมตาระหว่างการต่อเชื่อมระยะที่ 1 ในการกู้คืน ให้เปิดใช้ตัวแปรการกู้คืนของโมดูลเหล่านี้และติดตั้งด้วย
การเปลี่ยนแปลงขั้นตอนการเปิดเครื่อง
เมื่อบูตเข้าสู่ Android กระบวนการบูตจะไม่เปลี่ยนแปลง vendor_boot
+
Ramdisk ทั่วไปจะคล้ายกับกระบวนการบูตที่มีอยู่ ยกเว้นว่า fstab
จะโหลดจาก vendor_boot
เนื่องจากไม่มี system/bin/recovery
first_stage_init
จึงจัดการการบูตเป็นบูตปกติ
เมื่อบูตเข้าสู่โหมดการกู้คืน กระบวนการบูตจะไม่เปลี่ยนแปลง ระบบจะโหลด RAMdisk สำหรับการกู้คืนในลักษณะเดียวกับกระบวนการกู้คืนที่มีอยู่
ระบบจะโหลดเคอร์เนลจากรูปภาพ recovery
ขั้นตอนการเปิดเครื่องสำหรับโหมดการกู้คืนมีดังนี้
Bootloader จะเริ่มทำงาน แล้วทำสิ่งต่อไปนี้
- พุช RAM disk สำหรับการกู้คืนไปยัง
/
- เรียกใช้เคอร์เนลจากพาร์ติชัน
recovery
- พุช RAM disk สำหรับการกู้คืนไปยัง
เคอร์เนลจะต่อเชื่อม RAM disk กับ
/
จากนั้นจะเรียกใช้/init
ซึ่งเป็นลิงก์สัญลักษณ์ไปยัง/system/bin/init
จาก RAM disk ของrecovery
ขั้นแรก init จะเริ่มต้น จากนั้นดำเนินการดังนี้
- ชุด
IsRecoveryMode() == true
และForceNormalBoot() == false
- โหลดโมดูลเคอร์เนลของผู้ให้บริการจาก
/lib/modules
- โทรหา
DoFirstStageMount()
แต่ข้ามการต่อเชื่อมเนื่องจากIsRecoveryMode() == true
(อุปกรณ์ไม่เพิ่มพื้นที่ว่างสำหรับ RAM (เนื่องจาก/
ยังเหมือนเดิม) แต่เรียกใช้SetInitAvbVersionInRecovery()
) - เริ่มการเริ่มต้นระยะที่ 2 จาก
/system/bin/init
จากแรมดิสก์recovery
- ชุด
การประทับเวลาของอิมเมจบูท
โค้ดต่อไปนี้เป็นตัวอย่างไฟล์การประทับเวลารูปภาพ boot
####################################
# from generate-common-build-props
# These properties identify this partition image.
####################################
ro.product.bootimage.brand=Android
ro.product.bootimage.device=generic_arm64
ro.product.bootimage.manufacturer=unknown
ro.product.bootimage.model=AOSP on ARM64
ro.product.bootimage.name=aosp_arm64
ro.bootimage.build.date=Mon Nov 16 22:46:27 UTC 2020
ro.bootimage.build.date.utc=1605566787
ro.bootimage.build.fingerprint=Android/aosp_arm64/generic_arm64:S/MASTER/6976199:userdebug/test-keys
ro.bootimage.build.id=MASTER
ro.bootimage.build.tags=test-keys
ro.bootimage.build.type=userdebug
ro.bootimage.build.version.incremental=6976199
ro.bootimage.build.version.release=11
ro.bootimage.build.version.release_or_codename=S
ro.bootimage.build.version.sdk=30
# Auto-added by post_process_props.py
persist.sys.usb.config=none
# end of file
ในเวลาบิลด์ จะมีการเพิ่มไฟล์
system/etc/ramdisk/build.prop
ลงใน RAM ทั่วไป ไฟล์นี้มีข้อมูลการประทับเวลาของบิลด์ในระยะรันไทม์
init
ระยะที่ 1 จะคัดลอกไฟล์จากแรมดิสก์ไปยังtmpfs
ก่อนปล่อยแรมดิสก์เพื่อให้init
ระยะที่ 2 อ่านไฟล์นี้เพื่อตั้งค่าพร็อพเพอร์ตี้การประทับเวลาของรูปภาพboot
ได้