พาร์ติชันการเปิดเครื่องทั่วไป

ใน Android 12 อิมเมจ boot ทั่วไปหรือที่เรียกว่ารูปภาพ Kernel ทั่วไป (GKI) มี RAM ดิสก์ทั่วไปและเคอร์เนล GKI

สำหรับอุปกรณ์ที่เปิดตัวด้วย Android 13 ระบบจะนำ RAM ทั่วไปออกจากอิมเมจ boot และวางในรูปภาพ init_boot แยกต่างหาก การเปลี่ยนแปลงนี้จะทำให้รูปภาพ boot มีเฉพาะเคอร์เนล GKI เท่านั้น

สำหรับการอัปเกรดอุปกรณ์ที่ใช้ Android 12 หรือเคอร์เนลเวอร์ชันเก่าต่อไป RAM เดิมจะยังคงอยู่โดยไม่มีข้อกำหนดสำหรับอิมเมจ init_boot ใหม่

หากต้องการสร้าง RAM disk ทั่วไป ให้ย้ายทรัพยากรเฉพาะของผู้ให้บริการออกจาก RAM disk เพื่อให้ RAM disk ทั่วไปมีเฉพาะ init ระยะที่ 1 และไฟล์พร็อพเพอร์ตี้ที่มีข้อมูลการประทับเวลา

ในอุปกรณ์ที่มีลักษณะดังนี้

  • อย่าใช้พาร์ติชัน recovery เฉพาะ เนื่องจากบิตการกู้คืนทั้งหมดจะย้ายจาก RAM ทั่วไปไปยัง RAM ดิสก์ vendor_boot

  • ใช้พาร์ติชัน recovery โดยเฉพาะ ไม่จำเป็นต้องมีการเปลี่ยนแปลง RAM ดิสก์ recovery เนื่องจาก RAM ดิสก์ recovery เป็นแบบในตัว

สถาปัตยกรรม

แผนภาพต่อไปนี้แสดงสถาปัตยกรรมสำหรับอุปกรณ์ที่ใช้ Android 12 ขึ้นไป อุปกรณ์ที่เปิดตัวด้วย Android 13 จะมีรูปภาพ init_boot ใหม่ที่มี RAMdisk ทั่วไป อุปกรณ์ที่อัปเกรดจาก Android 12 เป็น Android 13 ใช้สถาปัตยกรรมเดียวกันกับใน Android 12

เปิดตัวด้วย Android 13 ไม่มีการกู้คืนเฉพาะ

เปิด/อัปเกรดอุปกรณ์, GKI, ไม่มีการกู้คืนเฉพาะ

รูปที่ 1 อุปกรณ์ที่เปิดหรืออัปเกรดเป็น Android 13 ที่มี GKI ไม่มีการกู้คืนเฉพาะ

เปิดตัวด้วย Android 13 การกู้คืนแบบเฉพาะและ A/B (Ramdisk เฉพาะ)

เปิด/อัปเกรดอุปกรณ์, GKI, การกู้คืนแบบเฉพาะ และ A/B

รูปที่ 2 อุปกรณ์ที่เปิดตัวหรืออัปเกรดเป็น Android 13 ที่ใช้ GKI เฉพาะการกู้คืน และ A/B

ดูรูปภาพนี้หากอุปกรณ์มีพาร์ติชัน recovery_a และ recovery_b

เปิดตัวด้วย Android 13, การกู้คืนเฉพาะและไม่ใช้ A/B (Ramdisk เฉพาะ)

การเปิดตัว/การอัปเกรดอุปกรณ์, GKI, การกู้คืนเฉพาะและที่ไม่ใช่ A/B

รูปที่ 3 อุปกรณ์ที่เปิดหรืออัปเกรดเป็น Android 13 ที่มี GKI, การกู้คืนเฉพาะและไม่ใช่ A/B

ดูรูปภาพนี้หากอุปกรณ์มีพาร์ติชันชื่อ recovery ที่ไม่มีส่วนต่อท้ายเป็น "slot"

เปิดหรืออัปเกรดเป็น Android 12 ไม่มีการกู้คืนโดยเฉพาะ

เปิด/อัปเกรดอุปกรณ์, GKI, ไม่มีการกู้คืนเฉพาะ

รูปที่ 4 อุปกรณ์ที่เปิดหรืออัปเกรดเป็น Android 12 ที่มี GKI ไม่มีการกู้คืนเฉพาะ

เปิดหรืออัปเกรดเป็น Android 12, การกู้คืนเฉพาะและ A/B (Ramdisk เฉพาะ)

การเปิดตัว/อัปเกรดอุปกรณ์, GKI, การกู้คืนเฉพาะและ A/B

รูปที่ 5 อุปกรณ์ที่เปิดตัวหรืออัปเกรดเป็น Android 12 ที่ใช้ GKI เฉพาะการกู้คืน และ A/B

ดูรูปนี้หากอุปกรณ์มีพาร์ติชัน recovery_a และ recovery_b

เปิดหรืออัปเกรดเป็น Android 12, การกู้คืนเฉพาะและไม่ใช้ A/B (Ramdisk เฉพาะ)

การเปิดตัว/การอัปเกรดอุปกรณ์, GKI, การกู้คืนเฉพาะและที่ไม่ใช่ A/B

รูปที่ 6 อุปกรณ์ที่เปิดตัวหรืออัปเกรดเป็น Android 12 ที่ใช้ GKI เฉพาะการกู้คืนที่ไม่ใช่ A/B

ดูรูปภาพนี้หากอุปกรณ์มีพาร์ติชันชื่อ recovery ที่ไม่มีส่วนต่อท้ายเป็น "slot"

อัปเกรดเป็น Android 12, recovery-as-boot (recovery-as-ramdisk)

เปิด/อัปเกรดอุปกรณ์ ไม่มี GKI, การกู้คืนเป็นบูต

รูปที่ 7 อุปกรณ์ที่อัปเกรดเป็น Android 12, ไม่มี GKI, การกู้คืนเป็นบูต

อัปเกรดเป็น Android 12, การกู้คืนเฉพาะ (ramdisk เฉพาะ)

เปิด/อัปเกรดอุปกรณ์ ไม่มี GKI การกู้คืนเฉพาะ

รูปที่ 8 อุปกรณ์ที่อัปเกรดเป็น Android 12, ไม่มี GKI, การกู้คืนเฉพาะ

เนื้อหาของอิมเมจบูท

รูปภาพสำหรับบูตของ Android มีข้อมูลต่อไปนี้

  • เพิ่มรูปภาพ init_boot รูปสำหรับอุปกรณ์ที่จะเปิดตัวด้วย Android 13

    • เวอร์ชันส่วนหัว V4
    • อิมเมจ RAM Disk ทั่วไป
  • รูปภาพ boot ทั่วไป

    • เวอร์ชันส่วนหัว V3 หรือ V4
      • boot_signature สำหรับการรับรอง boot.img ของ GKI (v4 เท่านั้น) GKI boot.img ที่ได้รับการรับรองไม่ได้ลงนามสำหรับการบูตที่ยืนยันแล้ว OEM ยังคงต้องลงนามใน boot.img ที่สร้างขึ้นล่วงหน้าด้วยคีย์ AVB เฉพาะอุปกรณ์
      • ทั่วไป cmdline (GENERIC_KERNEL_CMDLINE)
      • เคอร์เนล GKI
    • อิมเมจ ramdisk ทั่วไป
      • มีเฉพาะในbootรูปภาพจาก Android 12 และเก่ากว่า
  • รูปภาพ vendor_boot (ดูรายละเอียดที่พาร์ติชันสำหรับบูตของผู้ให้บริการ)

    • ส่วนหัว vendor_boot
      • เฉพาะอุปกรณ์ 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 เนื้อหาของ RAM ต้องอยู่เดี่ยวๆ โปรดดูอิมเมจการกู้คืน เช่น
      • lib/modules ต้องมีโมดูลเคอร์เนลทั้งหมดที่จำเป็นในการบูตเข้าสู่โหมดการกู้คืน
      • แรมดิสก์การกู้คืนต้องมี init
      • สำหรับพาร์ติชันการกู้คืน A/B ระบบจะใส่ RAM disk สำหรับการกู้คืนไว้ที่ด้านหน้าของ RAM disk ทั่วไปและ vendor_boot จึงไม่จำเป็นต้องเป็นแบบสแตนด์อโลน เช่น
      • lib/modules อาจมีเฉพาะโมดูลเคอร์เนลเพิ่มเติมที่จําเป็นต่อการบูตโหมดการกู้คืนนอกเหนือจากโมดูลเคอร์เนลในแรมดิสก์ vendor_boot
      • ลิงก์สัญลักษณ์ที่ /init อาจมีอยู่ แต่ถูกบดบังด้วยไบนารี /init ระยะแรกในอิมเมจการเปิดเครื่อง

เนื้อหาอิมเมจ RAMdisk ทั่วไป

แรมดิสก์ทั่วไปประกอบด้วยคอมโพเนนต์ต่อไปนี้

  • init
  • system/etc/ramdisk/build.prop
  • ro.PRODUCT.bootimg.* build พร็อพ
  • ไดเรกทอรีว่างสำหรับจุดมาสก์: debug_ramdisk/, mnt/, dev/, sys/, proc/, metadata/
  • first_stage_ramdisk/
    • ไดเรกทอรีว่างที่ซ้ำกันสำหรับจุดมาสก์: debug_ramdisk/, mnt/, dev/, sys/, proc/, metadata/

การผสานรวมอิมเมจบูท

Flag การสร้างจะควบคุมวิธีสร้างรูปภาพ init_boot, boot, recovery และ vendor_boot ค่าของตัวแปรกระดานบูลีนต้องเป็นสตริง true หรือว่างเปล่า (ซึ่งเป็นค่าเริ่มต้น)

  • TARGET_NO_KERNEL ตัวแปรนี้ระบุว่าบิลด์ใช้อิมเมจการเปิดเครื่องที่สร้างไว้ล่วงหน้าหรือไม่ หากตั้งค่าตัวแปรนี้เป็น true ให้กำหนด BOARD_PREBUILT_BOOTIMAGE ไปยังตำแหน่งของอิมเมจเปิดเครื่องที่สร้างไว้ล่วงหน้า (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img)

  • BOARD_USES_RECOVERY_AS_BOOT ตัวแปรนี้ระบุว่าอุปกรณ์ใช้อิมเมจ recovery เป็นอิมเมจ boot หรือไม่ เมื่อใช้ GKI ตัวแปรนี้จะว่างเปล่าและควรย้ายแหล่งข้อมูลการกู้คืนไปยัง vendor_boot

  • BOARD_USES_GENERIC_KERNEL_IMAGE ตัวแปรนี้บ่งบอกว่ากระดานใช้ GKI ตัวแปรนี้ไม่ส่งผลต่อ sysprops หรือ PRODUCT_PACKAGES

    นี่คือสวิตช์ GKI ระดับบอร์ดที่ตัวแปรต่อไปนี้ทั้งหมดถูกจํากัด

  • BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT. ตัวแปรนี้ควบคุมว่าจะสร้างแหล่งข้อมูลการกู้คืนจาก RAMdisk ไปยัง vendor_boot หรือไม่

    • เมื่อตั้งค่าเป็น true ระบบจะสร้างทรัพยากรการกู้คืนเป็น vendor-ramdisk/ เท่านั้น และจะไม่สร้างเป็น recovery/root/

    • หากเป็นค่าว่าง ระบบจะสร้างทรัพยากรการกู้คืนสำหรับ recovery/root/ เท่านั้นและจะไม่สร้างสำหรับ vendor-ramdisk/

  • BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT ตัวแปรนี้ควบคุมว่าจะสร้างคีย์ GSI AVB ไปยัง vendor_boot หรือไม่

    • เมื่อตั้งค่าเป็น true ในกรณีต่อไปนี้BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT

      • ตั้งค่าแล้ว คีย์ GSI AVB จะสร้างขึ้นเป็น$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb

      • ไม่ได้ตั้งค่าไว้ ระบบจะสร้างคีย์ GSI AVB เป็น $ANDROID_PRODUCT_OUT/vendor-ramdisk/avb

    • เมื่อว่างเปล่า หาก BOARD_RECOVERY_AS_ROOT

      • ตั้งค่าแล้ว คีย์ GSI AVB จะสร้างขึ้นเป็น$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb

      • ไม่ได้ตั้งค่า คีย์ GSI AVB จะสร้างขึ้นไปยัง $ANDROID_PRODUCT_OUT/ramdisk/avb

  • BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE ตัวแปรนี้ควบคุมว่าอิมเมจ recovery มีเคอร์เนลหรือไม่ อุปกรณ์ที่เปิดตัวด้วย Android 12 และใช้พาร์ติชัน A/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 หรือไม่และกำหนดขนาด เมื่อตั้งค่าแล้ว ระบบจะเพิ่ม RAM ทั่วไปลงใน init_boot.img แทน boot.img และกําหนดให้ต้องตั้งค่าตัวแปร BOARD_AVB_INIT_BOOT* สําหรับ vbmeta แบบเชน

ชุดค่าผสมที่อนุญาต

คอมโพเนนต์หรือตัวแปร อัปเกรดอุปกรณ์โดยไม่มีพาร์ติชันการกู้คืน อัปเกรดอุปกรณ์ด้วยพาร์ติชันการกู้คืน เปิดอุปกรณ์โดยไม่มีพาร์ติชันการกู้คืน เปิดอุปกรณ์ด้วยพาร์ติชันการกู้คืน A/B เปิดอุปกรณ์ที่มีพาร์ติชันการกู้คืนที่ไม่ใช่ A/B aosp_arm64
มี boot ใช่ ใช่ ใช่ ใช่ ใช่ ใช่
มี init_boot (Android 13) ไม่ ไม่ ใช่ ใช่ ใช่ ใช่
มี vendor_boot ไม่บังคับ ไม่บังคับ ใช่ ใช่ ใช่ ไม่
มี recovery ไม่ ใช่ ไม่ ใช่ ใช่ ไม่
BOARD_USES_RECOVERY_AS_BOOT true ว่าง ว่าง ว่าง ว่าง ว่าง
BOARD_USES_GENERIC_KERNEL_IMAGE ว่าง ว่าง true true true true
PRODUCT_BUILD_RECOVERY_IMAGE ว่าง true หรือว่างเปล่า ว่าง true หรือว่างเปล่า true หรือว่างเปล่า ว่าง
BOARD_RECOVERYIMAGE_PARTITION_SIZE ว่าง > 0 ว่าง มากกว่า 0 มากกว่า 0 ว่าง
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT ว่าง ว่าง true ว่าง ว่าง ว่าง
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT ว่าง ว่าง true true true ว่าง
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE ว่าง ว่าง ว่าง true ว่าง ว่าง
BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES ว่าง ว่าง ว่าง ว่าง ว่าง true

อุปกรณ์ที่มีพาร์ติชัน recovery โดยเฉพาะจะตั้งค่า PRODUCT_BUILD_RECOVERY_IMAGE เป็น true หรือว่างเปล่าได้ สำหรับอุปกรณ์เหล่านี้ หากตั้งค่า BOARD_RECOVERYIMAGE_PARTITION_SIZE ระบบจะสร้างอิมเมจ recovery

เปิดใช้ vbmeta แบบเชนสำหรับบูต

ต้องเปิดใช้ vbmeta แบบเชนสำหรับอิมเมจ boot และ init_boot ระบุข้อมูลต่อไปนี้

BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA4096
BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2

BOARD_AVB_INIT_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_INIT_BOOT_ALGORITHM := SHA256_RSA2048
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX_LOCATION := 3

โปรดดูตัวอย่างการเปลี่ยนแปลงนี้

รากของระบบ

อุปกรณ์ที่ใช้ GKI ไม่รองรับระบบในรูท ในอุปกรณ์ดังกล่าว BOARD_BUILD_SYSTEM_ROOT_IMAGE ต้องว่างเปล่า ระบบยังไม่รองรับการใช้พาร์ติชันแบบไดนามิกสำหรับอุปกรณ์ที่ใช้พาร์ติชันแบบไดนามิก

การกำหนดค่าผลิตภัณฑ์

อุปกรณ์ที่ใช้ RAM disk ทั่วไปต้องติดตั้งรายการไฟล์ที่ได้รับอนุญาตให้ติดตั้งใน RAM disk โดยระบุข้อมูลต่อไปนี้ใน device.mk

$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)

ไฟล์ generic_ramdisk.mk ยังป้องกันไม่ให้ไฟล์ make อื่นๆ ติดตั้งไฟล์อื่นๆ ลงในแรมดิสก์โดยไม่ตั้งใจด้วย (ให้ย้ายไฟล์ดังกล่าวไปยัง vendor_ramdisk แทน)

ตั้งค่าอุปกรณ์

วิธีการตั้งค่าจะแตกต่างกันไปตามอุปกรณ์ที่เปิดตัวมาพร้อมกับ Android 13, การอัปเกรดเป็น Android 12 และการเปิดตัวมาพร้อมกับ Android 12 Android 13 มีการตั้งค่าคล้ายกับใน Android 12

  • อุปกรณ์ที่อัปเกรดเป็น Android 12

    • รักษาค่าของ BOARD_USES_RECOVERY_AS_BOOT ได้ หากมี ก็แสดงว่าใช้การกำหนดค่าเดิมและตัวแปรบิลด์ใหม่ต้องว่างเปล่า หากอุปกรณ์ดังกล่าว

      • ตั้งค่า BOARD_USES_RECOVERY_AS_BOOT เป็น true สถาปัตยกรรมดังที่แสดงในรูปที่ 3

      • ตั้งค่า BOARD_USES_RECOVERY_AS_BOOT เป็นค่าว่าง สถาปัตยกรรมจะดังที่แสดงในรูปที่ 4

    • ตั้งค่า 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 มีทรัพยากรการกู้คืนทั้งหมด รวมถึง 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

แรมดิสก์ vendor_boot อาจมีลิงก์สัญลักษณ์ /init ไปยัง /system/bin/init และ init_second_stage.recovery ที่ /system/bin/init แต่เนื่องจาก ramdisk ทั่วไปเชื่อมต่อกันหลังจากแรมดิสก์ vendor_boot ระบบจึงเขียนทับลิงก์สัญลักษณ์ /init เมื่ออุปกรณ์บูตเข้าสู่ Recovery จะต้องมีไฟล์ไบนารี /system/bin/init เพื่อรองรับการเริ่มต้นระยะที่ 2 เนื้อหาของ vendor_boot + แรมดิสก์ทั่วไปมีดังนี้

  • /init (จาก RAM disk ทั่วไปที่สร้างจาก init_first_stage)
  • /system/bin/init (จาก vendor_ramdisk สร้างขึ้นจาก init_second_stage.recovery)

ย้ายไฟล์ fstab

ย้ายไฟล์ fstab ที่ติดตั้งไว้ใน RAM disk ทั่วไปไปยัง vendor_ramdisk โปรดดูตัวอย่างการเปลี่ยนแปลงนี้

ติดตั้งโมดูล

คุณสามารถติดตั้งโมดูลเฉพาะอุปกรณ์ใน vendor_ramdisk (ข้ามขั้นตอนนี้หากคุณไม่มีโมดูลเฉพาะอุปกรณ์ที่จะติดตั้ง)

  • ใช้ตัวแปร vendor_ramdisk ของโมดูลเมื่อโมดูลติดตั้งใน /first_stage_ramdisk โมดูลนี้ควรพร้อมใช้งานหลังจากที่ init เปลี่ยนรูทเป็น /first_stage_ramdisk แต่ก่อนที่ init จะเปลี่ยนรูทเป็น /system ดูตัวอย่างได้ที่การตรวจสอบผลรวมข้อมูลเมตาและการบีบอัด A/B เสมือน

  • ใช้ตัวแปร recovery ของโมดูลเมื่อติดตั้งโมดูลใน / โมดูลนี้ควรพร้อมใช้งานก่อนที่ init จะเปลี่ยนรูทเป็น /first_stage_ramdisk โปรดดูรายละเอียดเกี่ยวกับการติดตั้งโมดูลใน / ที่หัวข้อคอนโซลระยะแรก

คอนโซลระยะแรก

เนื่องจากคอนโซลระยะแรกจะเริ่มขึ้นก่อนที่ init จะเปลี่ยนรูทเป็น /first_stage_ramdisk คุณจึงต้องติดตั้งโมดูลเวอร์ชัน recovery โดยค่าเริ่มต้น ระบบจะติดตั้งตัวแปรของโมดูลทั้ง 2 รายการลงใน build/make/target/product/base_vendor.mk ดังนั้นหากไฟล์ Make ของอุปกรณ์รับค่าจากไฟล์นั้น คุณไม่จําเป็นต้องติดตั้งตัวแปร recovery อย่างชัดเจน

หากต้องการติดตั้งโมดูลการกู้คืนอย่างชัดเจน ให้ใช้คำสั่งต่อไปนี้

PRODUCT_PACKAGES += \
    linker.recovery \
    shell_and_utilities_recovery \

การดำเนินการนี้จะตรวจสอบว่า linker, sh และ toybox ติดตั้งไปยัง $ANDROID_PRODUCT_OUT/recovery/root/system/bin ซึ่งจะติดตั้งไปยัง /system/bin ภายใต้ vendor_ramdisk

หากต้องการเพิ่มโมดูลที่จําเป็นสําหรับคอนโซลระยะที่ 1 (เช่น adbd) ให้ใช้คำสั่งต่อไปนี้

PRODUCT_PACKAGES += adbd.recovery

วิธีนี้ช่วยให้มั่นใจได้ว่าโมดูลที่ระบุจะติดตั้งใน $ANDROID_PRODUCT_OUT/recovery/root/system/bin ซึ่งจะติดตั้งใน /system/bin ภายใต้ vendor_ramdisk

Checksum ข้อมูลเมตา

อุปกรณ์ที่ไม่รองรับ GKI จะติดตั้งตัวแปรของ RAMdisk ของข้อบังคับต่อไปนี้เพื่อรองรับการตรวจสอบข้อมูลเมตาขณะที่ระบบทำการเมานต์ระยะแรก หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปยัง $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    resize2fs.vendor_ramdisk \
    tune2fs.vendor_ramdisk \

ตัวอย่างเช่น โปรดดูรายการการเปลี่ยนแปลงนี้

การบีบอัด A/B เสมือน

หากต้องการรองรับการบีบอัด A/B เสมือน คุณต้องติดตั้ง snapuserd ใน vendor_ramdisk อุปกรณ์ควรรับค่าจาก virtual_ab_ota/compression.mk ซึ่งติดตั้งตัวแปร vendor_ramdisk ของ snapuserd

การเปลี่ยนแปลงขั้นตอนการเปิดเครื่อง

กระบวนการบูตเข้าสู่ Recovery หรือ Android จะไม่มีการเปลี่ยนแปลง ยกเว้นในกรณีต่อไปนี้

  • Ramdisk build.prop ย้ายไปยัง /second_stage_resources เพื่อให้ขั้นที่ 2 init อ่านการประทับเวลาบิลด์ของการเปิดเครื่องได้

เนื่องจากมีการย้ายทรัพยากรจาก RAM disk ทั่วไปไปยัง RAM disk vendor_boot ผลลัพธ์ของการต่อ RAM disk ทั่วไปไปยัง RAM disk vendor_boot จึงไม่มีการเปลี่ยนแปลง

ทำให้ e2fsck พร้อมใช้งาน

ไฟล์ Make ของอุปกรณ์สามารถรับค่าจากรายการต่อไปนี้

  • virtual_ab_ota/launch_with_vendor_ramdisk.mk หากอุปกรณ์รองรับการทดสอบ A/B เสมือนจริงแต่ไม่รองรับการบีบอัด

  • virtual_ab_ota/compression.mk หากอุปกรณ์รองรับการบีบอัด A/B เสมือน

ผลิตภัณฑ์จะติดตั้ง $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck ในระยะรันไทม์ ระยะที่ 1 init จะเปลี่ยนรูทเป็น /first_stage_ramdisk แล้วดำเนินการ /system/bin/e2fsck

ตัวเลือกที่ 2ก: พาร์ติชันการกู้คืนเฉพาะและ A/B

ใช้ตัวเลือกนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน recovery แบบ A/B กล่าวคือ อุปกรณ์มี recovery_a และ recovery_b partition อุปกรณ์ดังกล่าวรวมถึงอุปกรณ์ A/B และ A/B เสมือนซึ่งสามารถอัปเดตพาร์ติชันการกู้คืนได้ โดยมีการกำหนดค่าต่อไปนี้

AB_OTA_PARTITIONS += recovery

แรมดิสก์ vendor_boot มีบิตของผู้ให้บริการสำหรับแรมดิสก์และโมดูลเคอร์เนลของผู้ให้บริการ ซึ่งรวมถึงรายการต่อไปนี้

  • ไฟล์ fstab สำหรับอุปกรณ์โดยเฉพาะ

  • lib/modules (รวมถึงโมดูลเคอร์เนลของผู้ให้บริการ)

แรมดิสก์ recovery มีทรัพยากรการกู้คืนทั้งหมด การกำหนดค่าผลิตภัณฑ์จะรับค่ามาจาก generic_ramdisk.mk ในอุปกรณ์ดังกล่าว

ตั้งค่า BOARD

ตั้งค่าต่อไปนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน recovery A/B

BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE := true
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true

แรมดิสก์ recovery อาจมี /init -> /system/bin/init symlink และ init_second_stage.recovery ที่ /system/bin/init อย่างไรก็ตาม เนื่องจากระบบจะต่อเชื่อมไฟล์ RAM ของบูตต่อจากไฟล์ RAM ของ recovery ระบบจึงเขียนทับสัญลักษณ์ลิงก์ /init เมื่ออุปกรณ์บูตเข้าสู่โหมดการกู้คืน /system/bin/initต้องใช้ไฟล์ไบนารีเพื่อรองรับการเริ่มต้นระยะที่ 2

เมื่ออุปกรณ์บูตเข้าสู่ recovery เนื้อหาของ recovery + vendor_boot + แรมดิสก์ทั่วไปจะเป็นดังนี้

  • /init (จาก RAM disk ที่สร้างขึ้นจาก init_first_stage)
  • /system/bin/init (จากแรมดิสก์ recovery ที่สร้างขึ้นจาก init_second_stage.recovery และดำเนินการจาก /init)

เมื่ออุปกรณ์บูตเข้าสู่ Android เนื้อหาของ vendor_boot + generic ramdisks จะเป็นดังนี้

  • /init (จาก RAM disk ทั่วไปที่สร้างจาก init_first_stage)

ย้ายไฟล์ fstab

ย้ายไฟล์ fstab ที่ติดตั้งไว้ใน RAM disk ทั่วไปไปยัง vendor_ramdisk โปรดดูตัวอย่างการเปลี่ยนแปลงนี้

ติดตั้งโมดูล

คุณอาจติดตั้งข้อบังคับเฉพาะอุปกรณ์ใน vendor_ramdisk (ข้ามขั้นตอนนี้หากคุณไม่มีข้อบังคับเฉพาะอุปกรณ์ที่จะติดตั้ง) Init ไม่เปลี่ยนเป็นรูท โมดูลตัวแปร vendor_ramdisk จะติดตั้งในรูทของ vendor_ramdisk ดูตัวอย่างการติดตั้งโมดูลไปยัง vendor_ramdisk ได้ที่คอนโซลขั้นตอนแรก การตรวจสอบข้อมูลเมตา และการบีบอัด A/B เสมือน

คอนโซลระยะแรก

หากต้องการติดตั้งโมดูลเวอร์ชัน vendor_ramdisk ให้ใช้คำสั่งต่อไปนี้

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    shell_and_utilities_vendor_ramdisk \

วิธีนี้ช่วยให้มั่นใจได้ว่า linker, sh และ toybox จะติดตั้งใน $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin ซึ่งจะติดตั้งใน /system/bin ภายใต้ vendor_ramdisk

หากต้องการเพิ่มโมดูลที่จําเป็นสําหรับคอนโซลระยะที่ 1 (เช่น adbd) ให้เปิดใช้ตัวแปร vendor_ramdisk ของโมดูลเหล่านี้โดยการอัปโหลดแพตช์ที่เกี่ยวข้องไปยัง AOSP จากนั้นใช้คำสั่งต่อไปนี้

PRODUCT_PACKAGES += adbd.vendor_ramdisk

ซึ่งช่วยให้มั่นใจได้ว่าโมดูลที่ระบุจะติดตั้งใน $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin หากโหลดvendor_boot ramdisk ในโหมดการกู้คืน โมดูลจะพร้อมใช้งานในrecoveryด้วย หากระบบไม่โหลดแรมดิสก์ vendor_boot ในโหมดการกู้คืน อุปกรณ์จะติดตั้ง adbd.recovery ด้วยก็ได้

Checksum ข้อมูลเมตา

เพื่อให้รองรับการตรวจสอบข้อมูลเมตาระหว่างการต่อเชื่อมขั้นแรก อุปกรณ์ที่ไม่รองรับ GKI จะติดตั้งตัวแปร RAM ของโมดูลต่อไปนี้ หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปที่ $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    resize2fs.vendor_ramdisk \
    tune2fs.vendor_ramdisk \

โปรดดูตัวอย่างที่รายการการเปลี่ยนแปลงนี้

การบีบอัด A/B เสมือน

ต้องติดตั้ง snapuserd ใน vendor_ramdisk เพื่อรองรับการบีบอัด A/B เสมือน อุปกรณ์ควรรับค่าจาก virtual_ab_ota/compression.mk ซึ่งติดตั้งตัวแปร vendor_ramdisk ของ snapuserd

การเปลี่ยนแปลงขั้นตอนการเปิดเครื่อง

เมื่อเปิดเครื่องใน Android ขั้นตอนการเปิดเครื่องจะไม่เปลี่ยนแปลง vendor_boot + Ramdisk ทั่วไปจะคล้ายกับกระบวนการบูตที่มีอยู่ ยกเว้นว่า fstabจะโหลดจาก vendor_boot เนื่องจากไม่มี system/bin/recovery first_stage_init จึงจัดการเป็นการบูตตามปกติ

เมื่อบูตเข้าสู่โหมดการกู้คืน กระบวนการบูตจะเปลี่ยนแปลง การกู้คืน + vendor_boot + แรมดิสก์ทั่วไปจะคล้ายกับกระบวนการกู้คืนที่มีอยู่ แต่ระบบจะโหลดเคอร์เนลจากอิมเมจ boot แทนอิมเมจ recovery กระบวนการบูตสำหรับโหมดการกู้คืนมีดังนี้

  1. Bootloader จะเริ่มทำงาน แล้วทำสิ่งต่อไปนี้

    1. พุชการกู้คืน + vendor_boot + แรมดิสก์ทั่วไปไปยัง / (หาก OEM ทำซ้ำโมดูลเคอร์เนลใน RAM การกู้คืนด้วยการเพิ่มโมดูลเคอร์เนลลงใน BOARD_RECOVERY_KERNEL_MODULES) คุณจะเลือกใช้ vendor_boot ก็ได้)
    2. เรียกใช้เคอร์เนลจากพาร์ติชัน boot
  2. เคอร์เนลจะต่อเชื่อม RAM disk กับ / จากนั้นจะเรียกใช้ /init จาก RAM disk ทั่วไป

  3. ระยะแรกจะเริ่มต้นการเริ่มต้น จากนั้นจะทำสิ่งต่อไปนี้

    1. ชุด IsRecoveryMode() == true และ ForceNormalBoot() == false
    2. โหลดโมดูลเคอร์เนลของผู้ให้บริการจาก /lib/modules
    3. โทรหา DoFirstStageMount() แต่ข้ามการต่อเชื่อมเนื่องจาก IsRecoveryMode() == true (อุปกรณ์ไม่เพิ่มพื้นที่ว่างสำหรับ RAM (เนื่องจาก / ยังเหมือนเดิม) แต่เรียกใช้ SetInitAvbVersionInRecovery())
    4. เริ่มการเริ่มต้นระยะที่ 2 จาก /system/bin/init จากแรมดิสก์ recovery

ทำให้ e2fsck พร้อมใช้งาน

ไฟล์ Make ของอุปกรณ์สามารถรับค่าจากรายการต่อไปนี้

  • virtual_ab_ota/launch_with_vendor_ramdisk.mk หากอุปกรณ์รองรับการทดสอบ A/B เสมือนจริงแต่ไม่รองรับการบีบอัด

  • virtual_ab_ota/compression.mk หากอุปกรณ์รองรับการบีบอัด A/B เสมือน

ติดตั้งไฟล์ Make ของผลิตภัณฑ์ $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck ในระยะรันไทม์ ระยะที่ 1 init จะดำเนินการ /system/bin/e2fsck

ตัวเลือกที่ 2ข: พาร์ติชันการกู้คืนเฉพาะและไม่ใช่ A/B

ใช้ตัวเลือกนี้สำหรับอุปกรณ์ที่มีพาร์ติชัน recovery ที่ไม่ใช่ A/B กล่าวคือ อุปกรณ์มีพาร์ติชันชื่อ recovery โดยไม่มีคำต่อท้ายช่อง อุปกรณ์ดังกล่าวได้แก่

  • อุปกรณ์ที่ไม่ใช่ A/B
  • A/B และอุปกรณ์ A/B เสมือน ซึ่งพาร์ติชันการกู้คืนไม่สามารถอัปเดตได้ (ซึ่งผิดปกติ)

แรมดิสก์ vendor_boot มีบิตของผู้ให้บริการสำหรับแรมดิสก์และโมดูลเคอร์เนลของผู้ให้บริการ ซึ่งรวมถึงรายการต่อไปนี้

  • ไฟล์ fstab สำหรับอุปกรณ์โดยเฉพาะ
  • lib/modules (รวมถึงโมดูลเคอร์เนลของผู้ให้บริการ)

รูปภาพ recovery ต้องแสดงข้อมูลทั้งหมด โดยต้องมีทรัพยากรที่จำเป็นทั้งหมดในการบูตโหมดการกู้คืน ซึ่งรวมถึง

  • อิมเมจเคอร์เนล
  • รูปภาพ DTBO
  • โมดูลเคอร์เนลใน lib/modules
  • อินิจเคชันระยะที่ 1 เป็นลิงก์สัญลักษณ์ /init -> /system/bin/init
  • ไบนารี init ระยะที่ 2 /system/bin/init
  • ไฟล์ fstab สำหรับอุปกรณ์โดยเฉพาะ
  • แหล่งข้อมูลการกู้คืนอื่นๆ ทั้งหมด รวมถึงไฟล์ recovery

ในอุปกรณ์ดังกล่าว การกําหนดค่าผลิตภัณฑ์จะรับค่าจาก generic_ramdisk.mk

ตั้งค่า BOARD

ตั้งค่าต่อไปนี้สำหรับอุปกรณ์ที่ไม่ใช่ A/B

BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE :=
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true

แรมดิสก์ recovery ต้องมี /init -> /system/bin/init symlink และ init_second_stage.recovery ที่ /system/bin/init เมื่ออุปกรณ์บูตเข้าสู่โหมดการกู้คืน คุณต้องใช้ไบนารี /system/bin/init เพื่อรองรับทั้งการเริ่มต้นระยะที่ 1 และระยะที่ 2

เมื่ออุปกรณ์บูตเข้าสู่ recovery เนื้อหาของแรมดิสก์ recovery จะเป็นดังนี้

  • /init -> /system/bin/init (จากแรมดิสก์ recovery)
  • /system/bin/init (จากแรมดิสก์ recovery ที่สร้างขึ้นจาก init_second_stage.recovery และดำเนินการจาก /init)

เมื่ออุปกรณ์เปิดเครื่องใน Android เนื้อหาของ vendor_boot + RAM ทั่วไปมีดังนี้

  • /init (จาก ramdisk สร้างจาก init_first_stage)

ย้ายไฟล์ fstab

ย้ายไฟล์ fstab ที่ติดตั้งไปยัง RAM ทั่วไปไปยัง RAM ดิสก์ vendor_ramdisk และ recovery โปรดดูตัวอย่างการเปลี่ยนแปลงนี้

ติดตั้งโมดูล

คุณสามารถติดตั้งโมดูลเฉพาะอุปกรณ์ลงในแรมดิสก์ของ vendor_ramdisk และ recovery (ข้ามขั้นตอนนี้หากคุณไม่มีโมดูลเฉพาะอุปกรณ์ที่จะติดตั้ง) init ไม่เปลี่ยนรูท โมดูลตัวแปร vendor_ramdisk จะติดตั้งในรูทของ vendor_ramdisk ตัวแปร recovery ของโมดูลจะติดตั้งลงในรูทของแรมดิสก์ recovery ดูตัวอย่างการติดตั้งโมดูลในแรมดิสก์ vendor_ramdisk และ recovery ได้ที่คอนโซลระยะที่ 1 และการตรวจสอบข้อมูลเมตา

คอนโซลระยะแรก

หากต้องการติดตั้งโมดูลเวอร์ชัน vendor_ramdisk ให้ใช้คำสั่งต่อไปนี้

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    shell_and_utilities_vendor_ramdisk \

วิธีนี้ช่วยให้มั่นใจได้ว่า linker, sh และ toybox จะติดตั้งใน $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin ซึ่งจะติดตั้งใน /system/bin ภายใต้ vendor_ramdisk

หากต้องการเพิ่มโมดูลที่จําเป็นสําหรับคอนโซลระยะที่ 1 (เช่น adbd) ให้เปิดใช้ตัวแปร vendor_ramdisk ของโมดูลเหล่านี้โดยการอัปโหลดแพตช์ที่เกี่ยวข้องไปยัง AOSP จากนั้นใช้คำสั่งต่อไปนี้

PRODUCT_PACKAGES += adbd.vendor_ramdisk

ซึ่งจะช่วยให้มั่นใจได้ว่าโมดูลที่ระบุจะติดตั้งใน $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin

หากต้องการติดตั้งโมดูลเวอร์ชัน recovery ให้แทนที่ vendor_ramdisk ด้วย recovery ดังนี้

PRODUCT_PACKAGES += \
    linker.recovery \
    shell_and_utilities_recovery \
    adbd.recovery \

การตรวจสอบข้อผิดพลาดข้อมูลเมตา

อุปกรณ์ที่ไม่รองรับ GKI จะติดตั้งตัวแปรของแรมดิสก์ของข้อบังคับต่อไปนี้เพื่อรองรับการตรวจสอบข้อมูลเมตาขณะที่ระบบทำการเมานต์ระยะแรก หากต้องการเพิ่มการรองรับ GKI ให้ย้ายโมดูลไปยัง $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    resize2fs.vendor_ramdisk \
    tune2fs.vendor_ramdisk \

หากต้องการรองรับการตรวจสอบผลรวมข้อมูลเมตาระหว่างการต่อเชื่อมระยะที่ 1 ในการกู้คืน ให้เปิดใช้ตัวแปรการกู้คืนของโมดูลเหล่านี้และติดตั้งด้วย

การเปลี่ยนแปลงขั้นตอนการเปิดเครื่อง

เมื่อบูตเข้าสู่ Android กระบวนการบูตจะไม่เปลี่ยนแปลง vendor_boot + Ramdisk ทั่วไปจะคล้ายกับกระบวนการบูตที่มีอยู่ ยกเว้นว่า fstabจะโหลดจาก vendor_boot เนื่องจากไม่มี system/bin/recovery first_stage_init จึงจัดการการบูตเป็นบูตปกติ

เมื่อบูตเข้าสู่โหมดการกู้คืน กระบวนการบูตจะไม่เปลี่ยนแปลง ระบบจะโหลด RAMdisk สำหรับการกู้คืนในลักษณะเดียวกับกระบวนการกู้คืนที่มีอยู่ ระบบจะโหลดเคอร์เนลจากรูปภาพ recovery ขั้นตอนการเปิดเครื่องสำหรับโหมดการกู้คืนมีดังนี้

  1. Bootloader จะเริ่มทำงาน แล้วทำสิ่งต่อไปนี้

    1. พุช RAM disk สำหรับการกู้คืนไปยัง /
    2. เรียกใช้เคอร์เนลจากพาร์ติชัน recovery
  2. เคอร์เนลจะต่อเชื่อม RAM disk กับ / จากนั้นจะเรียกใช้ /init ซึ่งเป็นลิงก์สัญลักษณ์ไปยัง /system/bin/init จาก RAM disk ของ recovery

  3. ขั้นแรก init จะเริ่มต้น จากนั้นดำเนินการดังนี้

    1. ชุด IsRecoveryMode() == true และ ForceNormalBoot() == false
    2. โหลดโมดูลเคอร์เนลของผู้ให้บริการจาก /lib/modules
    3. โทรหา DoFirstStageMount() แต่ข้ามการต่อเชื่อมเนื่องจาก IsRecoveryMode() == true (อุปกรณ์ไม่เพิ่มพื้นที่ว่างสำหรับ RAM (เนื่องจาก / ยังเหมือนเดิม) แต่เรียกใช้ SetInitAvbVersionInRecovery())
    4. เริ่มการเริ่มต้นระยะที่ 2 จาก /system/bin/init จากแรมดิสก์ recovery

การประทับเวลาของอิมเมจบูท

โค้ดต่อไปนี้เป็นตัวอย่างไฟล์การประทับเวลารูปภาพ boot

####################################
# from generate-common-build-props
# These properties identify this partition image.
####################################
ro.product.bootimage.brand=Android
ro.product.bootimage.device=generic_arm64
ro.product.bootimage.manufacturer=unknown
ro.product.bootimage.model=AOSP on ARM64
ro.product.bootimage.name=aosp_arm64
ro.bootimage.build.date=Mon Nov 16 22:46:27 UTC 2020
ro.bootimage.build.date.utc=1605566787
ro.bootimage.build.fingerprint=Android/aosp_arm64/generic_arm64:S/MASTER/6976199:userdebug/test-keys
ro.bootimage.build.id=MASTER
ro.bootimage.build.tags=test-keys
ro.bootimage.build.type=userdebug
ro.bootimage.build.version.incremental=6976199
ro.bootimage.build.version.release=11
ro.bootimage.build.version.release_or_codename=S
ro.bootimage.build.version.sdk=30
# Auto-added by post_process_props.py
persist.sys.usb.config=none
# end of file
  • ในเวลาบิลด์ จะมีการเพิ่มไฟล์ system/etc/ramdisk/build.prop ลงใน RAM ทั่วไป ไฟล์นี้มีข้อมูลการประทับเวลาของบิลด์

  • ในระยะรันไทม์ init ระยะที่ 1 จะคัดลอกไฟล์จากแรมดิสก์ไปยัง tmpfs ก่อนปล่อยแรมดิสก์เพื่อให้ init ระยะที่ 2 อ่านไฟล์นี้เพื่อตั้งค่าพร็อพเพอร์ตี้การประทับเวลาของรูปภาพ boot ได้