ใน 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 ทั่วไปไปยัง ramdiskvendor_boot
ใช้พาร์ติชัน
recovery
โดยเฉพาะ ไม่จำเป็นต้องเปลี่ยนแปลงrecovery
ramdisk เนื่องจากrecovery
ramdisk มีการควบคุมในตัว
สถาปัตยกรรม
แผนภาพต่อไปนี้แสดงสถาปัตยกรรมสำหรับอุปกรณ์ที่ใช้ 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, 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 หรือ
V4
boot_signature
สำหรับการรับรอง boot.img ของ GKI (v4 เท่านั้น) GKIboot.img
ที่ ได้รับการรับรองไม่ได้ลงนามสำหรับการเปิดเครื่องที่ได้รับการยืนยัน OEM ยังคงต้องลงนามในboot.img
ที่สร้างไว้ล่วงหน้าด้วยคีย์ AVB เฉพาะอุปกรณ์cmdline
ทั่วไป (GENERIC_KERNEL_CMDLINE
)- เคอร์เนล GKI
- อิมเมจแรมดิสก์ทั่วไป
- รวมเฉพาะใน
boot
รูปภาพจาก Android 12 และเวอร์ชันก่อนหน้า
- รวมเฉพาะใน
- เวอร์ชันส่วนหัว V3 หรือ
V4
vendor_boot
image (ดูรายละเอียดได้ที่พาร์ติชันการบูตของผู้ให้บริการ)vendor_boot
headercmdline
เฉพาะอุปกรณ์ (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 เนื้อหาของ Ramdisk ต้องเป็น แบบสแตนด์อโลน ดูอิมเมจการกู้คืน เช่น
lib/modules
ต้องมีโมดูลเคอร์เนลทั้งหมดที่จำเป็นต่อการบูต โหมดการกู้คืน- Ramdisk การกู้คืนต้องมี
init
- สำหรับพาร์ติชันการกู้คืน A/B ระบบจะเพิ่ม ramdisk การกู้คืนไว้ที่ด้านหน้าของ ramdisk ทั่วไปและ
vendor_boot
จึงไม่จำเป็นต้องเป็นแบบสแตนด์อโลน เช่น lib/modules
อาจมีเฉพาะโมดูลเคอร์เนลเพิ่มเติมที่จำเป็นต่อการ บูตโหมดการกู้คืนนอกเหนือจากโมดูลเคอร์เนลในvendor_boot
ramdisk- Symlink ที่
/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/
- ไดเรกทอรีว่างที่ซ้ำกันสำหรับจุดติดตั้ง:
การผสานรวมอิมเมจบูต
Build flags ควบคุมวิธีสร้างอิมเมจ 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
หากตั้งค่าไว้ ระบบจะสร้างคีย์ AVB ของ GSI เป็น
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb
หากไม่ได้ตั้งค่า ระบบจะสร้างคีย์ AVB ของ GSI เพื่อ
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
เมื่อว่างเปล่า หาก
BOARD_RECOVERY_AS_ROOT
:หากตั้งค่าไว้ ระบบจะสร้างคีย์ AVB ของ GSI เป็น
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
หากไม่ได้ตั้งค่า ระบบจะสร้างคีย์ AVB ของ GSI เพื่อ
$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
หรือไม่ และกำหนดขนาด เมื่อตั้งค่าแล้ว ระบบจะเพิ่ม ramdisk ทั่วไป ลงใน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
โปรดดูตัวอย่างในการเปลี่ยนแปลง นี้
System-as-root
ไม่รองรับ 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
ยังป้องกันไม่ให้ไฟล์ Make อื่นๆ ติดตั้งไฟล์อื่นๆ ลงใน 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
เป็นค่าว่างได้ หากดำเนินการดังกล่าว ผู้ใช้จะใช้ การกำหนดค่าใหม่ หากอุปกรณ์ดังกล่าวอย่าใช้
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
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
ไบนารีและลิงก์สัญลักษณ์ของ Init
vendor_boot
ramdisk อาจมี /init
ไปยัง /system/bin/init
symlink
และ init_second_stage.recovery
ที่ /system/bin/init
อย่างไรก็ตาม เนื่องจากมีการต่อ ramdisk ทั่วไปหลัง ramdisk vendor_boot
จึงมีการเขียนทับ symlink /init
เมื่ออุปกรณ์บูตเข้าสู่การกู้คืน คุณจะต้องมีไบนารี
/system/bin/init
เพื่อรองรับการเริ่มต้นระยะที่ 2 เนื้อหา
ของ 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
โดยค่าเริ่มต้น ระบบจะติดตั้งทั้ง 2 รูปแบบของโมดูลไว้ที่
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
เพื่อให้สเตจที่ 2init
อ่านการประทับเวลาบิลด์ของการบูตได้
เนื่องจากทรัพยากรจะย้ายจาก ramdisk ทั่วไปไปยัง ramdisk ของ vendor_boot
ผลลัพธ์
ของการต่อ ramdisk ทั่วไปกับ ramdisk ของ vendor_boot
จึงไม่เปลี่ยนแปลง
ทำให้ e2fsck พร้อมใช้งาน
ไฟล์ Makefile ของอุปกรณ์สามารถรับค่าจากไฟล์ต่อไปนี้
virtual_ab_ota/launch_with_vendor_ramdisk.mk
หากอุปกรณ์รองรับ A/B เสมือน แต่ไม่รองรับการบีบอัดvirtual_ab_ota/compression.mk
หากอุปกรณ์รองรับการบีบอัด A/B เสมือน
ไฟล์ Make ของผลิตภัณฑ์จะติดตั้ง
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
ในเวลา
รันไทม์ สเตจแรก init
จะสลับรูทเป็น /first_stage_ramdisk
จากนั้น
จะเรียกใช้ /system/bin/e2fsck
ตัวเลือกที่ 2ก: พาร์ติชันการกู้คืนเฉพาะและพาร์ติชันการกู้คืน A/B
ใช้ตัวเลือกนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน A/B recovery
นั่นคือ
อุปกรณ์มี recovery_a
และ recovery_b partition
อุปกรณ์ดังกล่าวรวมถึงอุปกรณ์ A/B และอุปกรณ์ A/B เสมือนซึ่งสามารถอัปเดตพาร์ติชันการกู้คืนได้ โดยมีการกำหนดค่าต่อไปนี้
AB_OTA_PARTITIONS += recovery
vendor_boot
ramdisk มีบิตของผู้ให้บริการของ ramdisk และโมดูลเคอร์เนลของผู้ให้บริการ
ซึ่งรวมถึงรายการต่อไปนี้
ไฟล์
fstab
เฉพาะอุปกรณ์lib/modules
(รวมถึงโมดูลเคอร์เนลของผู้ให้บริการ)
recovery
ramdisk มีทรัพยากรการกู้คืนทั้งหมด ในอุปกรณ์ดังกล่าว การกำหนดค่าผลิตภัณฑ์จะรับช่วงจาก
generic_ramdisk.mk
ตั้งค่าบอร์ด
ตั้งค่าต่อไปนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน 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
ไบนารีและลิงก์สัญลักษณ์ของ Init
recovery
ramdisk สามารถมี /init -> /system/bin/init
symlink และ
init_second_stage.recovery
ที่ /system/bin/init
อย่างไรก็ตาม เนื่องจากมีการต่อrecovery
ramdisk หลัง boot
ramdisk จึงมีการเขียนทับ/init
symlink เมื่ออุปกรณ์บูตเข้าสู่โหมดการกู้คืน คุณจะต้องมี/system/bin/init
ไบนารีเพื่อรองรับการเริ่มต้นระยะที่ 2
เมื่ออุปกรณ์บูตเข้าสู่ recovery
เนื้อหาของ recovery
+
vendor_boot
+ ramdisk ทั่วไปจะเป็นดังนี้
/init
(จาก ramdisk ที่สร้างจากinit_first_stage
)/system/bin/init
(จาก Ramdiskrecovery
ที่สร้างจากinit_second_stage.recovery
และเรียกใช้จาก/init
)
เมื่ออุปกรณ์บูตเข้าสู่ Android เนื้อหาของ vendor_boot
+ generic
ramdisks จะเป็นดังนี้
/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 แบบเสมือน
หากต้องการรองรับการบีบอัด Virtual A/B คุณต้องติดตั้ง snapuserd
ใน
vendor_ramdisk
อุปกรณ์ควรรับค่าจาก
virtual_ab_ota/compression.mk
ซึ่งจะติดตั้งvendor_ramdisk
รุ่นย่อยของ snapuserd
การเปลี่ยนแปลงกระบวนการบูต
เมื่อบูตเข้าสู่ Android กระบวนการบูตจะไม่เปลี่ยนแปลง vendor_boot
+
generic ramdisk จะคล้ายกับกระบวนการบูตที่มีอยู่ ยกเว้นว่า fstab
จะโหลดจาก vendor_boot
เนื่องจากไม่มี system/bin/recovery
first_stage_init
จึงจัดการเป็นปกติ
เมื่อบูตเข้าสู่โหมดการกู้คืน กระบวนการบูตจะเปลี่ยนไป การกู้คืน +
vendor_boot
+ ramdisk ทั่วไปจะคล้ายกับกระบวนการกู้คืนที่มีอยู่ แต่
เคอร์เนลจะโหลดจากอิมเมจ boot
แทนที่จะโหลดจากอิมเมจ recovery
กระบวนการบูตสำหรับโหมดการกู้คืนมีดังนี้
Bootloader จะเริ่มทำงาน จากนั้นจะทำสิ่งต่อไปนี้
- ส่งการกู้คืน +
vendor_boot
+ ramdisk ทั่วไปไปยัง/
(ไม่บังคับ หาก OEM ทำซ้ำโมดูลเคอร์เนลใน recovery ramdisk โดยการเพิ่มโมดูลเหล่านั้นลงในBOARD_RECOVERY_KERNEL_MODULES
)vendor_boot
- เรียกใช้เคอร์เนลจากพาร์ติชัน
boot
- ส่งการกู้คืน +
เคอร์เนลจะติดตั้ง ramdisk ไปยัง
/
จากนั้นจะเรียกใช้/init
จาก ramdisk ทั่วไปการเริ่มต้นระยะแรกจะเริ่มขึ้น จากนั้นจะดำเนินการต่อไปนี้
- ตั้งค่า
IsRecoveryMode() == true
และForceNormalBoot() == false
- โหลดโมดูลเคอร์เนลของผู้ให้บริการจาก
/lib/modules
- เรียกใช้
DoFirstStageMount()
แต่ข้ามการติดตั้งเนื่องจากIsRecoveryMode() == true
(อุปกรณ์ไม่ปล่อย RAMDisk (เนื่องจาก/
ยังคงเหมือนเดิม) แต่จะเรียกใช้SetInitAvbVersionInRecovery()
) - เริ่มการเริ่มต้นระยะที่ 2 จาก
/system/bin/init
จากrecovery
ramdisk
- ตั้งค่า
ทำให้ e2fsck พร้อมใช้งาน
ไฟล์ Makefile ของอุปกรณ์สามารถรับค่าจากไฟล์ต่อไปนี้
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
ในเวลา
รันไทม์ ขั้นตอนแรกจะinit
ดำเนินการ/system/bin/e2fsck
ตัวเลือกที่ 2b: พาร์ติชันการกู้คืนเฉพาะและไม่ใช่ A/B
ใช้ตัวเลือกนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน recovery
ที่ไม่ใช่ A/B กล่าวคือ
อุปกรณ์มีพาร์ติชันชื่อ recovery
ที่ไม่มีคำต่อท้ายของสล็อต อุปกรณ์ดังกล่าว
ได้แก่
- อุปกรณ์ที่ไม่ใช่ A/B
- อุปกรณ์ A/B และ Virtual A/B ซึ่งพาร์ติชันการกู้คืนอัปเดตไม่ได้ (ซึ่งเป็นเรื่องผิดปกติ)
vendor_boot
ramdisk มีบิตของผู้ให้บริการของ ramdisk และโมดูลเคอร์เนลของผู้ให้บริการ
ซึ่งรวมถึงรายการต่อไปนี้
- ไฟล์
fstab
เฉพาะอุปกรณ์ lib/modules
(รวมถึงโมดูลเคอร์เนลของผู้ให้บริการ)
recovery
รูปภาพต้องมีเนื้อหาครบถ้วน โดยต้องมีทรัพยากรที่จำเป็นทั้งหมดเพื่อบูตโหมดการกู้คืน ซึ่งรวมถึง
- รูปภาพเคอร์เนล
- อิมเมจ DTBO
- โมดูลเคอร์เนลใน
lib/modules
- init ในระยะแรกเป็นลิงก์สัญลักษณ์
/init -> /system/bin/init
- ไบนารี init ระยะที่ 2
/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
ไบนารีและลิงก์สัญลักษณ์ของ Init
recovery
ramdisk ต้องมี /init -> /system/bin/init
symlink และ
init_second_stage.recovery
ที่ /system/bin/init
เมื่ออุปกรณ์บูตเข้าสู่
โหมดการกู้คืน คุณจะต้องใช้ไบนารี /system/bin/init
เพื่อรองรับทั้ง init ระยะแรกและระยะที่ 2
เมื่ออุปกรณ์บูตเข้าสู่ recovery
เนื้อหาของแรมดิสก์ recovery
จะเป็นดังนี้
/init -> /system/bin/init
(จาก Ramdiskrecovery
)/system/bin/init
(จาก Ramdiskrecovery
ที่สร้างจากinit_second_stage.recovery
และเรียกใช้จาก/init
)
เมื่ออุปกรณ์บูตเข้าสู่ Android เนื้อหาของ vendor_boot
+ generic
ramdisks จะเป็นดังนี้
/init
(จาก ramdisk ที่สร้างจากinit_first_stage
)
ย้ายไฟล์ fstab
ย้ายไฟล์ fstab
ที่ติดตั้งไปยัง ramdisk ทั่วไปไปยัง ramdisk vendor_ramdisk
และ recovery
โปรดดูตัวอย่างในการเปลี่ยนแปลง
นี้
ติดตั้งโมดูล
คุณสามารถติดตั้งโมดูลเฉพาะอุปกรณ์ไปยัง vendor_ramdisk
และ
recovery
ramdisk (ข้าม
ขั้นตอนนี้หากไม่มีโมดูลเฉพาะอุปกรณ์ที่จะติดตั้ง) init
ไม่เปลี่ยนรูท โมดูลvendor_ramdisk
จะติดตั้งในรูทของ vendor_ramdisk
โมดูลเวอร์ชัน recovery
จะติดตั้งใน
รูทของ recovery
ramdisk ดูตัวอย่างการติดตั้งโมดูลไปยัง
vendor_ramdisk
และ recovery
ramdisk ได้ที่
คอนโซลระยะแรกและผลรวมตรวจสอบ
ข้อมูลเมตา
คอนโซลระยะแรก
หากต้องการติดตั้งโมดูลเวอร์ชัน 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
+
generic ramdisk จะคล้ายกับกระบวนการบูตที่มีอยู่ ยกเว้นว่า fstab
จะโหลดจาก vendor_boot
เนื่องจากไม่มี system/bin/recovery
first_stage_init
จึงจัดการเป็นปกติ
เมื่อบูตเข้าสู่โหมดการกู้คืน กระบวนการบูตจะไม่เปลี่ยนแปลง ระบบจะโหลด ramdisk การกู้คืนในลักษณะเดียวกับกระบวนการกู้คืนที่มีอยู่
ระบบจะโหลดเคอร์เนลจากอิมเมจ recovery
กระบวนการบูตสำหรับโหมดการกู้คืนมีดังนี้
Bootloader จะเริ่มทำงาน จากนั้นจะทำสิ่งต่อไปนี้
- ส่ง ramdisk การกู้คืนไปยัง
/
- เรียกใช้เคอร์เนลจากพาร์ติชัน
recovery
- ส่ง ramdisk การกู้คืนไปยัง
เคอร์เนลจะติดตั้ง ramdisk ไปยัง
/
จากนั้นจะเรียกใช้/init
ซึ่งเป็น Symlink ไปยัง/system/bin/init
จาก ramdisk ของrecovery
การเริ่มต้นระยะแรกจะเริ่มขึ้น จากนั้นจะดำเนินการต่อไปนี้
- ตั้งค่า
IsRecoveryMode() == true
และForceNormalBoot() == false
- โหลดโมดูลเคอร์เนลของผู้ให้บริการจาก
/lib/modules
- เรียกใช้
DoFirstStageMount()
แต่ข้ามการติดตั้งเนื่องจากIsRecoveryMode() == true
(อุปกรณ์ไม่ปล่อย RAMDisk (เนื่องจาก/
ยังคงเหมือนเดิม) แต่จะเรียกใช้SetInitAvbVersionInRecovery()
) - เริ่มการเริ่มต้นระยะที่ 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