ใน Android 12 อิมเมจสำหรับ boot
ทั่วไปที่เรียกว่า Generic Kernel Image (GKI) มี ramdisk ทั่วไปและเคอร์เนล GKI
สำหรับอุปกรณ์ที่เปิดตัวด้วย Android 13 ramdisk ทั่วไปจะถูกลบออกจากอิมเมจ boot
และวางไว้ในอิมเมจ init_boot
แยกต่างหาก การเปลี่ยนแปลงนี้ทำให้อิมเมจ boot
เหลือเพียงเคอร์เนล GKI
สำหรับการอัปเกรดอุปกรณ์ที่ยังคงใช้ Android 12 หรือเคอร์เนลเวอร์ชันเก่ากว่านั้น ramdisk ทั่วไปจะยังคงอยู่ในตำแหน่งเดิมโดยไม่มีข้อกำหนดสำหรับอิมเมจ init_boot
ใหม่
ในการสร้าง ramdisk ทั่วไป ให้ย้ายทรัพยากรเฉพาะของผู้จำหน่ายออกจาก ramdisk เพื่อให้ ramdisk ทั่วไปมีเพียง init
ระยะแรกและไฟล์คุณสมบัติที่มีข้อมูลการประทับเวลา
บนอุปกรณ์ที่:
อย่าใช้พาร์ติชัน
recovery
เฉพาะ บิตการกู้คืนทั้งหมดจะย้ายจาก ramdisk ทั่วไปไปยังvendor_boot
ramdiskใช้พาร์ติชัน
recovery
เฉพาะ ไม่จำเป็นต้องเปลี่ยนแปลง ramdiskrecovery
เนื่องจาก ramdiskrecovery
มีอยู่ในตัวเอง
สถาปัตยกรรม
แผนภาพต่อไปนี้แสดงสถาปัตยกรรมสำหรับอุปกรณ์ที่ใช้ 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
โดยไม่มีส่วนต่อท้ายสล็อต
เปิดตัวหรืออัปเกรดเป็น 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 กู้คืนเมื่อบูต (กู้คืนเป็น ramdisk)
รูปที่ 7 อุปกรณ์ที่อัปเกรดเป็น Android 12 ไม่มี GKI การกู้คืนเมื่อบูต
อัปเกรดเป็น Android 12 การกู้คืนเฉพาะ (ramdisk เฉพาะ)
รูปที่ 8 อุปกรณ์ที่อัปเกรดเป็น Android 12 ไม่มี GKI มีการกู้คืนโดยเฉพาะ
เนื้อหาอิมเมจสำหรับบูต
อิมเมจสำหรับบูต Android มีดังต่อไปนี้
เพิ่มอิมเมจ
init_boot
สำหรับอุปกรณ์ที่เปิดตัวด้วย Android 13- ส่วนหัวเวอร์ชัน V4
- รูปภาพ ramdisk ทั่วไป
อิมเมจ
boot
ทั่วไป- ส่วนหัวเวอร์ชัน V3 หรือ V4
-
boot_signature
สำหรับการรับรอง GKI boot.img (v4 เท่านั้น) GKIboot.img
ที่ผ่านการรับรองไม่ได้ลงนามสำหรับการบูตที่ได้รับการยืนยัน OEM จะต้องลงนามในboot.img
ที่สร้างไว้ล่วงหน้าด้วยคีย์ AVB เฉพาะอุปกรณ์ -
cmdline
ทั่วไป (GENERIC_KERNEL_CMDLINE
) - เคอร์เนล GKI
-
- รูปภาพ ramdisk ทั่วไป
- รวมอยู่ในอิมเมจ
boot
จาก Android 12 และรุ่นก่อนหน้าเท่านั้น
- รวมอยู่ในอิมเมจ
- ส่วนหัวเวอร์ชัน V3 หรือ V4
อิมเมจ
vendor_boot
(สำหรับรายละเอียด โปรดดูที่ Vendor Boot Partitions )- ส่วนหัว
vendor_boot
-
cmdline
เฉพาะอุปกรณ์ (BOARD_KERNEL_CMDLINE
)
-
- อิมเมจ ramdisk ของ
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
-
-
recovery
อิมเมจ ramdisk- ทรัพยากรการกู้คืน
- สำหรับพาร์ติชันการกู้คืนที่ไม่ใช่ A/B เนื้อหาของ ramdisk จะต้องเป็นแบบสแตนด์อโลน ดู อิมเมจการกู้คืน ตัวอย่างเช่น:
-
lib/modules
ต้องมีโมดูลเคอร์เนลทั้งหมดที่จำเป็นสำหรับการบูตโหมดการกู้คืน - ramdisk การกู้คืนจะต้องมี
init
- สำหรับพาร์ติชันการกู้คืน A/B นั้น ramdisk การกู้คืนจะถูกต่อท้ายกับ ramdisk ทั่วไปและ
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 และใช้พาร์ติrecovery
A/B ต้องตั้งค่าตัวแปรนี้เป็น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
ถูกสร้างขึ้นและตั้งค่าขนาดหรือไม่ เมื่อตั้งค่าแล้ว ramdisk ทั่วไปจะถูกเพิ่มในinit_boot.img
แทนboot.img
และต้องการให้ตัวแปรBOARD_AVB_INIT_BOOT*
ได้รับการตั้งค่าสำหรับ chained vbmeta
การรวมกันที่ได้รับอนุญาต
ส่วนประกอบหรือตัวแปร | กำลังอัปเกรดอุปกรณ์โดยไม่มีพาร์ติ recovery | กำลังอัปเกรดอุปกรณ์ด้วยพาร์ติ recovery | เปิดอุปกรณ์โดยไม่มีพาร์ติชั่ recovery | เปิดอุปกรณ์ด้วยพาร์ติ recovery A/B | เปิดอุปกรณ์ด้วยพาร์ติ recovery ที่ไม่ใช่ 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
ตัวอย่างเช่น โปรดดู การเปลี่ยนแปลงนี้
ระบบเป็นรูท
ไม่รองรับ System-as-root สำหรับอุปกรณ์ที่ใช้ GKI บนอุปกรณ์ดังกล่าว BOARD_BUILD_SYSTEM_ROOT_IMAGE
จะต้องว่างเปล่า System-as-root ยังไม่ได้รับการสนับสนุนสำหรับอุปกรณ์ที่ใช้พาร์ติชันแบบไดนามิก
การกำหนดค่าผลิตภัณฑ์
อุปกรณ์ที่ใช้ ramdisk ทั่วไปจะต้องติดตั้งรายการไฟล์ที่ได้รับอนุญาตให้ติดตั้งลงใน ramdisk โดยระบุสิ่งต่อไปนี้ใน device.mk
:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
ไฟล์ generic_ramdisk.mk
ยังป้องกัน makefiles อื่น ๆ จากการติดตั้งไฟล์อื่น ๆ ไปยัง ramdisk โดยไม่ได้ตั้งใจ (ย้ายไฟล์ดังกล่าวไปที่ vendor_ramdisk
แทน)
การตั้งค่าอุปกรณ์
วิธีการตั้งค่าจะแตกต่างกันระหว่างอุปกรณ์ที่เปิดตัวด้วย Android 13, อัปเกรดเป็น Android 12 และเปิดตัวด้วย Android 12 โดย Android 13 มีการตั้งค่าคล้ายกับใน Android 12
อุปกรณ์ที่อัปเกรดเป็น Android 12:
สามารถรักษาคุณค่าของ
BOARD_USES_RECOVERY_AS_BOOT
ไว้ได้ หากทำเช่นนั้น แสดงว่าพวกเขากำลังใช้การกำหนดค่าเดิมและตัวแปรบิลด์ใหม่จะต้องว่างเปล่า หากอุปกรณ์ดังกล่าว:สามารถตั้งค่า
BOARD_USES_RECOVERY_AS_BOOT
ให้ว่างเปล่าได้ หากทำเช่นนั้น แสดงว่าพวกเขากำลังใช้การกำหนดค่าใหม่ หากอุปกรณ์ดังกล่าว:
อุปกรณ์ที่เปิดตัวด้วย Android 12 ต้องตั้งค่า
BOARD_USES_RECOVERY_AS_BOOT
ให้ว่างเปล่าและใช้การกำหนดค่าใหม่ หากอุปกรณ์ดังกล่าว:
เนื่องจาก aosp_arm64
สร้างเฉพาะ GKI (ไม่ใช่ vendor_boot
หรือการกู้คืน) จึงไม่ใช่เป้าหมายที่สมบูรณ์ สำหรับการกำหนดค่าบิวด์ aosp_arm64
โปรดดูที่ generic_arm64
ตัวเลือกที่ 1: ไม่มีพาร์ติชันการกู้คืนเฉพาะ
อุปกรณ์ที่ไม่มีพาร์ติ recovery
จะมีอิมเมจ boot
ทั่วไปอยู่ในพาร์ติ boot
vendor_boot
ramdisk มีทรัพยากรการกู้คืนทั้งหมด รวมถึง lib/modules
(ที่มีโมดูลเคอร์เนลของผู้จำหน่าย) บนอุปกรณ์ดังกล่าว การกำหนดค่าผลิตภัณฑ์ จะสืบทอดมา จาก generic_ramdisk.mk
การตั้งค่าคณะกรรมการ
ตั้งค่าต่อไปนี้:
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
เริ่มต้นไบนารีและลิงก์สัญลักษณ์
vendor_boot
ramdisk สามารถมี /init
ถึง /system/bin/init
symlink และ init_second_stage.recovery
ที่ /system/bin/init
อย่างไรก็ตาม เนื่องจาก ramdisk ทั่วไปถูกต่อเข้าด้วยกันหลังจาก vendor_boot
ramdisk ดังนั้น /init
symlink จึงถูกเขียนทับ เมื่ออุปกรณ์บู๊ตเข้าสู่การกู้คืน ต้องใช้ไบนารี /system/bin/init
เพื่อรองรับการเริ่มต้นระยะที่สอง เนื้อหาของ vendor_boot
+ ramdisk ทั่วไปมีดังนี้:
-
/init
(จาก ramdisk ทั่วไป สร้างจากinit_first_stage
) -
/system/bin/init
(จากvendor_ramdisk
สร้างจากinit_second_stage.recovery
)
การย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ใด ๆ ที่ติดตั้งไปยัง ramdisk ทั่วไปไปที่ 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
ของโมดูล ตามค่าดีฟอลต์ ตัวแปรโมดูลทั้งสองจะถูกติดตั้งเพื่อ build/make/target/product/base_vendor.mk
ดังนั้น หากอุปกรณ์ makefile สืบทอดจากไฟล์นั้น คุณไม่จำเป็นต้องติดตั้งตัวแปร 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 จะติดตั้งตัวแปร 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
การเปลี่ยนแปลงกระบวนการบูต
กระบวนการบูตเข้าสู่การกู้คืนหรือเข้าสู่ Android จะไม่เปลี่ยนแปลง โดยมีข้อยกเว้นต่อไปนี้:
- Ramdisk
build.prop
ย้ายไปยัง/second_stage_resources
เพื่อให้init
ระยะที่สองสามารถอ่านเวลาประทับของการบูตได้
เนื่องจากทรัพยากรย้ายจาก ramdisk ทั่วไปไปยัง vendor_boot
ramdisk ผลลัพธ์ของการเชื่อมต่อ ramdisk ทั่วไปเข้ากับ vendor_boot
ramdisk จะไม่เปลี่ยนแปลง
ทำให้ e2fsck พร้อมใช้งาน
makefiles ของอุปกรณ์สามารถสืบทอดมาจาก:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
หากอุปกรณ์รองรับ A/B เสมือน แต่ไม่บีบอัดvirtual_ab_ota/compression.mk
หากอุปกรณ์รองรับการบีบอัด A/B เสมือน
ผลิตภัณฑ์ makefiles ติดตั้ง $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
ณ รันไทม์ สเตจแรก init
จะสลับรูทเป็น /first_stage_ramdisk
จากนั้นดำเนินการ /system/bin/e2fsck
ตัวเลือก 2a: พาร์ติชันเฉพาะและการกู้คืน A/B
ใช้ตัวเลือกนี้สำหรับอุปกรณ์ที่มีพาร์ติ recovery
A/B นั่นคืออุปกรณ์มีพาร์ติชัน recovery_a
และ recovery_b partition
อุปกรณ์ดังกล่าวประกอบด้วยอุปกรณ์ A/B และ A/B เสมือนซึ่งสามารถอัพเดตพาร์ติชันการกู้คืนได้ โดยมีการกำหนดค่าต่อไปนี้:
AB_OTA_PARTITIONS += recovery
vendor_boot
ramdisk มีบิตของผู้จำหน่ายของ ramdisk และโมดูลเคอร์เนลของผู้จำหน่าย ซึ่งรวมถึงรายการต่อไปนี้:
ไฟล์
fstab
เฉพาะอุปกรณ์lib/modules
(รวมถึงโมดูลเคอร์เนลของผู้ขาย)
ramdisk recovery
ประกอบด้วยทรัพยากรการกู้คืนทั้งหมด บนอุปกรณ์ดังกล่าว การกำหนดค่าผลิตภัณฑ์ จะสืบทอดมา จาก generic_ramdisk.mk
การตั้งค่าคณะกรรมการ
ตั้งค่าต่อไปนี้สำหรับอุปกรณ์ที่มีพาร์ติ 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
เริ่มต้นไบนารีและลิงก์สัญลักษณ์
ramdisk recovery
สามารถมี /init -> /system/bin/init
symlink และ init_second_stage.recovery
ที่ /system/bin/init
อย่างไรก็ตาม เนื่องจาก ramdisk สำหรับบูตถูกต่อเข้าด้วยกันหลังจาก ramdisk recovery
ลิงก์สัญลักษณ์ /init
จึงถูกเขียนทับ เมื่ออุปกรณ์บูตเข้าสู่โหมดการกู้คืน ต้องใช้ไบนารี /system/bin/init
เพื่อรองรับการเริ่มต้นระยะที่สอง
เมื่ออุปกรณ์บูทเข้าสู่ recovery
เนื้อหาของ recovery
+ vendor_boot
+ ramdisk ทั่วไปจะเป็นดังนี้:
-
/init
(จาก ramdisk สร้างจากinit_first_stage
) -
/system/bin/init
(จากrecovery
ramdisk สร้างจากinit_second_stage.recovery
และดำเนินการจาก/init
)
เมื่ออุปกรณ์บูทเข้าสู่ Android เนื้อหาของ vendor_boot
+ ramdisk ทั่วไปจะเป็นดังนี้:
-
/init
(จาก ramdisk ทั่วไป สร้างจากinit_first_stage
)
การย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ใด ๆ ที่ติดตั้งไปยัง ramdisk ทั่วไปไปยัง 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
หากต้องการเพิ่มโมดูลที่จำเป็นสำหรับคอนโซลระยะแรก (เช่น adbd) ให้เปิดใช้งานตัวแปร vendor_ramdisk
ของโมดูลเหล่านี้โดยการอัพโหลดแพตช์ที่เกี่ยวข้องไปยัง AOSP จากนั้นใช้สิ่งต่อไปนี้
PRODUCT_PACKAGES += adbd.vendor_ramdisk
เพื่อให้แน่ใจว่าโมดูลที่ระบุจะติดตั้งไปที่ $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
หากมีการโหลด vendor_boot
ramdisk ในโหมดการกู้คืน โมดูลจะพร้อมใช้งานใน recovery
ด้วยเช่นกัน หากไม่ได้โหลด vendor_boot
ramdisk ในโหมดการกู้คืน อุปกรณ์จะสามารถติดตั้ง adbd.recovery
ได้เช่นกัน
การตรวจสอบข้อมูลเมตา
เพื่อรองรับ การตรวจสอบข้อมูลเมตา ในระหว่างการเมานต์ขั้นแรก อุปกรณ์ที่ไม่รองรับ GKI จะติดตั้งตัวแปร ramdisk ของโมดูลต่อไปนี้ หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปที่ $ANDROID_PRODUCT_OUT/vendor-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
การเปลี่ยนแปลงกระบวนการบูต
เมื่อบูตเข้าสู่ Android กระบวนการบูตจะไม่เปลี่ยนแปลง vendor_boot
+ ramdisk ทั่วไปนั้นคล้ายกับกระบวนการบู๊ตที่มีอยู่ ยกเว้นว่า fstab
จะโหลดจาก vendor_boot
เนื่องจากไม่มี system/bin/recovery
first_stage_init
จึงจัดการมันเหมือนการบู๊ตปกติ
เมื่อบูตเข้าสู่โหมดการกู้คืน กระบวนการบูตจะเปลี่ยนไป การกู้คืน + vendor_boot
+ ramdisk ทั่วไปนั้นคล้ายคลึงกับกระบวนการกู้คืนที่มีอยู่ แต่เคอร์เนลถูกโหลดจากอิมเมจสำหรับ boot
แทนที่จะโหลดจากอิมเมจ recovery
กระบวนการบูตสำหรับโหมดการกู้คืนมีดังนี้
Bootloader เริ่มทำงาน จากนั้นทำสิ่งต่อไปนี้:
- พุช recovery +
vendor_boot
+ ramdisk ทั่วไปไปที่/
(หาก OEM ทำซ้ำโมดูลเคอร์เนลใน ramdisk การกู้คืนโดยการเพิ่มลงในBOARD_RECOVERY_KERNEL_MODULES
)vendor_boot
ก็เป็นทางเลือก) - รันเคอร์เนลจากพาร์ติ
boot
- พุช recovery +
เคอร์เนลเมานต์ ramdisk ไปที่
/
จากนั้นดำเนินการ/init
จาก ramdisk ทั่วไปinit ระยะแรกเริ่มต้น จากนั้นทำสิ่งต่อไปนี้:
- ตั้งค่า
IsRecoveryMode() == true
และForceNormalBoot() == false
- โหลดโมดูลเคอร์เนลของผู้ขายจาก
/lib/modules
- เรียก
DoFirstStageMount()
แต่ข้ามการติดตั้งเนื่องจากIsRecoveryMode() == true
(อุปกรณ์ไม่ทำให้ ramdisk ว่าง (เพราะ/
ยังคงเหมือนเดิม) แต่จะเรียกSetInitAvbVersionInRecovery()
.) - เริ่มต้น init ขั้นที่สองจาก
/system/bin/init
จาก ramdiskrecovery
- ตั้งค่า
ทำให้ e2fsck พร้อมใช้งาน
makefiles ของอุปกรณ์สามารถสืบทอดมาจาก:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
หากอุปกรณ์รองรับ A/B เสมือน แต่ไม่บีบอัดvirtual_ab_ota/compression.mk
หากอุปกรณ์รองรับการบีบอัด A/B เสมือน
ผลิตภัณฑ์ makefiles ติดตั้ง $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 เสมือน ซึ่งพาร์ติชันการกู้คืนไม่สามารถอัปเดตได้ (นี่เป็นเรื่องผิดปกติ)
vendor_boot
ramdisk มีบิตของผู้จำหน่ายของ ramdisk และโมดูลเคอร์เนลของผู้จำหน่าย ซึ่งรวมถึงรายการต่อไปนี้:
- ไฟล์
fstab
เฉพาะอุปกรณ์ -
lib/modules
(รวมถึงโมดูลเคอร์เนลของผู้ขาย)
อิมเมจ recovery
จะต้องมีอยู่ในตัวเอง จะต้องมีทรัพยากรที่จำเป็นทั้งหมดในการบูตโหมดการกู้คืน รวมถึง:
- ภาพเคอร์เนล
- ภาพ DTBO
- โมดูลเคอร์เนลใน
lib/modules
- init ขั้นแรกเป็น symlink
/init -> /system/bin/init
- ขั้นที่สอง init binary
/system/bin/init
- ไฟล์
fstab
เฉพาะอุปกรณ์ - ทรัพยากรการกู้คืนอื่นๆ ทั้งหมด รวมถึงไบนารี
recovery
ฯลฯ - ฯลฯ
บนอุปกรณ์ดังกล่าว การกำหนดค่าผลิตภัณฑ์ จะสืบทอดมา จาก generic_ramdisk.mk
การตั้งค่าคณะกรรมการ
ตั้งค่าต่อไปนี้สำหรับอุปกรณ์ที่ไม่ใช่ 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
เริ่มต้นไบนารีและลิงก์สัญลักษณ์
แรมดิสก์ recovery
ต้องมีลิงก์สัญลักษณ์ /init -> /system/bin/init
และ init_second_stage.recovery
ที่ /system/bin/init
เมื่ออุปกรณ์บูตเข้าสู่โหมดการกู้คืน ต้องใช้ไบนารี /system/bin/init
เพื่อรองรับทั้งการเริ่มต้นระยะที่หนึ่งและระยะที่สอง
เมื่ออุปกรณ์บู๊ตเข้าสู่ recovery
เนื้อหาของ ramdisk recovery
จะเป็นดังนี้:
-
/init -> /system/bin/init
(จากrecovery
ramdisk) -
/system/bin/init
(จากrecovery
ramdisk สร้างจากinit_second_stage.recovery
และดำเนินการจาก/init
)
เมื่ออุปกรณ์บูทเข้าสู่ Android เนื้อหาของ vendor_boot
+ ramdisk ทั่วไปจะเป็นดังนี้:
-
/init
(จาก ramdisk สร้างจากinit_first_stage
)
การย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ใด ๆ ที่ติดตั้งไปยัง ramdisk ทั่วไปไปยัง vendor_ramdisk
และ ramdisk recovery
ตัวอย่างเช่น โปรดดู การเปลี่ยนแปลงนี้
การติดตั้งโมดูล
หากต้องการ คุณสามารถติดตั้งโมดูลเฉพาะอุปกรณ์ลงใน vendor_ramdisk
และ ramdisk recovery
(ข้ามขั้นตอนนี้หากคุณไม่มีโมดูลเฉพาะอุปกรณ์ที่จะติดตั้ง) init
ไม่เปลี่ยนรูท ตัวแปร vendor_ramdisk
ของโมดูลจะติดตั้งไปที่รูทของ vendor_ramdisk
เวอร์ชัน recovery
ของโมดูลจะติดตั้งที่รากของ ramdisk recovery
สำหรับตัวอย่างการติดตั้งโมดูลไปยัง vendor_ramdisk
และ ramdisk recovery
ดูที่ First stage console และ Metadata checksums
คอนโซลขั้นแรก
หากต้องการติดตั้งชุดตัวเลือก 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 จะติดตั้งตัวแปร ramdisk ของโมดูลต่อไปนี้ หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปที่ $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
เพื่อรองรับการตรวจสอบข้อมูลเมตาในระหว่างการเมานต์ขั้นแรกในการกู้คืน ให้เปิดใช้งานรูปแบบการกู้คืนของโมดูลเหล่านี้และติดตั้งด้วยเช่นกัน
การเปลี่ยนแปลงกระบวนการบูต
เมื่อบูตเข้าสู่ Android กระบวนการบูตจะไม่เปลี่ยนแปลง vendor_boot
+ ramdisk ทั่วไปนั้นคล้ายกับกระบวนการบู๊ตที่มีอยู่ ยกเว้นว่า fstab
จะโหลดจาก vendor_boot
เนื่องจากไม่มี system/bin/recovery
first_stage_init
จึงจัดการมันเหมือนการบู๊ตปกติ
เมื่อบูตเข้าสู่โหมดการกู้คืน กระบวนการบูตจะไม่เปลี่ยนแปลง ramdisk การกู้คืนจะถูกโหลดในลักษณะเดียวกับกระบวนการกู้คืนที่มีอยู่ เคอร์เนลถูกโหลดจากอิมเมจ recovery
กระบวนการบูตสำหรับโหมดการกู้คืนมีดังนี้
Bootloader เริ่มทำงาน จากนั้นทำสิ่งต่อไปนี้:
- ผลักดันการกู้คืน ramdisk ไปที่
/
- รันเคอร์เนลจากพาร์ติ
recovery
- ผลักดันการกู้คืน ramdisk ไปที่
เคอร์เนลเมานต์ ramdisk ไปที่
/
จากนั้นดำเนินการ/init
ซึ่งเป็นลิงก์ไปยัง/system/bin/init
จาก ramdiskrecovery
init ระยะแรกเริ่มต้น จากนั้นทำสิ่งต่อไปนี้:
- ตั้งค่า
IsRecoveryMode() == true
และForceNormalBoot() == false
- โหลดโมดูลเคอร์เนลของผู้ขายจาก
/lib/modules
- เรียก
DoFirstStageMount()
แต่ข้ามการติดตั้งเนื่องจากIsRecoveryMode() == true
(อุปกรณ์ไม่ทำให้ ramdisk ว่าง (เพราะ/
ยังคงเหมือนเดิม) แต่จะเรียกSetInitAvbVersionInRecovery()
.) - เริ่มต้น init ขั้นที่สองจาก
/system/bin/init
จาก ramdiskrecovery
- ตั้งค่า
การประทับเวลาอิมเมจสำหรับบูต
รหัสต่อไปนี้คือตัวอย่างไฟล์ 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
สำหรับบูต