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

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

สถาปัตยกรรม

แผนภาพต่อไปนี้แสดงสถาปัตยกรรมสำหรับอุปกรณ์ที่ใช้ 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, 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
    • อิมเมจ 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 และเวอร์ชันก่อนหน้า
  • vendor_boot image (ดูรายละเอียดได้ที่พาร์ติชันการบูตของผู้ให้บริการ)

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

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

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 เป็น 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 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 ทั่วไปหลัง 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 เพื่อให้สเตจที่ 2 init อ่านการประทับเวลาบิลด์ของการบูตได้

เนื่องจากทรัพยากรจะย้ายจาก 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

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 กระบวนการบูตสำหรับโหมดการกู้คืนมีดังนี้

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

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

  3. การเริ่มต้นระยะแรกจะเริ่มขึ้น จากนั้นจะดำเนินการต่อไปนี้

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ตั้งค่าบอร์ด

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

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

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 กระบวนการบูตสำหรับโหมดการกู้คืนมีดังนี้

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

    1. ส่ง ramdisk การกู้คืนไปยัง /
    2. เรียกใช้เคอร์เนลจากพาร์ติชัน recovery
  2. เคอร์เนลจะติดตั้ง ramdisk ไปยัง / จากนั้นจะเรียกใช้ /init ซึ่งเป็น Symlink ไปยัง /system/bin/init จาก ramdisk ของ recovery

  3. การเริ่มต้นระยะแรกจะเริ่มขึ้น จากนั้นจะดำเนินการต่อไปนี้

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

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

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

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

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