ภาพรวมโมดูลเคอร์เนล

โมดูลเคอร์เนลมี 2 ประเภท ได้แก่ ไม่จำเป็นต้องสนใจฮาร์ดแวร์ โมดูล GKI และเฉพาะฮาร์ดแวร์ โมดูลของผู้ให้บริการ หน้านี้จะแสดงภาพรวมของทั้ง 2 ประเภท อีกด้วย

โมดูล GKI

ใช้โมดูลอิมเมจเคอร์เนลทั่วไป (GKI) เพื่อส่งเคอร์เนลที่ไม่ต้องเปิดเครื่อง ความสามารถที่แยกต่างหากจากเคอร์เนลหลักทั่วไป เมื่อใช้โมดูล GKI คุณสามารถ เลือกความสามารถเฉพาะเคอร์เนลที่จะใช้ ซึ่งมักจะลดขนาดอิมเมจของเคอร์เนล และการใช้งานหน่วยความจำรันไทม์ ขนาดที่เล็กลงทำให้ GKI เหมาะสำหรับ อุปกรณ์ Android Go และรูปแบบของอุปกรณ์อื่นๆ ที่จำกัดทรัพยากร

โมดูล GKI ยังมีกลไกในการช่วยให้ผู้ให้บริการ ฟีเจอร์อัปสตรีมหลังจากบรรลุเป้าหมายของ KMI โค้ดในตัว ไม่สามารถแทนที่โดยไม่สร้างรูปภาพอื่น ในขณะที่โค้ดที่ส่งเป็น โมดูลสามารถแทนที่ด้วยโมดูลอื่น

โมดูล GKI ใช้โครงสร้างพื้นฐานการรับรองเวลาบิลด์ของเคอร์เนลเพื่อแยกความแตกต่าง ระหว่าง GKI และโมดูลอื่นๆ ขณะรันไทม์ อนุญาตให้โหลดโมดูลที่ไม่ได้ลงชื่อ โดยใช้เฉพาะสัญลักษณ์ที่ปรากฏในรายการที่อนุญาตหรือที่ผู้อื่นมีให้ โมดูลที่ไม่ได้ลงชื่อ

โมดูล GKI มี 2 ประเภท ได้แก่ โมดูล GKI ที่มีการป้องกัน และโมดูล GKI ที่ไม่มีการป้องกัน

โมดูล GKI ที่มีการป้องกัน

Google เป็นผู้นำส่งโมดูล GKI ที่มีการป้องกัน โดยไม่มีการจำกัดในลักษณะใดๆ และ จะทำงานเสมือนสร้างขึ้นด้วยเคอร์เนลหลังจากการโหลด นอกจากนี้ โมดูล GKI ที่ได้รับการปกป้องจะมีลักษณะดังต่อไปนี้

  • โมดูล GKI ที่มีการป้องกันมีสิทธิ์เข้าถึงสัญลักษณ์เคอร์เนลที่ไม่ใช่ KMI ให้กับโมดูลของผู้ให้บริการหรือโมดูล GKI ที่ไม่มีการป้องกัน
  • โมดูล GKI ที่มีการป้องกันสามารถส่งออกสัญลักษณ์ที่กลายเป็นส่วนหนึ่งของแพลตฟอร์ม KMI ตราบใดที่สัญลักษณ์เหล่านั้น อยู่ในรายการสัญลักษณ์
  • โมดูลผู้ให้บริการจะลบล้างโมดูล GKI ที่มีการป้องกันไม่ได้

โมดูล GKI ที่มีการป้องกันคือคลาสเริ่มต้นของโมดูล GKI GKI ทั้งหมด โมดูลจะได้รับการพิจารณาว่าได้รับการปกป้องเมื่อ KMI หยุดทำงาน

โมดูล GKI ที่ไม่มีการป้องกัน

โมดูลผู้ให้บริการลบล้างโมดูล GKI ที่ไม่มีการป้องกันได้ หลังจาก KMI หยุดนิ่ง โมดูล GKI ที่ได้รับการคุ้มครองอาจได้รับการจัดประเภทใหม่เป็น "ไม่มีการคุ้มครอง" หากทีม GKI ตัดสินใจว่าผู้ให้บริการจำเป็นต้องลบล้างการใช้งานเริ่มต้น เวอร์ชันที่มีฟีเจอร์ใหม่ๆ จากอัปสตรีม Linux ในวันต่อไป รุ่น GKI ซึ่งโมดูลที่ไม่มีการปกป้องจะได้รับการจัดประเภทใหม่เป็นได้รับการปกป้องหลังจาก โค้ดอัปสตรีมเข้าสู่ Android Common Kernel (ACK) โมดูล GKI ที่ไม่มีการป้องกัน มีลักษณะดังต่อไปนี้

  • โมดูล GKI ที่ไม่ได้รับการปกป้องมีสิทธิ์เข้าถึงสัญลักษณ์ที่ส่งออกเหมือนกับผู้ให้บริการ โมดูล
  • โมดูล GKI ที่ไม่มีการป้องกันจะส่งออกสัญลักษณ์ที่ส่งออกโดย GKI ที่มีการป้องกันไม่ได้ โมดูล
  • โมดูล GKI ที่ไม่มีการป้องกันต้องเก็บรักษาอินเทอร์เฟซ KMI ไว้เสมือนเป็นส่วนหนึ่งของ เคอร์เนลหลัก
  • โมดูล GKI ที่ไม่มีการป้องกันสามารถลบล้างได้โดยโมดูลของผู้ให้บริการ

โมดูลของผู้ให้บริการ

พาร์ทเนอร์นำส่งโมดูลผู้ให้บริการเพื่อใช้ SoC และอุปกรณ์เฉพาะ ความสามารถ โมดูลเคอร์เนลที่มีอยู่ซึ่งไม่ได้นำส่งเป็นส่วนหนึ่งของ เคอร์เนล GKI นำส่งเป็นโมดูลผู้ให้บริการได้

เนื่องจากเป้าหมายหลักอย่างหนึ่งของโครงการ GKI คือการลด ในเคอร์เนลหลัก ผู้ให้บริการสามารถคาดหวังว่า GKI เคอร์เนลจะไม่รวมโมดูลที่จัดการฮาร์ดแวร์ของตนเองอย่างชัดเจน สำหรับ ผู้ให้บริการ ABC Inc. สามารถคาดหวังว่าการกำหนดค่า CONFIG_ABC_SOC_SUPPORT จะไม่สามารถเปิดใช้เป็นแบบบิวท์อินหรือโหลดได้ โมดูล GKI ที่ไม่มีการสนับสนุน

หากมีไดรเวอร์เคอร์เนลหรือเฟรมเวิร์กใน ACK แต่ไม่ได้นำส่งเป็นส่วนหนึ่งของ เคอร์เนล GKI ผู้ให้บริการสามารถแก้ไขไดรเวอร์และนำส่งเป็นผู้ให้บริการได้ เราไม่สนับสนุนให้ใช้การแก้ไขดังกล่าวสำหรับโมดูลที่ไม่ใช่ผู้ให้บริการเฉพาะ เนื่องจากอาจมีการจัดส่งความสามารถเดียวกันนี้ด้วยเคอร์เนล GKI ใน ในอนาคต เมื่อเคอร์เนล GKI มีความสามารถของผู้ให้บริการ โมดูลของผู้ให้บริการจะไม่โหลด ตัวอย่างเช่น CONFIG_GREYBUS ไม่ได้ตั้งค่าสำหรับ GKI ใน Android 11 ดังนั้น อาจนำส่งโมดูลผู้ให้บริการสีเทา แต่ CONFIG_GREYBUS อาจ เปิดใช้เป็น GKI ในตัวหรือโมดูลใน Android 12 ซึ่งทำให้ระบบไม่โหลดโมดูลผู้ให้บริการเกรย์บัส แนวทางปฏิบัติแนะนำคือการใช้ เวอร์ชันอัปสตรีมของไดรเวอร์ที่ไม่ใช่ผู้ให้บริการเฉพาะ หากมีการจัดส่งเป็น โมดูลผู้ให้บริการ

คุณสามารถนำส่งโมดูลผู้ให้บริการได้ใน vendor หรือ vendor_boot รูปภาพ โมดูลที่จำเป็นตั้งแต่เนิ่นๆ ในการเปิดเครื่องต้องอยู่ใน vendor_boot มีค่าใช้จ่ายขณะเปิดเครื่องที่เชื่อมโยงกับโมดูลการโหลดจาก vendor_boot