การรักษาอินเทอร์เฟซโมดูลเคอร์เนล (KMI) ที่เสถียรสำหรับโมดูลของผู้ให้บริการ เป็นสิ่งสำคัญ เคอร์เนล GKI สร้างและจัดส่งในรูปแบบไบนารี และโมดูลที่โหลดโดยผู้ให้บริการจะสร้างใน โครงสร้างแยกต่างหาก เคอร์เนล GKI และโมดูลของผู้ให้บริการที่ได้ต้องทำงานราวกับว่าสร้างขึ้นมาพร้อมกัน
โดยทั่วไปแล้ว ชุมชน Linux ไม่เห็นด้วยกับแนวคิดเรื่องความเสถียรของ ABI ในเคอร์เนล สำหรับเคอร์เนลหลัก เนื่องจากมีเชนเครื่องมือ การกำหนดค่า และเคอร์เนลหลักของ Linux ที่พัฒนาอยู่ตลอดเวลา การรักษา KMI ที่เสถียรในเมนไลน์จึงเป็นไปไม่ได้ อย่างไรก็ตาม คุณสามารถรักษา KMI ที่เสถียรในสภาพแวดล้อม GKI ที่มีข้อจำกัดสูงได้โดยมีข้อจำกัดต่อไปนี้
ใช้การกำหนดค่าได้เพียงรายการเดียว
gki_defconfig
เพื่อสร้าง เคอร์เนลKMI จะเสถียรเฉพาะภายใน LTS และ Android เวอร์ชันเดียวกันของเคอร์เนล เช่น
android14-6.1
,android15-6.6
หรือandroid16-6.12
- ไม่มีการรักษาความเสถียรของ KMI สำหรับ
android-mainline
- ไม่มีการรักษาความเสถียรของ KMI สำหรับ
ใช้เฉพาะชุดเครื่องมือ Clang ที่เฉพาะเจาะจงซึ่งจัดหาให้ใน AOSP และกำหนดไว้สำหรับสาขาที่เกี่ยวข้องในการสร้างเคอร์เนลและโมดูล
เฉพาะสัญลักษณ์ที่โมดูลใช้ตามที่ระบุไว้ในรายการสัญลักษณ์เท่านั้นที่จะ ได้รับการตรวจสอบเพื่อความเสถียรและถือว่าเป็นสัญลักษณ์ KMI
- ผลที่ตามมาคือโมดูลของผู้ให้บริการต้องใช้สัญลักษณ์ KMI เท่านั้น ข้อจำกัดนี้ จะบังคับใช้โดยการโหลดโมดูลที่ไม่สำเร็จหากจำเป็นต้องใช้สัญลักษณ์ที่ไม่ใช่ KMI
หลังจากที่สาขา KMI ถูกระงับแล้ว คุณจะทำการเปลี่ยนแปลงได้ แต่ต้องไม่ทำให้ KMI เสียหาย การเปลี่ยนแปลงต่างๆ มีดังนี้
- การเปลี่ยนแปลงการกำหนดค่า
- การเปลี่ยนแปลงโค้ดเคอร์เนล
- การเปลี่ยนแปลง Toolchain (รวมถึงการอัปเดต)
ใช้กระบวนการบิลด์แบบปิดและชุดเครื่องมือ LLVM
กระบวนการสร้างแบบเฮอร์เมติกช่วยให้มั่นใจได้ว่า KMI จะเสถียรโดยการให้repo
ไฟล์ Manifest ใน
kernel/manifest
อธิบายสภาพแวดล้อมในการสร้างอย่างสมบูรณ์ เช่น ไฟล์ Manifest สำหรับ android16-6.12
ประกอบด้วย Toolchain, ระบบบิลด์ และทุกอย่างที่จำเป็นในการสร้าง
เคอร์เนล Generic Kernel Image (GKI) การกำหนดค่าบิลด์ ซึ่งส่วนใหญ่คือ
BUILD.bazel
ช่วยให้มั่นใจได้ว่าเครื่องมือที่รวมไว้จะถูกนำไปใช้อย่างถูกต้องเพื่อสร้างผลลัพธ์
บิลด์ที่สอดคล้องกัน
การใช้กระบวนการบิลด์แบบปิดยังช่วยให้มั่นใจได้ว่าคำอธิบาย ABI สำหรับ
ทรีนั้นสอดคล้องกัน ไม่ว่าจะสร้างโดย Google (เช่น
gki/aarch64/abi.stg
สำหรับ android16-6.12
) หรือสร้างในทรีในเครื่องที่มีโมดูลของผู้ให้บริการ
นอกจากนี้ เรายังมี
เครื่องมือในการสร้างและเปรียบเทียบคำอธิบาย ABI
สำหรับ Kernel Module Interface (KMI) ซึ่งเป็นส่วนหนึ่งของที่เก็บ
ที่อธิบายไว้ในไฟล์ Manifest
ชุดเครื่องมือที่ใช้สร้างเคอร์เนล GKI ต้องเข้ากันได้กับชุดเครื่องมือที่ใช้สร้างโมดูลของผู้ให้บริการอย่างสมบูรณ์ ตั้งแต่ Android 10 เป็นต้นไป เคอร์เนล Android ทั้งหมดต้องสร้าง ด้วยชุดเครื่องมือ LLVM เมื่อใช้ GKI ชุดเครื่องมือ LLVM ที่ใช้สร้างเคอร์เนลของผลิตภัณฑ์ และโมดูลของผู้ให้บริการต้องสร้าง ABI เดียวกันกับชุดเครื่องมือ LLVM จาก AOSP และพาร์ทเนอร์ต้องตรวจสอบว่า KMI เข้ากันได้กับเคอร์เนล GKI เราขอแนะนำเป็นอย่างยิ่งให้ใช้เครื่องมือบิลด์ที่ให้มา เนื่องจากเครื่องมือเหล่านี้มีความเข้ากันได้ดีที่สุด
สิ่งต่อไปที่ควรทำ
ดูวิธีการสร้างเคอร์เนลโดยใช้กระบวนการบิลด์แบบปิดและ ชุดเครื่องมือ LLVM ได้ที่ สร้างเคอร์เนล
ดูวิธีการตรวจสอบ ABI และแก้ไขปัญหาได้ที่ การตรวจสอบ ABI ของเคอร์เนล Android