ใช้พาร์ติชันโมดูล GKI

โมดูล GKI และ GKI สามารถอัปเดตได้อย่างอิสระจากส่วนที่เหลือของพาร์ติชัน เนื่องจากโมดูล GKI อยู่บนพาร์ติชันไดนามิกแยกต่างหากในซูเปอร์อิมเมจที่เรียกว่า system_dlkm โมดูล GKI ได้รับการลงนามโดย Google โดยใช้คู่คีย์เวลาบิลด์เคอร์เนล และเข้ากันได้กับ GKI ที่สร้างขึ้นเท่านั้น ไม่มีความเสถียรของ ABI ระหว่างโมดูล GKI และ GKI เพื่อให้โมดูลโหลดได้อย่างถูกต้องระหว่างรันไทม์ จะต้องสร้างและอัปเดตโมดูล GKI และ GKI ร่วมกัน

ใช้การสนับสนุนพาร์ติชัน system_dklm

พาร์ติชัน system_dlkm ตั้งอยู่ในซุปเปอร์พาร์ติชันเป็นพาร์ติชันไดนามิกอื่น พาร์ติชันนี้สามารถประกอบด้วย:

  • โมดูลเคอร์เนลที่ลงนามตามเวลาบิลด์ของ Google
  • สิ่งประดิษฐ์ depmod

สร้าง system_dlkm

การสร้าง system_dlkm เป็นกระบวนการที่คล้ายคลึงกับการสร้างพาร์ติชันไดนามิกอื่นๆ ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่ม system_dlkm ให้กับบิลด์ของคุณ:

  1. ใน BoardConfig.mk ให้เพิ่มรายการต่อไปนี้:

    BOARD_USES_SYSTEM_DLKMIMAGE := true
    BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)
    TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
    
  2. ในรายการพาร์ติชัน ให้เพิ่ม system_dlkm : BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm

  3. (ทางเลือก) สำหรับอุปกรณ์ A/B และอุปกรณ์ A/B เสมือน ให้เพิ่มบรรทัดต่อไปนี้ในไฟล์ device.mk สำหรับอุปกรณ์ของคุณ:

    AB_OTA_PARTITIONS += system_dlkm
    

ระบุโมดูลเคอร์เนลที่จะคัดลอกไปยัง system_dlkm

เพื่อให้โหลดโมดูลได้สำเร็จที่รันไทม์ จะต้องสร้างโมดูล GKI และ GKI ร่วมกัน ดังนั้น คุณต้องระบุโมดูลเคอร์เนลใน GKI build สำหรับสถาปัตยกรรมเป้าหมาย และจัดเตรียมโมดูลดังกล่าวเป็นแหล่งที่มาสำหรับพาร์ติชัน system_dlkm ในระหว่างการสร้างแพลตฟอร์ม

สำหรับระบบปฏิบัติการ Android 13

ชี้ BOARD_SYSTEM_DLKM_SRC ไปยังโฟลเดอร์ที่มีไฟล์อ็อบเจ็กต์เคอร์เนลโมดูล GKI ที่จำเป็นสำหรับอุปกรณ์เป็นอินพุตไปยังระบบ build เพื่อสร้างพาร์ติ system_dlkm ตัวอย่างเช่น:

ระบุแหล่งที่มาของโมดูล GKI ในโฟลเดอร์และชี้ BOARD_SYSTEM_DLKM_SRC ไปที่โฟลเดอร์นั้น ตัวอย่างเช่น:

  BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging

ณ เวลาสร้าง โมดูลที่แสดงอยู่ใน BOARD_SYSTEM_DLKM_SRC จะถูกติดตั้งใน $ANDROID_PRODUCT_OUT/system_dlkm

สำหรับระบบปฏิบัติการ Android 14

เราได้ปรับปรุงการใช้งานด้วยมาโคร ( BOARD_*_KERNEL_MODULES ) ที่ใช้สำหรับพาร์ติชัน *_dlkm อื่นๆ รายการโมดูล GKI ที่จำเป็นสำหรับอุปกรณ์ควรอ้างอิงโดยมาโคร BOARD_SYSTEM_KERNEL_MODULES ณ เวลาสร้าง โมดูลเหล่านี้ได้รับการติดตั้งใน $ANDROID_PRODUCT_OUT/system_dlkm โมดูลใดๆ ในพาร์ติ vendor_dlkm ซึ่งมีการขึ้นต่อกันกับโมดูลในพาร์ system_dlkm จะสร้างการอ้างอิงที่ถูกต้องในไฟล์ modules.dep สำหรับพาร์ติ vendor_dlkm เนื่องจากการพึ่งพาข้ามพาร์ติชันที่แสดงโดย modules.dep เมื่อมีการโหลดโมดูลผู้จำหน่าย โมดูล GKI ที่จำเป็นใดๆ จะถูกโหลดโดยอัตโนมัติ

ตัวอย่างเช่น หากต้องการติดตั้งโมดูล GKI ทั้งหมดบนพาร์ติ system_dlkm สำหรับเคอร์เนล GKI arm64 5.15 จากที่สร้างไว้ล่วงหน้า:

 BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)

เมานต์ system_dlkm เมื่อรันไทม์

ขึ้นอยู่กับระบบไฟล์ที่ใช้เป็นระบบไฟล์แบบอ่านอย่างเดียว ให้เพิ่มสิ่งต่อไปนี้ใน fstab ของคุณเพื่อเมาต์พาร์ติ system_dlkm เมื่อรันไทม์:

ext4 เป็นระบบไฟล์แบบอ่านอย่างเดียว

  system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

erofs เป็นระบบไฟล์แบบอ่านอย่างเดียว

  system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb

การติดตั้งพาร์ติชันและการโหลดโมดูล

ระหว่าง first_stage_init พาร์ติชัน system_dlkm จะถูกเมาท์ใน /system_dlkm เป็นระบบไฟล์แบบอ่านอย่างเดียว เมื่อเมาท์สำเร็จ ลิงก์สัญลักษณ์ที่ /system/lib/modules ที่ชี้ไปที่ /system_dlkm/lib/modules จะพร้อมใช้งาน

กระบวนการของผู้จำหน่าย เช่น สคริปต์ .rc จะสามารถโหลดโมดูลเคอร์เนลตามลำดับที่ระบุใน modules.load กระบวนการของผู้จัดจำหน่ายต้องใช้ลิงก์สัญลักษณ์ /system/lib/modules เพื่อโหลดโมดูล หากจำเป็น กระบวนการของผู้จัดจำหน่ายสามารถโหลดโมดูลได้ในภายหลัง

ซีลีนุกซ์

ทุกไฟล์ในพาร์ติชัน system_dlkm มีเลเบลด้วยบริบทไฟล์ของ system_dlkm_file หากต้องการโหลดไฟล์โมดูล GKI ในพาร์ติชัน system_dlkm กระบวนการของผู้จำหน่ายที่รับผิดชอบในการโหลดโมดูลจำเป็นต้องมี sepolicy ในโดเมนของผู้จำหน่าย

ตัวอย่างเช่น dlkm_loader ที่ใช้โดย Cuttlefish เพื่อโหลดโมดูล GKI มีสิทธิ์ดังต่อไปนี้ในไฟล์นโยบายที่ shared/sepolicy/vendor/dlkm_loader.te :

allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;

ตรวจสอบพาร์ติชัน system-dlkm

Google มีกรณีทดสอบ GKI VTS เพื่อตรวจสอบพาร์ติชัน system_dlkm หากต้องการเรียกใช้การทดสอบด้วยตนเอง ให้ใช้คำสั่ง atest ต่อไปนี้:

  atest -c vts_dlkm_partition_test