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

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

การสร้างเคอร์เนลผลิตภัณฑ์ก่อน GKI

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

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

การแก้ไขทั้งหมดเหล่านี้อาจส่งผลให้โค้ดเคอร์เนลมากถึง 50% เป็นโค้ดนอกโครงสร้างและไม่ได้มาจากเคอร์เนลลินุกซ์ต้นน้ำหรือ 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)

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

ด้วยการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับเคอร์เนล อุปกรณ์เรือธงส่วนใหญ่จะมาพร้อมกับเวอร์ชันเคอร์เนลที่มีอายุอย่างน้อย 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 Platform ทุกรุ่นที่รองรับ 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 มีดังต่อไปนี้:

  • หลีกเลี่ยงการถดถอยใน Vendor Test Suite (VTS) หรือ Compatibility Test Suite (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

,

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

การสร้างเคอร์เนลผลิตภัณฑ์ก่อน GKI

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

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

การแก้ไขทั้งหมดเหล่านี้อาจส่งผลให้โค้ดเคอร์เนลมากถึง 50% เป็นโค้ดนอกโครงสร้างและไม่ได้มาจากเคอร์เนลลินุกซ์ต้นน้ำหรือ 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)

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

ด้วยการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับเคอร์เนล อุปกรณ์เรือธงส่วนใหญ่จะมาพร้อมกับเวอร์ชันเคอร์เนลที่มีอายุอย่างน้อย 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 Platform ทุกรุ่นที่รองรับ 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 มีดังต่อไปนี้:

  • หลีกเลี่ยงการถดถอยใน Vendor Test Suite (VTS) หรือ Compatibility Test Suite (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