สิ่งสำคัญคือต้องรักษาอินเทอร์เฟซโมดูลเคอร์เนล (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
จะมี Toolchain, สคริปต์บิลด์ และข้อมูลอื่นๆ ทั้งหมดที่จำเป็นในการสร้างเคอร์เนลทั่วไปของอิมเมจเคอร์เนล (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 Kernel