โมดูล 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
ให้กับบิลด์ของคุณ:
ใน
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
ในรายการพาร์ติชัน ให้เพิ่ม
system_dlkm
:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(ทางเลือก) สำหรับอุปกรณ์ 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