โครงการ Generic Kernel Image (GKI)

เคอร์เนลผลิตภัณฑ์ หรือที่เรียกว่า เคอร์เนลอุปกรณ์ หรือ เคอร์เนล OEM คือเคอร์เนลที่คุณจัดส่งบนอุปกรณ์ของคุณ ก่อนที่จะมี GKI เคอร์เนลผลิตภัณฑ์ได้มาจากชุดของการเปลี่ยนแปลงเคอร์เนลอัปสตรีม รูปที่ 1 แสดงให้เห็นว่าการเพิ่มเคอร์เนลให้ผลลัพธ์แก่เคอร์เนลผลิตภัณฑ์ (OEM/เคอร์เนลอุปกรณ์):

โครงสร้างเคอร์เนลผลิตภัณฑ์ Pre-GKI

รูปที่ 1 โครงสร้างเคอร์เนลผลิตภัณฑ์ Pre-GKI

  1. เคอร์เนล Linux Long Term Supported (LTS) จาก kernel.org ได้รับการแก้ไขด้วยแพตช์เฉพาะของ Android ส่งผลให้เกิด Android Common Kernel (ACK)
  2. ACK ได้รับการแก้ไขโดยผู้จำหน่ายที่เพิ่มการรองรับ System-on-a-Chip (SoC) ผู้ขายอาจเพิ่มประสิทธิภาพหรือเพิ่มประสิทธิภาพพลังงานด้วย เคอร์เนลผลลัพธ์เรียกว่า เคอร์เนลผู้ขาย
  3. ในที่สุด เคอร์เนลของผู้จำหน่ายได้รับการแก้ไขเพิ่มเติมโดย OEM พร้อมด้วยไดรเวอร์อุปกรณ์เพิ่มเติมและการปรับแต่งที่พวกเขาเห็นว่าจำเป็น เคอร์เนลผลลัพธ์เรียกว่า เคอร์เนลผลิตภัณฑ์

การปรับเปลี่ยนทั้งหมดนี้อาจส่งผลให้โค้ดเคอร์เนลมากถึง 50% เป็นโค้ดที่ไม่อยู่ในแผนผัง และไม่ได้มาจากเคอร์เนล Linux หรือ ACK อัปสตรีม ก่อนที่จะมี GKI อุปกรณ์เกือบทุกเครื่องมีเคอร์เนลแบบกำหนดเองซึ่งส่งผลให้เกิดการกระจายตัวของเคอร์เนล

ต้นทุนของการกระจายตัว

การกระจายตัวของเคอร์เนลมีผลเสียหลายประการต่อชุมชน Android

การอัปเดตความปลอดภัยต้องใช้แรงงานมาก

แพตช์ความปลอดภัยที่อ้างถึงใน Android Security Bulletin (ASB) จะต้องถูกแบ็คพอร์ตไปยังเคอร์เนลของอุปกรณ์แต่ละตัว อย่างไรก็ตาม เนื่องจากการกระจายตัวของเคอร์เนล การเผยแพร่การแก้ไขด้านความปลอดภัยไปยังอุปกรณ์ Android ในภาคสนามจึงมีราคาแพงมาก

ยากที่จะรวมการอัปเดตที่รองรับระยะยาว

รุ่น ที่รองรับระยะยาว (LTS) ประกอบด้วยการแก้ไขด้านความปลอดภัยและการแก้ไขข้อบกพร่องที่สำคัญอื่นๆ การติดตามข่าวสารล่าสุดของ LTS ได้รับการพิสูจน์แล้วว่าเป็นวิธีที่มีประสิทธิภาพที่สุดในการแก้ไขปัญหาด้านความปลอดภัย บนอุปกรณ์ Pixel พบว่า 90% ของปัญหาความปลอดภัยของเคอร์เนลที่รายงานใน ASB ได้รับการแก้ไขแล้วสำหรับอุปกรณ์ที่อัปเดตอยู่เสมอ

อย่างไรก็ตาม ด้วยการปรับเปลี่ยนแบบกำหนดเองทั้งหมดในเคอร์เนลของอุปกรณ์ การรวมการแก้ไข LTS เข้ากับเคอร์เนลของอุปกรณ์จึงเป็นเรื่องยาก

ยับยั้งการอัพเกรดการเปิดตัวแพลตฟอร์ม Android

การแยกส่วนทำให้ฟีเจอร์ใหม่ของ Android ที่ต้องเพิ่มการเปลี่ยนแปลงเคอร์เนลให้กับอุปกรณ์ในภาคสนามเป็นเรื่องยาก รหัส Android Framework ต้องถือว่ารองรับเคอร์เนลเวอร์ชันมากถึงห้าเวอร์ชัน และไม่มีการเปลี่ยนแปลงเคอร์เนลสำหรับแพลตฟอร์มใหม่ (Android 10 รองรับเคอร์เนล 3.18, 4.4, 4.9, 4.14 และ 4.19 ซึ่งในบางกรณียังไม่ได้รับการ ปรับปรุงด้วยคุณสมบัติใหม่ตั้งแต่ Android 8 ในปี 2560)

ยากที่จะสนับสนุนการเปลี่ยนแปลงเคอร์เนลกลับไปเป็นอัปสตรีม Linux

ด้วยการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับเคอร์เนล อุปกรณ์เรือธงส่วนใหญ่จะมาพร้อมกับเวอร์ชันเคอร์เนลที่มีอายุอย่างน้อย 18 เดือนแล้ว ตัวอย่างเช่น เคอร์เนล 4.14 เปิดตัวโดย kernel.org ในเดือนพฤศจิกายนปี 2017 และโทรศัพท์ Android เครื่องแรกที่ใช้เคอร์เนล 4.14 จะจัดส่งในฤดูใบไม้ผลิปี 2019

ความล่าช้าอันยาวนานระหว่างการเปิดตัวเคอร์เนลอัปสตรีมและผลิตภัณฑ์ทำให้ชุมชน Android ป้อนคุณสมบัติและไดรเวอร์ที่จำเป็นลงในเคอร์เนลอัปสตรีมได้ยาก

การแก้ไขการกระจายตัว: อิมเมจเคอร์เนลทั่วไป

โปรเจ็กต์ Generic Kernel Image (GKI) จัดการกับการกระจายตัวของเคอร์เนลด้วยการรวมคอร์เคอร์เนลและย้ายการสนับสนุน SoC และบอร์ดออกจากคอร์เคอร์เนลไปยังโมดูลผู้จำหน่ายที่โหลดได้ GKI ยังนำเสนอ Kernel Module Interface (KMI) ที่เสถียรสำหรับโมดูลของผู้จำหน่าย ดังนั้นโมดูลและเคอร์เนลจึงสามารถอัปเดตได้อย่างอิสระ ลักษณะบางอย่างของเคอร์เนล GKI คือ:

  • เคอร์เนล GKI สร้างขึ้นจากแหล่ง ACK
  • เคอร์เนล GKI เป็นไบนารีเคอร์เนลเดี่ยวบวกกับโมดูลที่โหลดได้ที่เกี่ยวข้องต่อสถาปัตยกรรมต่อการเปิดตัว LTS (ปัจจุบันมีเพียง arm64 สำหรับ android11-5.4 และ android12-5.4 )
  • เคอร์เนล GKI ได้รับการทดสอบกับแพลตฟอร์ม Android ทุกรุ่นที่รองรับ ACK ที่เกี่ยวข้อง ไม่มีการเลิกใช้งานฟีเจอร์ตลอดอายุการใช้งานของเวอร์ชันเคอร์เนล GKI
  • เคอร์เนล GKI เปิดเผย KMI ที่เสถียรแก่ไดรเวอร์ภายใน LTS ที่กำหนด
  • เคอร์เนล GKI ไม่มีรหัสเฉพาะ SoC หรือรหัสเฉพาะของบอร์ด

สำหรับรูปภาพของสถาปัตยกรรม GKI โปรดดู ภาพรวมเคอร์เนล

GKI เป็นการเปลี่ยนแปลงที่ซับซ้อนซึ่งเปิดตัวในหลายขั้นตอนโดยเริ่มจากเคอร์เนล v5.4 ในแพลตฟอร์ม Android 11

ขณะนี้มีสองขั้นตอน GKI:

  • GKI 1.0 เปิดตัวใน Android 11 สำหรับอุปกรณ์ที่มีเคอร์เนล 5.4 GKI 1.0 ใช้กับอุปกรณ์ทั้งหมดที่มาพร้อมกับเคอร์เนล 5.4 แม้แต่อุปกรณ์ที่เปิดตัวพร้อมกับ Android 12 หรือ Android 13 ก็ตาม
  • GKI 2.0 เปิดตัวใน Android 12 สำหรับอุปกรณ์ที่มีเคอร์เนล 5.10 และเป็นมาตรฐานใหม่สำหรับอุปกรณ์ทั้งหมดที่มาพร้อมกับเคอร์เนล 5.10 ขึ้นไป

จีเคไอ 1.0

ใน GKI 1.0 อุปกรณ์ที่เปิดตัวด้วยเคอร์เนลเวอร์ชัน 5.4 จะต้องผ่านการทดสอบ GKI (Android 11 และแพลตฟอร์มรุ่นใหม่กว่า) เป้าหมาย GKI 1.0 มีดังต่อไปนี้:

  • หลีกเลี่ยงการถดถอยใน ชุดทดสอบผู้ขาย (VTS) หรือ ชุดทดสอบความเข้ากันได้ (CTS) เมื่อเปลี่ยนเคอร์เนลผลิตภัณฑ์ด้วยเคอร์เนล GKI
  • ลดภาระของพันธมิตรในการรักษาเคอร์เนลให้ทันสมัยด้วยเคอร์เนลทั่วไป AOSP
  • รวมการเปลี่ยนแปลงหลักของ Android ในเคอร์เนลสำหรับอุปกรณ์ที่อัปเกรดและเปิดใช้งานด้วย Android รุ่นใหม่
  • อย่าทำลายพื้นที่ผู้ใช้ Android
  • แยกส่วนประกอบเฉพาะของฮาร์ดแวร์ออกจากเคอร์เนลหลักเป็นโมดูลที่โหลดได้

สำหรับเอกสาร GKI 1.0 โปรดดู ส่วน GKI 1.0

จีเคไอ 2.0

ใน GKI 2.0 อุปกรณ์ที่เปิดตัวด้วยเคอร์เนลเวอร์ชัน 5.10 ขึ้นไปจะต้องจัดส่งพร้อมกับเคอร์เนล GKI (เริ่มต้นด้วย Android 12) อิมเมจสำหรับบูตที่เซ็นชื่อพร้อมใช้งานและอัปเดตเป็นประจำด้วย LTS และการแก้ไขข้อบกพร่องที่สำคัญ เนื่องจากมีการรักษาความเสถียรของไบนารีสำหรับ KMI คุณสามารถติดตั้งอิมเมจสำหรับบูตเหล่านี้ได้โดยไม่ต้องทำการเปลี่ยนแปลงกับอิมเมจของผู้จำหน่าย เป้าหมาย GKI 2.0 มีดังต่อไปนี้:

  • อย่าแนะนำประสิทธิภาพที่สำคัญหรือการถดถอยของพลังงานเมื่อเปลี่ยนเคอร์เนลผลิตภัณฑ์ด้วยเคอร์เนล GKI
  • ช่วยให้คู่ค้าสามารถส่งมอบการแก้ไขความปลอดภัยของเคอร์เนลและแก้ไขข้อบกพร่องโดยไม่ต้องเกี่ยวข้องกับผู้จำหน่าย
  • ลดต้นทุนในการอัปเดตเวอร์ชันเคอร์เนลหลักสำหรับอุปกรณ์ (เช่น จากเวอร์ชัน 5.10 เป็นเคอร์เนล LTS ปี 2021)
  • รักษาไบนารีเคอร์เนล GKI เดี่ยวต่อสถาปัตยกรรมโดยการอัปเดตเวอร์ชันเคอร์เนลด้วยกระบวนการอัปเกรดที่ชัดเจน

GKI 2.0 แสดงถึงสถานะล่าสุดของเคอร์เนล Android เอกสารประกอบเคอร์เนลที่อยู่นอกส่วนย่อย GKI 1.0 และ เคอร์เนลก่อนหน้า (<=4.19) สะท้อนถึงสถาปัตยกรรม GKI 2.0