รักษาอินเทอร์เฟซของโมดูลเคอร์เนลให้เสถียร

การรักษาอินเทอร์เฟซโมดูลเคอร์เนล (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
  • มีการใช้เฉพาะเครื่องมือ 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 เราขอแนะนำให้ใช้เครื่องมือสร้างที่ให้มา เนื่องจากเครื่องมือเหล่านี้มีความเข้ากันได้ดีที่สุด

สิ่งต่อไปที่ควรทำ