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

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

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