คุณอัปเดต GKI และโมดูล GKI แยกจากพาร์ติชันอื่นๆ ได้
เนื่องจากโมดูล GKI อยู่ในพาร์ติชันแบบไดนามิกแยกต่างหากในรูปภาพขนาดใหญ่
ที่เรียกว่า system_dlkm โมดูล GKI ได้รับการลงนามโดย Google โดยใช้คู่คีย์เวลาสร้างเคอร์เนล
และใช้ได้กับ GKI ที่สร้างขึ้นด้วยเท่านั้น
ไม่มีความเสถียรของ ABI ระหว่าง 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 สำหรับสถาปัตยกรรมเป้าหมาย และระบุเป็นแหล่งที่มาสำหรับพาร์ติชัน system_dlkm ระหว่างการสร้างแพลตฟอร์ม
สำหรับ Android 13
ชี้ BOARD_SYSTEM_DLKM_SRC ไปยังโฟลเดอร์ที่มีโมดูล GKI ที่จำเป็น
ไฟล์ออบเจ็กต์เคอร์เนลสำหรับอุปกรณ์เป็นอินพุตไปยังระบบบิลด์เพื่อสร้างพาร์ติชัน 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 เพื่อโหลดโมดูล
หากจำเป็น กระบวนการของผู้ให้บริการยังโหลดโมดูลในภายหลังได้ด้วย
SELinux
ไฟล์ทุกไฟล์ในพาร์ติชัน 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 มีกรณีทดสอบ VTS ของ GKI เพื่อยืนยันพาร์ติชัน system_dlkm หากต้องการเรียกใช้การทดสอบด้วยตนเอง ให้ใช้คำสั่ง atest ต่อไปนี้
atest -c vts_dlkm_partition_test