หน้านี้จะอธิบายวิธีกำหนดค่าฟีเจอร์เคอร์เนลใหม่เป็นโมดูล GKI หรือ กำหนดค่าฟีเจอร์เคอร์เนลที่มีอยู่แล้วเป็นโมดูล GKI
กำหนดค่าฟีเจอร์ใหม่เป็นโมดูล GKI
สำหรับฟีเจอร์ใหม่ ให้แก้ไข
gki_defconfigและตั้งค่ารายการกำหนดค่าของฟีเจอร์เคอร์เนลที่จำเป็นจากnเป็นm(=m) ตั้งค่านี้ทั้งในarch/arm64/configs/gki_defconfigและarch/x86/configs/gki_defconfigเพิ่มไฟล์ KO (
.ko) ที่สร้างขึ้นสำหรับฟีเจอร์นี้ ลงในส่วนCOMMON_GKI_MODULES_LISTของcommon/modules.bzlเพิ่ม ไฟล์ตามลำดับที่จัดเรียง หากคุณไม่แน่ใจเกี่ยวกับไฟล์ทั้งหมดที่สร้างขึ้น การสร้างจะล้มเหลวและแสดงรายการไฟล์ KO ที่จำเป็นทั้งหมดเพื่อเพิ่มลงในรายการสำหรับ Android 14 ให้เพิ่มชุดไฟล์ KO เดียวกันจากขั้นตอนที่ 2 โดยเรียงตามลำดับจากน้อยไปมาก สำหรับการค้นหาแบบไบนารีที่รันไทม์ ไปยัง
common/android/gki_{ARCH}_protected_modulesเพื่อกำหนดให้โมดูลเป็นโมดูล GKI ที่ได้รับการป้องกันสำหรับ Android 14 และ 15 ให้อัปเดตรายการการส่งออกเพื่อให้รวมการส่งออกที่เพิ่มใหม่ใน
common/android/abi_gki_protected_exports_ARCHITECTUREเช่น หากต้องการอัปเดตรายการ ให้เรียกใช้tools/bazel run //common:kernel_aarch64_abi_update_protected_exportsสำหรับaarch64ตรวจสอบว่าได้คัดลอกไฟล์ KO ที่เพิ่มใหม่จากขั้นตอนที่ 2 ไปยัง
out/<androidX-Y.Z>/dist/system_dlkm.imgและout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzของเคอร์เนลแล้ว โมดูลในsystem_dlkm_staging_archive.tar.gzที่เก็บถาวรสามารถใช้เป็น อินพุตเพื่อสร้างsystem_dlkm.imgในการสร้างแพลตฟอร์มได้ส่งการเปลี่ยนแปลงเข้ารับการตรวจสอบ โมดูล GKI เป็นฟีเจอร์เคอร์เนลสำหรับ Android เท่านั้น จึงไม่จำเป็นต้องส่งแพตช์การแปลงโมดูล ไปยังต้นทาง อย่างไรก็ตาม คุณต้องทำตามหลักเกณฑ์อื่นๆ เพื่อส่งแพตช์ Android Common Kernel (ACK)
กำหนดค่าฟีเจอร์ที่บิลด์อินของเคอร์เนลเป็นโมดูล GKI
สำหรับฟีเจอร์เคอร์เนลในตัวที่มีอยู่ ให้แก้ไข
gki_defconfigและตั้งค่ารายการกำหนดค่าของฟีเจอร์เคอร์เนลที่จำเป็นจากyเป็นm(=m) ตั้งค่านี้ในทั้งarch/arm64/configs/gki_defconfigและarch/x86/configs/gki_defconfigเพิ่มไฟล์ KO (
.ko) ที่สร้างขึ้นสำหรับฟีเจอร์นี้ลงในส่วนCOMMON_GKI_MODULES_LISTของcommon/modules.bzlเพิ่มไฟล์ ตามลำดับที่เรียง หากคุณไม่แน่ใจเกี่ยวกับไฟล์ทั้งหมดที่สร้างขึ้น การสร้างจะล้มเหลวและแสดงรายการไฟล์ KO ที่จำเป็นทั้งหมดเพื่อเพิ่มลงในรายการสำหรับ Android 14 ให้เพิ่มชุดไฟล์ KO เดียวกันจากขั้นตอนที่ 2 โดยเรียงตามลำดับจากน้อยไปมาก สำหรับการค้นหาแบบไบนารีที่รันไทม์ ไปยัง
common/android/gki_{ARCH}_protected_modulesเพื่อกำหนดให้โมดูลเป็นโมดูล GKI ที่ได้รับการป้องกันสำหรับ Android 14 และ 15 ให้อัปเดตรายการการส่งออกที่ได้รับการปกป้องให้ รวมรายการจากโมดูลที่เพิ่มใหม่ใน
common/android/abi_gki_protected_exports_{ARCH}โดยใช้tools/bazel run //common:kernel_aarch64_abi_update_protected_exportsสำหรับaarch64ตรวจสอบว่าได้คัดลอกไฟล์ KO ของโมดูลที่แปลงใหม่จากขั้นตอนที่ 2 ไปยัง
out/<androidX-Y.Z>/dist/system_dlkm.imgและout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzของเคอร์เนลแล้ว โมดูลในsystem_dlkm_staging_archive.tar.gzที่เก็บถาวรสามารถใช้เป็น อินพุตเพื่อสร้างsystem_dlkm.imgในการสร้างแพลตฟอร์มได้ส่งการเปลี่ยนแปลงเข้ารับการตรวจสอบ โมดูล GKI เป็นฟีเจอร์เคอร์เนลสำหรับ Android เท่านั้น จึงไม่จำเป็นต้องส่งแพตช์การแปลงโมดูล ไปยังต้นทาง อย่างไรก็ตาม คุณต้องทำตามหลักเกณฑ์อื่นๆ เพื่อส่งแพตช์ Android Common Kernel (ACK)
แปลงโมดูล GKI ที่ได้รับการปกป้องเป็นโมดูลที่ไม่ได้รับการปกป้อง
สำหรับ Android 15 ขึ้นไป ให้เพิ่มโมดูลที่แปลงจากโมดูลที่ได้รับการปกป้องเป็นโมดูลที่ไม่ได้รับการปกป้องลงใน
COMMON_UNPROTECTED_MODULES_LISTรายการในไฟล์common/modules.bzlสำหรับ Android 14 ให้นำโมดูลที่แปลงจากโมดูลที่ได้รับการปกป้องเป็นโมดูลที่ไม่ได้ปกป้องออกจากรายการโมดูลที่ได้รับการปกป้องที่
common/android/gki_protected_modulesสำหรับ Android 14 และ 15 ให้อัปเดตรายการการส่งออกที่ได้รับการปกป้องเพื่อ ยกเว้นรายการจากโมดูลที่ไม่มีการป้องกันซึ่งแปลงใหม่ใน
common/android/abi_gki_protected_exports_{ARCH}โดยใช้tools/bazel run //common:kernel_aarch64_abi_update_protected_exportsสำหรับaarch64ส่งการเปลี่ยนแปลงเข้ารับการตรวจสอบ โมดูล GKI เป็นฟีเจอร์เคอร์เนลสำหรับ Android เท่านั้น จึงไม่จำเป็นต้องส่งแพตช์การแปลงโมดูล ไปยังต้นทาง อย่างไรก็ตาม คุณต้องทำตามหลักเกณฑ์อื่นๆ เพื่อส่งแพตช์ Android Common Kernel (ACK)
คู่มือฉบับย่อในการแก้ไขการละเมิดสัญลักษณ์ของโมดูล GKI
เมื่อโมดูลที่ไม่ได้ลงนามละเมิดการป้องกันสัญลักษณ์ที่ใช้กับโมดูล GKI คุณอาจพบข้อผิดพลาด 2 ประเภทในระหว่างการโหลดโมดูล ซึ่งจะส่งผลให้ การดำเนินการล้มเหลว
1. โมดูลที่ไม่ได้ลงนามโดยใช้สัญลักษณ์ที่ได้รับการปกป้อง
ข้อผิดพลาด:
module: Protected symbol: some_kernel_function (err -13)
สาเหตุ:
module.ko เป็นโมดูลของผู้ให้บริการที่ไม่ได้ลงนามและพยายามแก้ไขสัญลักษณ์ที่ส่งออกของโมดูล GKI some_kernel_function ระหว่างการโหลดโดยไม่ต้องแสดงในรายการสัญลักษณ์ของผู้ให้บริการ
วิธีแก้ไข:
หาก module.ko ไม่ใช่โมดูล GKI ที่ได้รับการปกป้อง การอัปเดตรายการสัญลักษณ์จะช่วย
แก้ไขข้อผิดพลาดได้โดยการรวม some_kernel_function ไว้ในรายการสัญลักษณ์ของผู้ให้บริการ
หรือจะใช้ module.ko เวอร์ชัน GKI ก็ได้
2. โมดูลที่ไม่ได้ลงนามซึ่งส่งออกสัญลักษณ์ที่ได้รับการป้องกัน
ข้อผิดพลาด:
module: exports protected symbol some_kernel_function
สาเหตุ:
โมดูลที่ส่งออก some_kernel_function เป็นโมดูล GKI ที่ได้รับการปกป้อง และmodule.ko น่าจะเป็นโมดูลเวอร์ชันที่กำหนดเองที่ไม่ได้ลงนาม เมื่อ module.ko พยายามส่งออก some_kernel_function ซึ่งส่งออกได้โดยโมดูล GKI ที่ลงนามแล้วเท่านั้น การโหลดจะล้มเหลวพร้อมข้อความนี้
วิธีแก้ไข:
ปัญหานี้แก้ไขได้โดยใช้โมดูลเวอร์ชัน GKI ที่ส่งออก
some_kernel_function หากโมดูลที่ไม่ได้ลงนามเป็นเวอร์ชันที่กำหนดเอง