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

ใน Android 12 อิมเมจ boot ทั่วไปซึ่งเรียกว่า Generic Kernel Image (GKI) จะมี RAMdisk ทั่วไปและเคิร์ก GKI

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

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

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

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

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

  • ใช้พาร์ติชัน recovery โดยเฉพาะ โดยไม่จำเป็นต้องเปลี่ยนแปลงแรมดิสก์ recovery เนื่องจากแรมดิสก์ 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 (เวอร์ชัน 4 เท่านั้น) GKI boot.img ที่ได้รับการรับรองไม่ได้ลงนามสำหรับการเปิดเครื่องที่ได้รับการยืนยัน OEM ยังคงต้องลงนามใน boot.img ที่สร้างขึ้นล่วงหน้าด้วยคีย์ AVB สำหรับอุปกรณ์โดยเฉพาะ
      • ทั่วไป cmdline (GENERIC_KERNEL_CMDLINE)
      • เคอร์เนล GKI
    • อิมเมจ RAM disk ทั่วไป
      • มีเฉพาะในbootรูปภาพจาก Android 12 และเก่ากว่า
  • รูปภาพ vendor_boot (ดูรายละเอียดที่พาร์ติชันสำหรับบูตของผู้ให้บริการ)

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

เนื้อหาอิมเมจ 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 มี Kernel หรือไม่ อุปกรณ์ที่เปิดตัวด้วย 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

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

ระบบเป็นรูท

อุปกรณ์ที่ใช้ 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 ยังป้องกันไม่ให้ไฟล์อื่นๆ ของ Makefile ติดตั้งไฟล์อื่นๆ ลงในแรมดิสก์โดยไม่ตั้งใจด้วย (ให้ย้ายไฟล์ดังกล่าวไปยัง 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 อย่างไรก็ตาม เนื่องจากมีการต่อท้ายแรมดิสก์ทั่วไปต่อจากแรมดิสก์ 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 โปรดดูรายละเอียดเกี่ยวกับการติดตั้งโมดูลใน / ที่หัวข้อคอนโซลระยะแรก

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

เนื่องจากคอนโซลระยะที่ 1 จะเริ่มทำงานก่อนที่ 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 จะติดตั้งแรมดิสก์ของตัวแปรต่อไปนี้ของโมดูลเพื่อรองรับการตรวจสอบข้อมูลเมตาขณะที่ทำการต่อเชื่อมระยะแรก หากต้องการเพิ่มการรองรับ 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 ซึ่งติดตั้ง snapuserd เวอร์ชัน vendor_ramdisk

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

กระบวนการบูตเข้าสู่ 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 เสมือน

ติดตั้งไฟล์ Make ของผลิตภัณฑ์ $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 ได้ที่คอนโซลระยะที่ 1, การตรวจสอบข้อมูลเมตา และการบีบอัด 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 จะติดตั้งแรมดิสก์รูปแบบต่างๆ ของโมดูลต่อไปนี้เพื่อรองรับการตรวจสอบข้อมูลเมตาขณะที่ทำการต่อเชื่อมระยะแรก หากต้องการเพิ่มการรองรับ 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 ซึ่งติดตั้ง snapuserd เวอร์ชัน vendor_ramdisk

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

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

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

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

    1. พุชการกู้คืน + vendor_boot + แรมดิสก์ทั่วไปไปยัง / (หาก OEM คัดลอกโมดูลเคอร์เนลใน RAM ของ Recovery โดยการเพิ่มลงใน 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 (อุปกรณ์จะไม่เพิ่มพื้นที่ว่างใน RAMdisk (เนื่องจาก / ยังคงเหมือนเดิม) แต่เรียกใช้ 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 + generic ramdisks จะเป็นดังนี้

  • /init (จาก RAM disk ที่สร้างขึ้นจาก init_first_stage)

ย้ายไฟล์ fstab

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

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

คุณสามารถติดตั้งโมดูลเฉพาะอุปกรณ์ลงในแรมดิสก์ของ vendor_ramdisk และ recovery (ข้ามขั้นตอนนี้หากคุณไม่มีโมดูลเฉพาะอุปกรณ์ที่จะติดตั้ง) init ไม่เปลี่ยนเป็นรูท โมดูลตัวแปร vendor_ramdisk จะติดตั้งในรูทของ vendor_ramdisk ตัวแปร recovery ของโมดูลจะติดตั้งลงในรูทของแรมดิสก์ recovery ดูตัวอย่างการติดตั้งโมดูลในvendor_ramdiskและrecovery RAM disk ได้ที่คอนโซลระยะที่ 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 \

Checksum ข้อมูลเมตา

อุปกรณ์ที่ไม่รองรับ 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. ระยะแรกจะเริ่มต้นการเริ่มต้น จากนั้นจะทำสิ่งต่อไปนี้

    1. ชุด IsRecoveryMode() == true และ ForceNormalBoot() == false
    2. โหลดโมดูลเคอร์เนลของผู้ให้บริการจาก /lib/modules
    3. โทรหา DoFirstStageMount() แต่ข้ามการต่อเชื่อมเนื่องจาก IsRecoveryMode() == true (อุปกรณ์จะไม่เพิ่มพื้นที่ว่างใน RAMdisk (เนื่องจาก / ยังคงเหมือนเดิม) แต่เรียกใช้ 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 ลงในแรมดิสก์ทั่วไป ไฟล์นี้มีข้อมูลการประทับเวลาของบิลด์

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