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

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

ใน 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 โดยเฉพาะ ไม่จำเป็นต้องทำการเปลี่ยนแปลงใน recovery ramdisk เนื่องจาก 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, recovery-as-boot (recovery-as-ramdisk)

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

รูปที่ 7. อุปกรณ์ที่อัพเกรดเป็น Android 12, ไม่มี GKI, recovery-as-boot

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

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

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

เนื้อหาภาพบูต

อิมเมจการบูต Android มีดังต่อไปนี้

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

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

    • เวอร์ชันส่วนหัว V3 หรือ V4
      • boot_signature สำหรับการรับรอง GKI boot.img (v4 เท่านั้น) boot.img 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 )
    • vendor_boot อิมเมจ ramdisk
      • lib/modules
      • ทรัพยากรการกู้คืน (หากไม่มีการกู้คืนโดยเฉพาะ)
    • dtb image
  • ภาพ 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 image
      • ทรัพยากรการกู้คืน
      • สำหรับพาร์ติชันการกู้คืนที่ไม่ใช่ A/B เนื้อหาของ ramdisk ต้องเป็นแบบสแตนด์อโลน ดูการ กู้คืนอิมเมจ ตัวอย่างเช่น:
      • lib/modules ต้องมีโมดูลเคอร์เนลทั้งหมดที่จำเป็นในการบูตโหมดการกู้คืน
      • ramdisk การกู้คืนต้องมี init
      • สำหรับพาร์ติชั่นการกู้คืน A/B, ramdisk การกู้คืนจะถูกเติมไว้ข้างหน้า ramdisk ทั่วไปและ vendor_boot ramdisk ดังนั้นจึงไม่จำเป็นต้องเป็นแบบสแตนด์อโลน ตัวอย่างเช่น:
      • 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 และใช้ non-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 ที่ถูกล่ามโซ่

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

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

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

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

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

ไฟล์ generic_ramdisk.mk ยังป้องกัน makefile อื่นๆ จากการติดตั้งไฟล์อื่นไปยัง 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 และ init_second_stage.recovery ที่ /system/bin/init อย่างไรก็ตาม เนื่องจาก ramdisk ทั่วไปถูกต่อจาก vendor_boot ramdisk ดังนั้น /init symlink จะถูกเขียนทับ เมื่ออุปกรณ์เริ่มการกู้คืน ไบนารี /system/bin/init จำเป็นเพื่อรองรับการเริ่มต้นขั้นที่สอง เนื้อหาของ vendor_boot + ramdisks ทั่วไปมีดังนี้:

  • /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 สำหรับตัวอย่าง โปรดดูที่การ ตรวจสอบข้อมูลเมตา และ การบีบอัด Virtual 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_b partition ชั่น recovery_a และ recovery_b อุปกรณ์ดังกล่าวรวมถึงอุปกรณ์ A/B และอุปกรณ์ Virtual 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 และ init_second_stage.recovery ที่ /system/bin/init อย่างไรก็ตาม เนื่องจากบูต ramdisk ถูกต่อกันหลังจาก ramdisk recovery ดังนั้น /init symlink จะถูกเขียนทับ เมื่ออุปกรณ์บู๊ตเข้าสู่โหมดการกู้คืน จำเป็นต้องใช้ไบนารี /system/bin/init เพื่อรองรับ init ขั้นที่สอง

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

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

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

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

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

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

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

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

ramdisk 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 (จาก ramdisk recovery สร้างจาก init_second_stage.recovery และดำเนินการจาก /init )

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

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

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

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

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

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

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