การรักษาอินเทอร์เฟซโมดูลเคอร์เนล (KMI) ที่เสถียรสำหรับโมดูลของผู้ให้บริการเป็นสิ่งสําคัญ มีการคอมไพล์เคอร์เนล GKI และจัดส่งในรูปแบบไบนารี รวมถึงสร้างโมดูลที่โหลดได้ของผู้จำหน่ายในต้นไม้แยกต่างหาก เคอร์เนล GKI และโมดูลของผู้ให้บริการที่ได้ต้องทํางานราวกับว่าสร้างขึ้นด้วยกัน
โดยทั่วไปแล้ว ชุมชน Linux ไม่ชอบแนวคิดเรื่องความเสถียรของ ABI ในเคอร์เนลสำหรับเคอร์เนลหลัก เมื่อมีเครื่องมือต่างๆ การกำหนดค่า และเคอร์เนลหลักของ Linux ที่พัฒนาอยู่ตลอดเวลา การดูแลรักษา KMI ที่เสถียรในเวอร์ชันหลักจึงทำได้ยาก อย่างไรก็ตาม คุณสามารถรักษา KMI ให้เสถียรในสภาพแวดล้อม GKI ที่มีข้อจำกัดสูงได้ด้วยข้อจำกัดต่อไปนี้
คุณใช้การกำหนดค่า
gki_defconfig
เพียงรายการเดียวเพื่อสร้างเคอร์เนลได้KMI จะเสถียรเฉพาะในเคอร์เนลเวอร์ชัน LTS และ Android เดียวกัน เช่น
android13-5.10
,android12-5.10
หรือandroid13-5.15
- ไม่มีความเสถียรของ KMI สำหรับ
android-mainline
- ไม่มีความเสถียรของ KMI สำหรับ
มีการใช้เฉพาะเครื่องมือ Clang ที่เฉพาะเจาะจงซึ่งให้มาใน AOSP และกำหนดไว้สำหรับสาขาที่เกี่ยวข้องในการสร้างเคอร์เนลและโมดูล
ระบบจะตรวจสอบเฉพาะสัญลักษณ์ที่ทราบว่าโมดูลใช้ตามที่ระบุไว้ในรายการสัญลักษณ์เพื่อดูความเสถียรและพิจารณาว่าเป็นสัญลักษณ์ KMI
- ผลที่ตามมาคือข้อบังคับว่าโมดูลของผู้ให้บริการต้องใช้สัญลักษณ์ KMI เท่านั้น ข้อจำกัดนี้จะบังคับใช้โดยการโหลดโมดูลที่ไม่สำเร็จหากต้องใช้สัญลักษณ์ที่ไม่ใช่ KMI
หลังจากสาขา KMI หยุดทำงานแล้ว ระบบจะอนุญาตให้ทำการเปลี่ยนแปลงได้ แต่จะเปลี่ยนแปลงในลักษณะที่ทำลาย KMI ไม่ได้ การเปลี่ยนแปลงเหล่านี้มีดังนี้
- การเปลี่ยนแปลงการกําหนดค่า
- การเปลี่ยนแปลงโค้ดเคอร์เนล
- การเปลี่ยนแปลงใน Toolchain (รวมถึงการอัปเดต)
ใช้กระบวนการบิลด์แบบปิดผนึกและชุดเครื่องมือ LLVM
กระบวนการสร้างแบบปิดผนึกช่วยให้มั่นใจได้ว่า KMI จะเสถียรเนื่องจากrepo
ไฟล์ Manifest ใน
kernel/manifest
จะอธิบายสภาพแวดล้อมการสร้างอย่างสมบูรณ์ ตัวอย่างเช่น ไฟล์ Manifest สำหรับ android13-5.15
ประกอบด้วยชุดเครื่องมือ สคริปต์การสร้าง และทุกอย่างที่จำเป็นในการสร้างเคอร์เนล Generic Kernel Image (GKI) ไฟล์การกําหนดค่า build.config
ที่เกี่ยวข้อง เช่น ไฟล์การกําหนดค่าบิลด์ GKI build.config.gki.aarch64
จะตรวจสอบว่าใช้เครื่องมือที่รวมไว้อย่างถูกต้องเพื่อสร้างผลลัพธ์การสร้างที่สอดคล้องกัน
การใช้กระบวนการบิลด์แบบปิดผนึกยังช่วยให้มั่นใจได้ว่าคำอธิบาย ABI สำหรับต้นไม้จะสอดคล้องกันไม่ว่าจะสร้างขึ้นโดย Google (เช่น abi_gki_aarch64.xml
สำหรับ android13-5.15
) หรือสร้างขึ้นในต้นไม้ในเครื่องซึ่งมีโมดูลของผู้ให้บริการ นอกจากนี้ยังมีเครื่องมือสร้างและเปรียบเทียบคำอธิบาย ABI สำหรับอินเทอร์เฟซโมดูลเคอร์เนล (KMI) อยู่ในที่เก็บซึ่งอธิบายโดยไฟล์ Manifest ด้วย
เครื่องมือที่ใช้สร้างเคอร์เนล GKI ต้องเข้ากันได้กับเครื่องมือที่ใช้สร้างโมดูลของผู้ให้บริการอย่างสมบูรณ์ ตั้งแต่ Android 10 เป็นต้นไป จะต้องสร้างเคอร์เนล Android ทั้งหมดด้วยชุดเครื่องมือ LLVM เมื่อใช้ GKI เครื่องมือทางเทคนิค LLVM ที่ใช้สร้างเคอร์เนลของผลิตภัณฑ์และโมดูลของผู้ให้บริการต้องสร้าง ABI เดียวกันกับเครื่องมือทางเทคนิค LLVM จาก AOSP และพาร์ทเนอร์ต้องตรวจสอบว่า KMI เข้ากันได้กับเคอร์เนล GKI เราขอแนะนำให้ใช้เครื่องมือสร้างที่ให้มา เนื่องจากเครื่องมือเหล่านี้มีความเข้ากันได้ดีที่สุด
สิ่งต่อไปที่ควรทำ
ดูวิธีการสร้างเคอร์เนลโดยใช้กระบวนการบิลด์แบบปิดผนึกและชุดเครื่องมือ LLVM ได้ที่สร้างเคอร์เนล
ดูวิธีการตรวจสอบ ABI และแก้ไขปัญหาได้ที่การตรวจสอบ ABI ของเคอร์เนล Android