พาร์ติชันสำหรับเริ่มระบบทั่วไป

ใน Android 12 อิมเมจสำหรับ boot ทั่วไปที่เรียกว่า Generic Kernel Image (GKI) มี ramdisk ทั่วไปและเคอร์เนล GKI

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

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

ในการสร้าง ramdisk ทั่วไป ให้ย้ายทรัพยากรเฉพาะของผู้จำหน่ายออกจาก ramdisk เพื่อให้ ramdisk ทั่วไปมีเพียง init ระยะแรกและไฟล์คุณสมบัติที่มีข้อมูลการประทับเวลา

บนอุปกรณ์ที่:

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

  • ใช้พาร์ติชัน recovery เฉพาะ ไม่จำเป็นต้องเปลี่ยนแปลง ramdisk recovery เนื่องจาก ramdisk 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 โดยไม่มีส่วนต่อท้ายสล็อต

เปิดตัวหรืออัปเกรดเป็น 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 โดยไม่มีส่วนต่อท้ายสล็อต

อัปเกรดเป็น Android 12 กู้คืนเมื่อบูต (กู้คืนเป็น ramdisk)

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

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

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

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

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

เนื้อหาอิมเมจสำหรับบูต

อิมเมจสำหรับบูต Android มีดังต่อไปนี้

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

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

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

    • ส่วนหัว vendor_boot
      • cmdline เฉพาะอุปกรณ์ ( BOARD_KERNEL_CMDLINE )
    • อิมเมจ ramdisk ของ vendor_boot
      • lib/modules
      • ทรัพยากรการกู้คืน (หากไม่มีการกู้คืนเฉพาะ)
    • รูปภาพ dtb
  • ภาพ recovery

    • ส่วนหัวเวอร์ชัน V2
      • cmdline เฉพาะอุปกรณ์สำหรับการกู้คืน หากจำเป็น
      • สำหรับพาร์ติชันการกู้คืนที่ไม่ใช่ A/B เนื้อหาของส่วนหัวจะต้องเป็นแบบสแตนด์อโลน ดู อิมเมจการกู้คืน ตัวอย่างเช่น:
      • cmdline ไม่ได้เชื่อมต่อกับ boot และ vendor_boot cmdline
      • ส่วนหัวระบุการกู้คืน DTBO หากจำเป็น
      • สำหรับพาร์ติชันการกู้คืน A/B เนื้อหาอาจถูกต่อหรืออนุมานจาก boot และ vendor_boot ตัวอย่างเช่น:
      • cmdline ถูกแบ่งส่วนเพื่อ boot และ vendor_boot cmdline
      • DTBO อาจอนุมานได้จากส่วนหัว vendor_boot
    • recovery อิมเมจ ramdisk
      • ทรัพยากรการกู้คืน
      • สำหรับพาร์ติชันการกู้คืนที่ไม่ใช่ A/B เนื้อหาของ ramdisk จะต้องเป็นแบบสแตนด์อโลน ดู อิมเมจการกู้คืน ตัวอย่างเช่น:
      • lib/modules ต้องมีโมดูลเคอร์เนลทั้งหมดที่จำเป็นสำหรับการบูตโหมดการกู้คืน
      • ramdisk การกู้คืนจะต้องมี init
      • สำหรับพาร์ติชันการกู้คืน A/B นั้น ramdisk การกู้คืนจะถูกต่อท้ายกับ ramdisk ทั่วไปและ vendor_boot ดังนั้นจึงไม่จำเป็นต้องเป็นแบบสแตนด์อโลน ตัวอย่างเช่น:
      • lib/modules อาจมีเฉพาะโมดูลเคอร์เนลเพิ่มเติมที่จำเป็นสำหรับการบูตโหมดการกู้คืน นอกเหนือจากโมดูลเคอร์เนลใน vendor_boot ramdisk
      • อาจมีลิงก์สัญลักษณ์ที่ /init แต่ถูกบดบังด้วยไบนารี /init ระยะแรกในอิมเมจสำหรับบูต

เนื้อหารูปภาพ ramdisk ทั่วไป

ramdisk ทั่วไปประกอบด้วยส่วนประกอบต่อไปนี้

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

การรวมอิมเมจสำหรับบูต

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

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

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

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

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

  • BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT ตัวแปรนี้ควบคุมว่าทรัพยากรการกู้คืน ramdisk ถูกสร้างขึ้นสำหรับ vendor_boot หรือไม่

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

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

  • BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT ตัวแปรนี้ควบคุมว่าคีย์ GSI AVB ถูกสร้างขึ้นสำหรับ vendor_boot หรือไม่

    • เมื่อตั้งค่า true ถ้า BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :

      • ได้รับการตั้งค่าแล้ว คีย์ GSI AVB ถูกสร้างขึ้นเพื่อ $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb

      • ไม่ได้ตั้งค่า คีย์ GSI AVB ถูกสร้างขึ้นเพื่อ $ANDROID_PRODUCT_OUT/vendor-ramdisk/avb

    • เมื่อว่างเปล่า ถ้า BOARD_RECOVERY_AS_ROOT :

      • ได้รับการตั้งค่าแล้ว คีย์ GSI AVB ถูกสร้างขึ้นเพื่อ $ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb

      • ไม่ได้ตั้งค่า คีย์ GSI AVB ถูกสร้างขึ้นเพื่อ $ANDROID_PRODUCT_OUT/ramdisk/avb

  • BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE ตัวแปรนี้ควบคุมว่าอิมเมจ recovery มีเคอร์เนลหรือไม่ อุปกรณ์ที่เปิดตัวด้วย Android 12 และใช้พาร์ติ recovery A/B ต้องตั้งค่าตัวแปรนี้เป็น true อุปกรณ์ที่เปิดตัวด้วย Android 12 และใช้ที่ไม่ใช่ A/B ต้องตั้งค่าตัวแปรนี้เป็น false เพื่อให้อิมเมจการกู้คืนมีอยู่ในตัวเอง

  • BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES ตัวแปรนี้ควบคุมว่าจะคัดลอก $OUT/boot*.img ไปยัง IMAGES/ ภายใต้ไฟล์เป้าหมายหรือไม่

    • aosp_arm64 ต้องตั้งค่าตัวแปรนี้เป็น true

    • อุปกรณ์อื่นๆ จะต้องปล่อยตัวแปรนี้ว่างไว้

  • BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE ตัวแปรนี้ควบคุมว่า init_boot.img ถูกสร้างขึ้นและตั้งค่าขนาดหรือไม่ เมื่อตั้งค่าแล้ว ramdisk ทั่วไปจะถูกเพิ่มใน init_boot.img แทน boot.img และต้องการให้ตัวแปร BOARD_AVB_INIT_BOOT* ได้รับการตั้งค่าสำหรับ chained vbmeta

การรวมกันที่ได้รับอนุญาต

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

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

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

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

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

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

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

ระบบเป็นรูท

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

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

อุปกรณ์ที่ใช้ ramdisk ทั่วไปจะต้องติดตั้งรายการไฟล์ที่ได้รับอนุญาตให้ติดตั้งลงใน ramdisk โดยระบุสิ่งต่อไปนี้ใน device.mk :

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

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

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

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

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

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

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

      • ตั้งค่า BOARD_USES_RECOVERY_AS_BOOT ให้ว่าง สถาปัตยกรรมดัง รูปที่ 4

    • สามารถตั้งค่า BOARD_USES_RECOVERY_AS_BOOT ให้ว่างเปล่าได้ หากทำเช่นนั้น แสดงว่าพวกเขากำลังใช้การกำหนดค่าใหม่ หากอุปกรณ์ดังกล่าว:

      • อย่าใช้พาร์ติชั่น recovery เฉพาะ สถาปัตยกรรมจะเป็นดังแสดงใน รูปที่ 1 และตัวเลือกการตั้งค่าอุปกรณ์คือ Option 1

      • ใช้พาร์ติชั่น recovery เฉพาะ สถาปัตยกรรมดังแสดงใน รูปที่ 2a หรือ รูปที่ 2b และตัวเลือกการตั้งค่าอุปกรณ์คือ Option 2a หรือ Option 2b

  • อุปกรณ์ที่เปิดตัวด้วย Android 12 ต้องตั้งค่า BOARD_USES_RECOVERY_AS_BOOT ให้ว่างเปล่าและใช้การกำหนดค่าใหม่ หากอุปกรณ์ดังกล่าว:

    • อย่าใช้พาร์ติชั่น recovery เฉพาะ สถาปัตยกรรมจะเป็นดังแสดงใน รูปที่ 1 และตัวเลือกการตั้งค่าอุปกรณ์คือ Option 1

    • ใช้พาร์ติชั่น recovery เฉพาะ สถาปัตยกรรมดังแสดงใน รูปที่ 2a หรือ รูปที่ 2b และตัวเลือกการตั้งค่าอุปกรณ์คือ Option 2a หรือ Option 2b

เนื่องจาก aosp_arm64 สร้างเฉพาะ GKI (ไม่ใช่ vendor_boot หรือการกู้คืน) จึงไม่ใช่เป้าหมายที่สมบูรณ์ สำหรับการกำหนดค่าบิวด์ aosp_arm64 โปรดดูที่ generic_arm64

ตัวเลือกที่ 1: ไม่มีพาร์ติชันการกู้คืนเฉพาะ

อุปกรณ์ที่ไม่มีพาร์ติ recovery จะมีอิมเมจ boot ทั่วไปอยู่ในพาร์ติ boot vendor_boot ramdisk มีทรัพยากรการกู้คืนทั้งหมด รวมถึง lib/modules (ที่มีโมดูลเคอร์เนลของผู้จำหน่าย) บนอุปกรณ์ดังกล่าว การกำหนดค่าผลิตภัณฑ์ จะสืบทอดมา จาก generic_ramdisk.mk

การตั้งค่าคณะกรรมการ

ตั้งค่าต่อไปนี้:

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

vendor_boot ramdisk สามารถมี /init ถึง /system/bin/init symlink และ init_second_stage.recovery ที่ /system/bin/init อย่างไรก็ตาม เนื่องจาก ramdisk ทั่วไปถูกต่อเข้าด้วยกันหลังจาก vendor_boot ramdisk ดังนั้น /init symlink จึงถูกเขียนทับ เมื่ออุปกรณ์บู๊ตเข้าสู่การกู้คืน ต้องใช้ไบนารี /system/bin/init เพื่อรองรับการเริ่มต้นระยะที่สอง เนื้อหาของ vendor_boot + ramdisk ทั่วไปมีดังนี้:

  • /init (จาก ramdisk ทั่วไป สร้างจาก init_first_stage )
  • /system/bin/init (จาก vendor_ramdisk สร้างจาก init_second_stage.recovery )

การย้ายไฟล์ fstab

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

การติดตั้งโมดูล

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

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

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

คอนโซลขั้นแรก

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

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

PRODUCT_PACKAGES += \
    linker.recovery \
    shell_and_utilities_recovery \

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

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

PRODUCT_PACKAGES += adbd.recovery

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

การตรวจสอบข้อมูลเมตา

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

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

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

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

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

การเปลี่ยนแปลงกระบวนการบูต

กระบวนการบูตเข้าสู่การกู้คืนหรือเข้าสู่ Android จะไม่เปลี่ยนแปลง โดยมีข้อยกเว้นต่อไปนี้:

  • Ramdisk build.prop ย้ายไปยัง /second_stage_resources เพื่อให้ init ระยะที่สองสามารถอ่านเวลาประทับของการบูตได้

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

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

makefiles ของอุปกรณ์สามารถสืบทอดมาจาก:

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

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

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

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

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

AB_OTA_PARTITIONS += recovery

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

  • ไฟล์ fstab เฉพาะอุปกรณ์

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

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

การตั้งค่าคณะกรรมการ

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

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

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

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

  • /init (จาก ramdisk สร้างจาก init_first_stage )
  • /system/bin/init (จาก recovery ramdisk สร้างจาก init_second_stage.recovery และดำเนินการจาก /init )

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

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

การย้ายไฟล์ fstab

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

การติดตั้งโมดูล

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

คอนโซลขั้นแรก

หากต้องการติดตั้งชุดตัวเลือก vendor_ramdisk ของโมดูล ให้ใช้สิ่งต่อไปนี้:

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    shell_and_utilities_vendor_ramdisk \

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

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

PRODUCT_PACKAGES += adbd.vendor_ramdisk

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

การตรวจสอบข้อมูลเมตา

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

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

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

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

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

การเปลี่ยนแปลงกระบวนการบูต

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

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

  1. Bootloader เริ่มทำงาน จากนั้นทำสิ่งต่อไปนี้:

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

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

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

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

makefiles ของอุปกรณ์สามารถสืบทอดมาจาก:

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

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

ผลิตภัณฑ์ makefiles ติดตั้ง $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck ณ รันไทม์ สเตจแรก init จะดำเนินการ /system/bin/e2fsck

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

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

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

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

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

อิมเมจ recovery จะต้องมีอยู่ในตัวเอง จะต้องมีทรัพยากรที่จำเป็นทั้งหมดในการบูตโหมดการกู้คืน รวมถึง:

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

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

การตั้งค่าคณะกรรมการ

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

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

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

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

  • /init -> /system/bin/init (จาก recovery ramdisk)
  • /system/bin/init (จาก recovery ramdisk สร้างจาก init_second_stage.recovery และดำเนินการจาก /init )

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

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

การย้ายไฟล์ fstab

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

การติดตั้งโมดูล

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

คอนโซลขั้นแรก

หากต้องการติดตั้งชุดตัวเลือก vendor_ramdisk ของโมดูล ให้ใช้สิ่งต่อไปนี้:

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    shell_and_utilities_vendor_ramdisk \

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

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

PRODUCT_PACKAGES += adbd.vendor_ramdisk

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

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

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

การตรวจสอบข้อมูลเมตา

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

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

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

การเปลี่ยนแปลงกระบวนการบูต

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

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

  1. Bootloader เริ่มทำงาน จากนั้นทำสิ่งต่อไปนี้:

    1. ผลักดันการกู้คืน ramdisk ไปที่ /
    2. รันเคอร์เนลจากพาร์ติ recovery
  2. เคอร์เนลเมานต์ ramdisk ไปที่ / จากนั้นดำเนินการ /init ซึ่งเป็นลิงก์ไปยัง /system/bin/init จาก ramdisk recovery

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

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

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