ใน 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 ทั่วไปไปยัง ramdisk- vendor_boot
- ใช้พาร์ติชัน - recoveryโดยเฉพาะ ไม่จำเป็นต้องเปลี่ยนแปลง- recoveryramdisk เนื่องจาก- recoveryramdisk มีการควบคุมในตัว
สถาปัตยกรรม
แผนภาพต่อไปนี้แสดงสถาปัตยกรรมสำหรับอุปกรณ์ที่ใช้ 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 เท่านั้น) GKI- boot.imgที่ ได้รับการรับรองไม่ได้ลงนามสำหรับการเปิดเครื่องที่ได้รับการยืนยัน OEM ยังคงต้องลงนามใน- boot.imgที่สร้างไว้ล่วงหน้าด้วยคีย์ AVB เฉพาะอุปกรณ์
- cmdlineทั่วไป (- GENERIC_KERNEL_CMDLINE)
- เคอร์เนล GKI
 
- อิมเมจแรมดิสก์ทั่วไป
- รวมเฉพาะในbootรูปภาพจาก Android 12 และเวอร์ชันก่อนหน้า
 
- รวมเฉพาะใน
 
- เวอร์ชันส่วนหัว V3 หรือ
V4
- vendor_bootimage (ดูรายละเอียดได้ที่พาร์ติชันการบูตของผู้ให้บริการ)- vendor_bootheader- cmdlineเฉพาะอุปกรณ์ (- BOARD_KERNEL_CMDLINE)
 
- vendor_bootอิมเมจ ramdisk- 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_bootramdisk
- 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/B- recoveryต้องตั้งค่าตัวแปรนี้เป็น- 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(จาก Ramdisk- recoveryที่สร้างจาก- 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จากrecoveryramdisk
 
- ตั้งค่า 
ทำให้ 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(จาก Ramdisk- recovery)
- /system/bin/init(จาก Ramdisk- recoveryที่สร้างจาก- 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จากrecoveryramdisk
 
- ตั้งค่า 
การประทับเวลาของอิมเมจบูต
โค้ดต่อไปนี้เป็นตัวอย่าง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
