หน้านี้ครอบคลุมวิธีกำหนดค่าฟีเจอร์ใหม่ของเคอร์เนลเป็นโมดูล GKI หรือกำหนดค่าฟีเจอร์ที่มีอยู่ของเคอร์เนลในตัวเป็นโมดูล GKI
กำหนดค่าฟีเจอร์ใหม่เป็นโมดูล GKI
สำหรับฟีเจอร์ใหม่ ให้แก้ไข
gki_defconfigและตั้งค่ารายการกำหนดค่าของฟีเจอร์เคอร์เนลที่จำเป็นจากnเป็นm(=m) ตั้งค่านี้ในทั้งarch/arm64/configs/gki_defconfigและarch/x86/configs/gki_defconfigเพิ่มไฟล์ KO (
.ko) ที่สร้างขึ้นสำหรับฟีเจอร์ลงในส่วน_COMMON_GKI_MODULES_LISTของไฟล์ต่อไปนี้ เพิ่มไฟล์ตามลำดับที่จัดเรียง หากไม่แน่ใจว่าไฟล์ใดบ้างที่สร้างขึ้น บิลด์จะสร้างไฟล์ไม่สำเร็จและแสดงรายการไฟล์ KO ทั้งหมดที่จำเป็นต้องเพิ่มลงในรายการ- ใน
android17-6.18ขึ้นไป ให้เพิ่มรายการลงในcommon/bazel/modules_private.bzl - ใน
android16-6.12ลงไป ให้เพิ่มรายการลงในcommon/modules.bzl
- ใน
สำหรับ 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ของไฟล์ต่อไปนี้ เพิ่มไฟล์ตามลำดับที่จัดเรียง หากไม่แน่ใจว่าไฟล์ใดบ้างที่สร้างขึ้น บิลด์จะสร้างไฟล์ไม่สำเร็จและแสดงรายการไฟล์ KO ทั้งหมดที่จำเป็นต้องเพิ่มลงในรายการ- ใน
android17-6.18ขึ้นไป ให้เพิ่มรายการลงในcommon/bazel/modules_private.bzl - ใน
android16-6.12ลงไป ให้เพิ่มรายการลงใน `common/modules.bzl`
- ใน
สำหรับ 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ในไฟล์ต่อไปนี้- ใน
android17-6.18ขึ้นไป ให้เพิ่มรายการลงในcommon/bazel/modules_private.bzl - ใน
android16-6.12ลงไป ให้เพิ่มรายการลงใน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 เป็นโมดูลของผู้ให้บริการที่ไม่ได้ลงชื่อและพยายามแก้สัญลักษณ์ some_kernel_function ที่ส่งออกจากโมดูล GKI ระหว่างการโหลด โดยไม่ได้ระบุไว้ในรายการสัญลักษณ์ของผู้ให้บริการ
วิธีแก้ปัญหา:
หาก 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 หากโมดูลที่ไม่ได้ลงชื่อเป็นเวอร์ชันที่กำหนดเอง