ใน Android 12 รูปภาพ boot
ทั่วไป ซึ่งเรียกว่า
อิมเมจเคอร์เนลทั่วไป (GKI)
มี Ramdisk ทั่วไปและเคอร์เนล GKI
สำหรับอุปกรณ์ที่เปิดตัวด้วย Android 13 ข้อกำหนดทั่วไป
นำ ramdisk ออกจากรูปภาพ boot
และวางไว้ใน init_boot
แยกแล้ว
รูปภาพ การเปลี่ยนแปลงนี้จะทำให้รูปภาพ boot
เหลือเฉพาะ
เคอร์เนล GKI
สำหรับการอัปเกรดอุปกรณ์ที่ใช้ Android 12 ต่อไป
หรือเวอร์ชันเคอร์เนลที่เก่ากว่า RAM เดิมจะยังคงอยู่ที่เดิม
ไม่จำเป็นต้องมีรูปภาพ init_boot
รูปใหม่
หากต้องการสร้าง RAM ทั่วไป ให้ย้ายทรัพยากรเฉพาะผู้ให้บริการออกจาก RAM
ดังนั้น RAM ทั่วไปจะมีเพียง init
ระยะแรกและพร็อพเพอร์ตี้
ไฟล์ที่มีข้อมูลการประทับเวลา
ในอุปกรณ์ที่มีคุณสมบัติดังนี้
อย่าใช้พาร์ติชัน
recovery
เฉพาะ เนื่องจากบิตการกู้คืนทั้งหมดจะย้ายจาก ramdisk ทั่วไปเป็นvendor_boot
ramdiskใช้พาร์ติชัน
recovery
โดยเฉพาะ ไม่มีการเปลี่ยนแปลงใน RAM ดิสก์recovery
ต้องใช้เนื่องจาก RAM ดิสก์recovery
เป็นแบบในตัว
สถาปัตยกรรม
แผนภาพต่อไปนี้แสดงสถาปัตยกรรมของอุปกรณ์ที่ใช้ Android
12 ขึ้นไป
อุปกรณ์ที่เปิดตัวพร้อม Android 13 มีฟีเจอร์ใหม่
อิมเมจ init_boot
ที่มี RAM ดิสก์ทั่วไป
อุปกรณ์ที่อัปเกรดจาก 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
โดยไม่มี
คำต่อท้ายช่องโฆษณา
เปิดตัวหรืออัปเกรดเป็น 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
โดยไม่มี
คำต่อท้ายช่องโฆษณา
อัปเกรดเป็น 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
- อิมเมจ ramdisk ทั่วไป
รูปภาพ
boot
ทั่วไป- เวอร์ชันส่วนหัว V3 หรือ
เวอร์ชัน 4
boot_signature
สำหรับการรับรอง Boot.img ของ GKI (v4 เท่านั้น) GKIboot.img
ที่ได้รับการรับรองไม่ได้ลงชื่อสำหรับการเปิดเครื่องที่ได้รับการยืนยัน OEM ต้อง ลงนามboot.img
ที่สร้างไว้ล่วงหน้าด้วยข้อมูลเฉพาะอุปกรณ์ AVB- ทั่วไป
cmdline
(GENERIC_KERNEL_CMDLINE
) - เคอร์เนล GKI
- อิมเมจ ramdisk ทั่วไป
- รวมอยู่ในรูปภาพจาก
boot
จาก Android 12 เท่านั้น และก่อนหน้านี้
- รวมอยู่ในรูปภาพจาก
- เวอร์ชันส่วนหัว V3 หรือ
เวอร์ชัน 4
อิมเมจ
vendor_boot
(โปรดดูรายละเอียดที่หัวข้อการเปิดเครื่องของผู้ให้บริการ พาร์ติชัน)- ส่วนหัว
vendor_boot
cmdline
เฉพาะอุปกรณ์ (BOARD_KERNEL_CMDLINE
)
- รูปภาพ RAM
vendor_boot
lib/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
- รูปภาพ RAM
recovery
- แหล่งข้อมูลการกู้คืน
- สำหรับพาร์ติชันการกู้คืนที่ไม่ใช่ A/B เนื้อหาของ RAM ต้องมีลักษณะดังนี้ แบบสแตนด์อโลน ดู อิมเมจการกู้คืน เช่น
lib/modules
ต้องมีโมดูลเคอร์เนลทั้งหมดที่จำเป็นต่อการเปิดเครื่อง Recovery Mode- RAM การกู้คืนต้องมี
init
- สำหรับพาร์ติชันการกู้คืน A/B จะมีการเพิ่ม RAM การกู้คืนไปยังพารามิเตอร์
แรมดิสก์แบบทั่วไปและ
vendor_boot
ดังนั้นจึงไม่จำเป็นต้องมี แบบสแตนด์อโลน เช่น lib/modules
อาจมีเฉพาะโมดูลเคอร์เนลเพิ่มเติมที่จำเป็นต่อการ โหมดการกู้คืนสำหรับการเปิดเครื่องนอกเหนือจากโมดูลเคอร์เนลในvendor_boot
ramdisk- ลิงก์สัญลักษณ์ที่
/init
อาจมีอยู่ แต่ถูกบดบังด้วย ไบนารี/init
ระยะแรกในอิมเมจเปิดเครื่อง
- เวอร์ชันส่วนหัว V2
เนื้อหาอิมเมจ ramdisk ทั่วไป
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/
- ไดเรกทอรีว่างซ้ำกันสำหรับจุดต่อเชื่อม:
การผสานรวมอิมเมจการเปิดเครื่อง
แฟล็กบิลด์จะควบคุมวิธีที่ 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 ทั่วไปต้องติดตั้งรายการไฟล์ที่
ได้รับอนุญาตให้ติดตั้งลงใน RAM ดิสก์ได้ ในการดำเนินการดังกล่าว โปรดระบุข้อมูลต่อไปนี้ใน
device.mk
:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
ไฟล์ generic_ramdisk.mk
ยังป้องกันไม่ให้ไฟล์ Makefile อื่นๆ ทำโดยไม่ได้ตั้งใจด้วย
กำลังติดตั้งไฟล์อื่นๆ ลงใน RAM (ย้ายไฟล์ดังกล่าวไปที่ 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 และตัวเลือกการตั้งค่าอุปกรณ์คือ Option 1ใช้พาร์ติชัน
recovery
โดยเฉพาะ สถาปัตยกรรมดังที่แสดงใน รูปที่ 2a หรือรูปที่ 2b และการตั้งค่าอุปกรณ์ คือตัวเลือกที่ 2ก หรือตัวเลือกที่ 2ข
อุปกรณ์ที่เปิดตัวด้วย Android 12 ต้องตั้งค่า
BOARD_USES_RECOVERY_AS_BOOT
เพื่อว่างเปล่าและใช้การกำหนดค่าใหม่ หากมี อุปกรณ์:อย่าใช้พาร์ติชัน
recovery
โดยเฉพาะ สถาปัตยกรรมดังที่แสดงใน รูปที่ 1 และตัวเลือกการตั้งค่าอุปกรณ์คือตัวเลือกที่ 1ใช้พาร์ติชัน
recovery
โดยเฉพาะ สถาปัตยกรรมดังที่แสดงใน รูปที่ 2a หรือรูปที่ 2b และการตั้งค่าอุปกรณ์ คือตัวเลือกที่ 2ก หรือตัวเลือกที่ 2ข
เนื่องจาก aosp_arm64
สร้างเฉพาะ GKI เท่านั้น (ไม่ใช่ vendor_boot
หรือการกู้คืน)
ไม่ใช่เป้าหมายที่สมบูรณ์ สำหรับการกำหนดค่ารุ่นของ aosp_arm64
โปรดดู
generic_arm64
ตัวเลือกที่ 1: ไม่มีพาร์ติชันการกู้คืนโดยเฉพาะ
อุปกรณ์ที่ไม่มีพาร์ติชัน recovery
มีอิมเมจ boot
ทั่วไปใน
พาร์ติชัน boot
ramdisk 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
ไบนารีและลิงก์สัญลักษณ์เริ่มต้น
ramdisk vendor_boot
สามารถมีลิงก์สัญลักษณ์ /init
ถึง /system/bin/init
ได้
และ init_second_stage.recovery
เวลา /system/bin/init
อย่างไรก็ตาม เนื่องจาก
ramdisk ทั่วไปจะต่อกันหลังจาก ramdisk vendor_boot
ซึ่ง /init
ถูกเขียนทับ symlink เมื่อเปิดอุปกรณ์เข้าสู่การกู้คืน
ต้องมีไบนารี /system/bin/init
เพื่อรองรับ init ขั้นที่ 2 เนื้อหา
จาก vendor_boot
+ RAM ทั่วไปดังนี้
/init
(จาก RAM ทั่วไปที่สร้างตั้งแต่init_first_stage
)/system/bin/init
(จากvendor_ramdisk
สร้างตั้งแต่init_second_stage.recovery
)
ย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ที่ติดตั้งไปยัง RAM ทั่วไปไปยัง
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
ดังนั้นหากไฟล์บิลด์ของอุปกรณ์รับค่าเดิม
จากไฟล์นั้น คุณไม่จำเป็นต้องติดตั้งตัวแปร recovery
อย่างชัดแจ้ง
หากต้องการติดตั้งโมดูลการกู้คืนอย่างชัดแจ้ง ให้ใช้ข้อมูลต่อไปนี้
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
การดำเนินการนี้จะช่วยให้มั่นใจว่าการติดตั้ง linker
, sh
และ toybox
จะ
$ANDROID_PRODUCT_OUT/recovery/root/system/bin
ซึ่งจะติดตั้งเป็น
/system/bin
ภายใต้ vendor_ramdisk
หากต้องการเพิ่มโมดูลที่จำเป็นสำหรับคอนโซลขั้นตอนแรก (เช่น adbd) ให้ใช้ กำลังติดตาม
PRODUCT_PACKAGES += adbd.recovery
ซึ่งช่วยให้มั่นใจว่าโมดูลที่ระบุจะติดตั้งไปยัง
$ANDROID_PRODUCT_OUT/recovery/root/system/bin
ซึ่งจะติดตั้งเป็น
/system/bin
ภายใต้ vendor_ramdisk
การตรวจสอบข้อผิดพลาดข้อมูลเมตา
เพื่อรองรับข้อมูลเมตา
การตรวจสอบข้อผิดพลาด
ระหว่างการต่อเชื่อมขั้นแรก อุปกรณ์ที่ไม่รองรับ GKI จะติดตั้ง RAM
ของโมดูลต่อไปนี้ หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปที่
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
ตัวอย่างเช่น โปรดดู Changelist
การบีบอัด A/B เสมือน
ต้องติดตั้ง snapuserd
เพื่อรองรับการบีบอัด A/B เสมือน
vendor_ramdisk
อุปกรณ์ควรรับค่าจาก
virtual_ab_ota/compression.mk
ซึ่งติดตั้งตัวแปร vendor_ramdisk
ของ snapuserd
การเปลี่ยนแปลงขั้นตอนการเปิดเครื่อง
กระบวนการเปิดเครื่องเข้าสู่การกู้คืนหรือเข้าสู่ Android ยังคงเหมือนเดิม โดย ข้อยกเว้นต่อไปนี้
- Ramdisk
build.prop
ย้ายไปยัง/second_stage_resources
เพื่อให้ระยะที่ 2init
อ่านการประทับเวลาบิลด์ของการเปิดเครื่องได้
เนื่องจากทรัพยากรจะย้ายจาก RAM ทั่วไปไปยัง RAM ดิสก์ vendor_boot
ผลลัพธ์
ของการเชื่อมต่อ RAM ทั่วไปกับ RAM ดิสก์ vendor_boot
ไม่เปลี่ยนแปลง
ทำให้ e2fsck พร้อมใช้งาน
ไฟล์ครีเอทีฟโฆษณาของอุปกรณ์จะรับค่าจากสิ่งต่อไปนี้ได้
virtual_ab_ota/launch_with_vendor_ramdisk.mk
หากอุปกรณ์รองรับ Virtual Reality A/B แต่ไม่มีการบีบอัดvirtual_ab_ota/compression.mk
หากอุปกรณ์รองรับ A/B เสมือน การบีบอัด
ไฟล์ที่ติดตั้งผลิตภัณฑ์
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
ที่
รันไทม์แรก init
จะเปลี่ยนรูทเป็น /first_stage_ramdisk
จากนั้น
เรียกใช้ /system/bin/e2fsck
ตัวเลือกที่ 2a: พาร์ติชันการกู้คืน A/B เฉพาะและ
ใช้ตัวเลือกนี้สําหรับอุปกรณ์ที่มีพาร์ติชัน A/B recovery
ซึ่งก็คือ
อุปกรณ์จะมีrecovery_a
และrecovery_b partition
อุปกรณ์ดังกล่าวรวมถึง
A/B และอุปกรณ์ A/B เสมือนที่พาร์ติชันการกู้คืนสามารถอัปเดตได้ โดยมี
การกำหนดค่าต่อไปนี้
AB_OTA_PARTITIONS += recovery
ramdisk vendor_boot
มีบิตผู้ให้บริการของ ramdisk และผู้ให้บริการ
โมดูลเคอร์เนล ซึ่งรวมถึงรายการต่อไปนี้
ไฟล์
fstab
เฉพาะอุปกรณ์lib/modules
(รวมโมดูลเคอร์เนลของผู้ให้บริการ)
ramdisk recovery
มีทรัพยากรการกู้คืนทั้งหมด ในอุปกรณ์ดังกล่าว
การกำหนดค่าผลิตภัณฑ์รับค่าจาก
generic_ramdisk.mk
ตั้งค่า BOARD
กำหนดค่าต่อไปนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน A/B recovery
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
ไบนารีและลิงก์สัญลักษณ์เริ่มต้น
แรมดิสก์ recovery
สามารถมีลิงก์สัญลักษณ์ /init -> /system/bin/init
และ
init_second_stage.recovery
เวลา /system/bin/init
แต่เนื่องจากการบูต
ramdisk ถูกต่อกันหลังจาก ramdisk recovery
symlink ของ /init
คือ
ถูกเขียนทับ เมื่ออุปกรณ์เปิดเครื่องในโหมดการกู้คืน /system/bin/init
ต้องมีไบนารีเพื่อรองรับ init ขั้นที่ 2
เมื่ออุปกรณ์เปิดเครื่องใน recovery
เนื้อหาของ recovery
+
vendor_boot
+ RAM ทั่วไปดังนี้
/init
(จาก ramdisk สร้างจากinit_first_stage
)/system/bin/init
(จากrecovery
ramdisk สร้างขึ้นinit_second_stage.recovery
และดำเนินการจาก/init
)
เมื่ออุปกรณ์เปิดเครื่องใน Android เนื้อหาของ vendor_boot
+ ทั่วไป
ramdisks มีดังนี้:
/init
(จาก RAM ทั่วไปที่สร้างตั้งแต่init_first_stage
)
ย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ใดๆ ที่ติดตั้งไปยัง RAM ทั่วไปไปยัง
vendor_ramdisk
ตัวอย่างเช่น โปรดดู
เปลี่ยน
ติดตั้งโมดูล
หรือคุณสามารถติดตั้งโมดูลเฉพาะอุปกรณ์ไปที่ vendor_ramdisk
(ข้าม
ขั้นตอนนี้หากคุณไม่มีโมดูลเฉพาะอุปกรณ์ให้ติดตั้ง) Init
ไม่เปลี่ยนรูท โมดูล vendor_ramdisk
จะติดตั้งลงใน
รากของ vendor_ramdisk
สำหรับตัวอย่างในการติดตั้งโมดูลไปยัง
vendor_ramdisk
โปรดดูคอนโซลขั้นตอนแรก, ข้อมูลเมตา
checksums และ Virtual 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
หากต้องการเพิ่มโมดูลที่จำเป็นสำหรับคอนโซลขั้นตอนแรก (เช่น adbd) ให้เปิดใช้
ตัวแปร vendor_ramdisk
ของโมดูลเหล่านี้โดยการอัปโหลดแพตช์ที่เกี่ยวข้องไปยัง
AOSP จากนั้นใช้คำสั่งต่อไปนี้
PRODUCT_PACKAGES += adbd.vendor_ramdisk
ซึ่งช่วยให้มั่นใจว่าโมดูลที่ระบุจะติดตั้งไปยัง
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
หาก RAM ดิสก์ vendor_boot
จะโหลดในโหมดการกู้คืน โมดูลนี้จะพร้อมใช้งานในrecovery
ด้วย หาก
ไม่ได้โหลด RAM ดิสก์ vendor_boot
ในโหมดการกู้คืน อุปกรณ์อาจเลือกหรือไม่ก็ได้
ติดตั้ง adbd.recovery
ด้วย
การตรวจสอบข้อผิดพลาดข้อมูลเมตา
เพื่อรองรับข้อมูลเมตา
การตรวจสอบข้อผิดพลาด
ระหว่างการต่อเชื่อมขั้นแรก อุปกรณ์ที่ไม่รองรับ GKI จะติดตั้ง RAM
ของโมดูลต่อไปนี้ หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปที่
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
ตัวอย่างเช่น โปรดดู Changelist
การบีบอัด A/B เสมือน
หากต้องการรองรับการบีบอัด A/B เสมือน คุณต้องติดตั้ง snapuserd
ที่
vendor_ramdisk
อุปกรณ์ควรรับค่าจาก
virtual_ab_ota/compression.mk
ซึ่งติดตั้งตัวแปร vendor_ramdisk
ของ snapuserd
การเปลี่ยนแปลงขั้นตอนการเปิดเครื่อง
เมื่อเปิดเครื่องใน Android ขั้นตอนการเปิดเครื่องจะไม่เปลี่ยนแปลง ปุ่ม vendor_boot
+
RAM ทั่วไปจะคล้ายกับกระบวนการเปิดเครื่องที่มีอยู่ เว้นแต่ว่า fstab
โหลดจาก vendor_boot
เนื่องจาก system/bin/recovery
ไม่มีอยู่
first_stage_init
จะจัดการกับการเปิดเครื่องตามปกติ
เมื่อเปิดเครื่องในโหมดการกู้คืน กระบวนการเปิดเครื่องจะเปลี่ยนแปลงไป การกู้คืน +
vendor_boot
+ ramdisk ทั่วไปนั้นคล้ายกับขั้นตอนการกู้คืนที่มีอยู่ แต่
เคอร์เนลจะโหลดจากอิมเมจ boot
แทนที่จะเป็นจากอิมเมจ recovery
กระบวนการเปิดเครื่องสำหรับ Recovery Mode มีดังนี้
Bootloader เริ่มทำงานแล้วดังนี้
- พุชการกู้คืน +
vendor_boot
+ RAM ทั่วไปไปยัง/
(หาก OEM ทำซ้ำโมดูลเคอร์เนลใน RAM การกู้คืนด้วยการเพิ่มโมดูลไปยังBOARD_RECOVERY_KERNEL_MODULES
) โดยจะระบุvendor_boot
หรือไม่ก็ได้) - เรียกใช้เคอร์เนลจากพาร์ติชัน
boot
- พุชการกู้คืน +
Kernel ต่อเชื่อม ramdisk กับ
/
จากนั้นจะประมวลผล/init
จาก ramdisk ทั่วไปขั้นแรก init จะเริ่มต้น จากนั้นดำเนินการดังนี้
- ตั้งค่า
IsRecoveryMode() == true
และForceNormalBoot() == false
- โหลดโมดูลเคอร์เนลของผู้ให้บริการจาก
/lib/modules
- เรียกใช้
DoFirstStageMount()
แต่ข้ามการต่อเชื่อมเนื่องจากIsRecoveryMode() == true
(อุปกรณ์ไม่เพิ่มพื้นที่ว่างสำหรับ RAM (เนื่องจาก/
ยังคงเหมือนเดิม) แต่จะเรียกใช้SetInitAvbVersionInRecovery()
) - เริ่ม init ขั้นที่ 2 จาก
/system/bin/init
จากrecovery
ramdisk
- ตั้งค่า
ทำให้ e2fsck พร้อมใช้งาน
ไฟล์ครีเอทีฟโฆษณาของอุปกรณ์จะรับค่าจากสิ่งต่อไปนี้ได้
virtual_ab_ota/launch_with_vendor_ramdisk.mk
หากอุปกรณ์รองรับ Virtual Reality A/B แต่ไม่มีการบีบอัดvirtual_ab_ota/compression.mk
หากอุปกรณ์รองรับ A/B เสมือน การบีบอัด
ไฟล์ที่ติดตั้งผลิตภัณฑ์
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck
ที่
รันไทม์ ขั้นตอนแรก init
จะใช้ /system/bin/e2fsck
ตัวเลือก 2b: พาร์ติชันการกู้คืนเฉพาะที่ไม่ใช่ A/B
ใช้ตัวเลือกนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน recovery
ที่ไม่ใช่ A/B ซึ่งก็คือ
อุปกรณ์มีพาร์ติชันชื่อ recovery
โดยไม่มีคำต่อท้ายช่อง อุปกรณ์ดังกล่าว
รวมข้อมูลต่อไปนี้
- อุปกรณ์ที่ไม่ใช่ A/B
- A/B และอุปกรณ์ A/B เสมือน ซึ่งไม่มีพาร์ติชันการกู้คืน ซึ่งสามารถอัปเดตได้ (ซึ่งผิดปกติ)
ramdisk vendor_boot
มีบิตผู้ให้บริการของ ramdisk และผู้ให้บริการ
โมดูลเคอร์เนล ซึ่งรวมถึงรายการต่อไปนี้
- ไฟล์
fstab
เฉพาะอุปกรณ์ lib/modules
(รวมโมดูลเคอร์เนลของผู้ให้บริการ)
รูปภาพ recovery
ต้องมีลักษณะในตัว ต้องมี
ทรัพยากรที่จำเป็นทั้งหมดในการบูตโหมดการกู้คืน ได้แก่
- อิมเมจเคอร์เนล
- รูปภาพ DTBO
- โมดูลเคอร์เนลใน
lib/modules
- ขั้นตอนแรก init เป็น symlink
/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
ไบนารีและลิงก์สัญลักษณ์เริ่มต้น
ramdisk recovery
ต้องมีลิงก์สัญลักษณ์ /init -> /system/bin/init
และ
init_second_stage.recovery
เวลา /system/bin/init
เมื่ออุปกรณ์เปิดเครื่อง
โหมดการกู้คืน จำเป็นต้องใช้ไบนารี /system/bin/init
เพื่อรองรับทั้ง 2 โหมดแรก
ขั้นที่ 2 และระยะที่ 2
เมื่ออุปกรณ์เปิดเครื่องใน recovery
เนื้อหาของ RAM ดิสก์ recovery
จะถูก
ดังนี้
/init -> /system/bin/init
(จากrecovery
ramdisk)/system/bin/init
(จากrecovery
ramdisk สร้างขึ้นinit_second_stage.recovery
และดำเนินการจาก/init
)
เมื่ออุปกรณ์เปิดเครื่องใน Android เนื้อหาของ vendor_boot
+ ทั่วไป
ramdisks มีดังนี้:
/init
(จาก ramdisk สร้างจากinit_first_stage
)
ย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ใดๆ ที่ติดตั้งไปยัง RAM ทั่วไปไปยัง
vendor_ramdisk
และ RAM recovery
RAM ตัวอย่างเช่น โปรดดู
เปลี่ยน
ติดตั้งโมดูล
คุณสามารถติดตั้งโมดูลเฉพาะอุปกรณ์ลงใน vendor_ramdisk
และ
recovery
ramdisk (ข้าม
ขั้นตอนนี้หากคุณไม่มีโมดูลเฉพาะอุปกรณ์ให้ติดตั้ง) init
ไม่เปลี่ยนรูท โมดูล vendor_ramdisk
จะติดตั้งลงใน
รากของ vendor_ramdisk
โมดูล recovery
จะติดตั้งลงใน
รากของ ramdisk recovery
สำหรับตัวอย่างในการติดตั้งโมดูลไปยัง
vendor_ramdisk
และ recovery
ramdisk, se
คอนโซลระยะแรกและข้อมูลเมตา
การตรวจสอบข้อผิดพลาด
คอนโซลขั้นตอนแรก
หากต้องการติดตั้งโมดูลเวอร์ชัน 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
หากต้องการเพิ่มโมดูลที่จำเป็นสำหรับคอนโซลขั้นตอนแรก (เช่น 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 จะติดตั้ง RAM
ของโมดูลต่อไปนี้ หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปที่
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
หากต้องการรองรับการตรวจสอบข้อผิดพลาดข้อมูลเมตาระหว่างการต่อเชื่อมขั้นตอนแรกในการกู้คืน ให้เปิดใช้ ตัวแปรการกู้คืนของโมดูลเหล่านี้และติดตั้งโมดูลดังกล่าวด้วย
การเปลี่ยนแปลงขั้นตอนการเปิดเครื่อง
เมื่อเปิดเครื่องใน Android ขั้นตอนการเปิดเครื่องจะไม่เปลี่ยนแปลง ปุ่ม vendor_boot
+
RAM ทั่วไปจะคล้ายกับกระบวนการเปิดเครื่องที่มีอยู่ เว้นแต่ว่า fstab
โหลดจาก vendor_boot
เนื่องจาก system/bin/recovery
ไม่มีอยู่
first_stage_init
จะจัดการกับการเปิดเครื่องตามปกติ
เมื่อเปิดเครื่องในโหมดการกู้คืน ขั้นตอนการเปิดเครื่องจะไม่เปลี่ยนแปลง การกู้คืน
ramdisk จะถูกโหลดในลักษณะเดียวกับขั้นตอนการกู้คืนที่มีอยู่
เคอร์เนลโหลดจากอิมเมจ recovery
โดยทำตามขั้นตอนต่อไปนี้
Bootloader เริ่มทำงานแล้วดังนี้
- พุช RAM การกู้คืนไปยัง
/
- เรียกใช้เคอร์เนลจากพาร์ติชัน
recovery
- พุช RAM การกู้คืนไปยัง
Kernel ต่อเชื่อม ramdisk กับ
/
จากนั้นจะประมวลผล/init
ซึ่งเป็นลิงก์สัญลักษณ์ไปยัง/system/bin/init
จาก RAM ดิสก์recovery
ขั้นแรก init จะเริ่มต้น จากนั้นดำเนินการดังนี้
- ตั้งค่า
IsRecoveryMode() == true
และForceNormalBoot() == false
- โหลดโมดูลเคอร์เนลของผู้ให้บริการจาก
/lib/modules
- เรียกใช้
DoFirstStageMount()
แต่ข้ามการต่อเชื่อมเนื่องจากIsRecoveryMode() == true
(อุปกรณ์ไม่เพิ่มพื้นที่ว่างสำหรับ RAM (เนื่องจาก/
ยังคงเหมือนเดิม) แต่จะเรียกใช้SetInitAvbVersionInRecovery()
) - เริ่ม init ขั้นที่ 2 จาก
/system/bin/init
จากrecovery
ramdisk
- ตั้งค่า
การประทับเวลารูปภาพเปิดเครื่อง
โค้ดต่อไปนี้เป็นตัวอย่างไฟล์การประทับเวลารูปภาพ 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
ไปยังส่วนทั่วไป ramdisk ไฟล์นี้มีข้อมูลการประทับเวลาของบิลด์ระหว่างรันไทม์ ขั้นตอนแรกคือ
init
สำเนา จาก ramdisk ไปยังtmpfs
ก่อนที่จะทำให้ ramdisk ว่าง ขั้นที่init
อ่านได้ ไฟล์นี้เพื่อตั้งค่าคุณสมบัติการประทับเวลารูปภาพboot