โมดูลเคอร์เนลมี 2 ประเภท ได้แก่ โมดูล GKI ที่ไม่ขึ้นอยู่กับฮาร์ดแวร์ และโมดูลของผู้ให้บริการเฉพาะสำหรับฮาร์ดแวร์ หน้านี้จะแสดงภาพรวมของข้อบังคับทั้ง 2 ประเภท
โมดูล GKI
โมดูลอิมเมจเคอร์เนลทั่วไป (GKI) ใช้เพื่อส่งมอบความสามารถของเคิร์นัลที่ไม่ต้องใช้การบูตแยกต่างหากจากเคอร์เนลหลักทั่วไป โมดูล GKI ช่วยให้คุณเลือกความสามารถของเคอร์เนลที่ต้องการใช้ได้ ซึ่งมักจะช่วยลดขนาดของภาพเคอร์เนลและการใช้หน่วยความจำรันไทม์ การลดขนาดทำให้ GKI เหมาะสําหรับอุปกรณ์ Android Go และอุปกรณ์รูปแบบอื่นๆ ที่มีทรัพยากรจํากัด
โมดูล GKI ยังมีกลไกที่ช่วยให้ผู้ให้บริการรวมฟีเจอร์ใหม่ใน upstream ได้หลังจากผ่านเหตุการณ์สำคัญ "หยุดการอัปเดต KMI" คุณจะแทนที่โค้ดในตัวไม่ได้หากไม่สร้างภาพอื่น แต่โค้ดที่ส่งเป็นโมดูลจะแทนที่ด้วยโมดูลอื่นได้
โมดูล GKI ใช้โครงสร้างพื้นฐานในลงชื่อเวลาบิลด์ของเคอร์เนลเพื่อแยกความแตกต่างระหว่าง GKI และโมดูลอื่นๆ ขณะทำงาน ระบบอนุญาตให้โหลดโมดูลที่ไม่ได้เซ็นชื่อได้ ตราบใดที่โมดูลดังกล่าวใช้เฉพาะสัญลักษณ์ที่ปรากฏในรายการที่อนุญาตหรือที่มาจากโมดูลอื่นๆ ที่ไม่ได้เซ็นชื่อ
โมดูล GKI มี 2 ประเภท ได้แก่ โมดูล GKI ที่มีการป้องกันและโมดูล GKI ที่ไม่มีการป้องกัน
โมดูล GKI ที่มีการป้องกัน
โมดูล GKI ที่ปกป้องจะส่งโดย Google โดยไม่มีข้อจำกัดใดๆ และทำงานเหมือนกับว่าสร้างขึ้นด้วยเคอร์เนลหลังจากโหลด นอกจากนี้ โมดูล GKI ที่ปกป้องแล้วยังมีลักษณะต่อไปนี้
- โมดูล GKI ที่มีการป้องกันมีสิทธิ์เข้าถึงสัญลักษณ์เคอร์เนลที่ไม่ใช่ KMI ซึ่งใช้ไม่ได้กับโมดูลของผู้ให้บริการหรือโมดูล GKI ที่ไม่มีการป้องกัน
- โมดูล GKI ที่ปกป้องสามารถส่งออกสัญลักษณ์ที่จะกลายเป็นส่วนหนึ่งของแพลตฟอร์ม KMI ได้ ตราบใดที่มีการใช้สัญลักษณ์เหล่านั้นในรายการสัญลักษณ์
- โมดูล GKI ที่ปกป้องไว้จะลบล้างโดยโมดูลของผู้ให้บริการไม่ได้
โมดูล GKI ที่มีการป้องกันคือคลาสเริ่มต้นของโมดูล GKI ระบบจะถือว่าข้อบังคับของ GKI ทั้งหมดได้รับการปกป้อง ณ เวลาที่หยุด KMI
โมดูล GKI ที่ไม่มีการป้องกัน
โมดูลผู้ให้บริการลบล้างโมดูล GKI ที่ไม่มีการป้องกันได้ หลังจากหยุดให้บริการ KMI แล้ว โมดูล GKI ที่ปกป้องไว้อาจได้รับการจัดประเภทใหม่ว่าไม่ได้รับการปกป้องหากทีม GKI ตัดสินใจว่าผู้ให้บริการต้องลบล้างการติดตั้งใช้งานเริ่มต้นด้วยเวอร์ชันที่มีฟีเจอร์ใหม่จาก Linux เวอร์ชันที่พัฒนาขึ้น ในรุ่น GKI ถัดไป ระบบจะจัดประเภทโมดูลที่ไม่มีการป้องกันใหม่เป็น "มีการป้องกัน" หลังจากที่โค้ดจาก upstream เข้าสู่ 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 ดังนั้นผู้ให้บริการจึงอาจส่งโมดูลผู้ให้บริการ Greybus อย่างไรก็ตาม ระบบอาจเปิดใช้ CONFIG_GREYBUS
เป็น GKI ในตัวหรือเป็นโมดูลใน Android 12 ซึ่งในกรณีนี้ระบบจะไม่โหลดโมดูลของผู้ให้บริการ Greybus แนวทางปฏิบัติแนะนำคือให้ใช้ไดรเวอร์เวอร์ชันอัปสตรีมที่ไม่เจาะจงผู้ให้บริการ หากมีการนําส่งเป็นข้อบังคับของผู้ให้บริการ
คุณนำส่งโมดูลผู้ให้บริการได้ใน vendor
หรือรูปภาพ vendor_boot
โมดูลที่จําเป็นในช่วงต้นของกระบวนการบูตต้องอยู่ใน vendor_boot
โหลดโมดูลจาก vendor_boot
จะมีค่าใช้จ่ายที่เกี่ยวข้องกับเวลาในการบูต