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

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

ดังนั้น เคอร์เนลของอุปกรณ์จึงประกอบด้วย:

  • ต้นน้ำ: เคอร์เนล Linux จาก kernel.org
  • AOSP: แพตช์เฉพาะ Android เพิ่มเติมจากเคอร์เนลทั่วไปของ AOSP
  • ผู้จำหน่าย: SoC และการเปิดใช้งานอุปกรณ์ต่อพ่วงและแพตช์การปรับให้เหมาะสมจากผู้ขาย
  • OEM/อุปกรณ์: ไดรเวอร์อุปกรณ์เพิ่มเติมและการปรับแต่ง

เกือบทุกอุปกรณ์มีเคอร์เนลที่กำหนดเอง นี่คือการกระจายตัวของเคอร์เนล

ลำดับชั้นของเคอร์เนล Android นำไปสู่การแตกแฟรกเมนต์

รูปที่ 1 ลำดับชั้นของเคอร์เนล Android นำไปสู่การแตกแฟรกเมนต์

ค่าใช้จ่ายในการกระจายตัว

การกระจายตัวของเคอร์เนลมีผลเสียหลายประการต่อชุมชน 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

โปรเจ็ก ต์ 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 T (รุ่นทดลอง AOSP)
  • GKI 2.0 เปิดตัวใน Android 12 สำหรับอุปกรณ์ที่มีเคอร์เนล 5.10 และเป็นมาตรฐานใหม่สำหรับอุปกรณ์ทั้งหมดที่มาพร้อมกับเคอร์เนล 5.10 หรือใหม่กว่า

GKI 1.0

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

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

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

GKI 2.0

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

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

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