เคอร์เนลทั่วไปของ Android

เคอร์เนลทั่วไปของ AOSP (หรือที่เรียกว่าเคอร์เนลทั่วไปของ Android หรือ ACK) เป็นเคอร์เนลที่ดาวน์สตรีมจาก kernel.org และมีแพตช์ ที่น่าสนใจสำหรับชุมชน Android ซึ่งยังไม่ได้ผสานรวมเข้ากับเคอร์เนลเมนไลน์หรือ เคอร์เนลที่รองรับระยะยาว (LTS) โดยแพตช์เหล่านี้อาจรวมถึง

  • การย้อนพอร์ตและการเลือกเชอร์รีของฟังก์ชันการทำงานต้นทางที่จำเป็นสำหรับฟีเจอร์ของ Android
  • ฟีเจอร์ที่พร้อมใช้งานสำหรับอุปกรณ์ Android แต่ยังอยู่ระหว่างการพัฒนาในต้นทาง
  • ฟีเจอร์ของผู้ให้บริการ/OEM ที่เป็นประโยชน์ต่อพาร์ทเนอร์รายอื่นๆ ในระบบนิเวศ

android-mainline เป็นสาขาการพัฒนาหลักสำหรับฟีเจอร์ Android Linux mainline จะผสานรวมเข้ากับ android-mainline ทุกครั้งที่ Linus Torvalds โพสต์ รุ่นหรือรุ่นที่คาดว่าจะเผยแพร่ ก่อนปี 2019 เคอร์เนลทั่วไปของ Android สร้างขึ้นโดยการโคลนเคอร์เนล LTS ที่ประกาศล่าสุดและเพิ่มแพตช์เฉพาะของ Android กระบวนการนี้มีการเปลี่ยนแปลงในปี 2019 เพื่อแยกเคอร์เนล Android common ใหม่จาก android-mainline โมเดลใหม่นี้ช่วยลดความพยายามอย่างมากในการส่งต่อพอร์ตและทดสอบแพตช์ Android โดยให้ผลลัพธ์เดียวกันได้ทีละน้อย android-mainline ได้รับการทดสอบอย่างต่อเนื่องและมีนัยสำคัญ โมเดลนี้จึงมีเคอร์เนลคุณภาพสูงตั้งแต่วันที่เผยแพร่

เมื่อมีการประกาศ LTS ใหม่ในต้นทาง ระบบจะแยกเคอร์เนลทั่วไปที่เกี่ยวข้องออกจาก android-mainline ซึ่งจะช่วยให้พาร์ทเนอร์เริ่มโปรเจ็กต์ได้ก่อน การประกาศเวอร์ชัน LTS โดยการผสานจาก android-mainline หลังจากสร้าง กิ่งเคอร์เนลทั่วไปใหม่แล้ว พาร์ทเนอร์จะเปลี่ยนแหล่งที่มาของการผสาน ไปยังกิ่งใหม่ได้อย่างราบรื่น

ส่วนสาขาเคอร์เนลอื่นๆ ที่พบบ่อยจะได้รับการผสานจากเคอร์เนล LTS ที่เกี่ยวข้องเป็นประจำ โดยปกติแล้ว การผสานเหล่านี้จะดำเนินการทันทีหลังจากที่โพสต์การเผยแพร่ LTS ตัวอย่างเช่น เมื่อมีการโพสต์ Linux 6.1.75 ระบบจะผสานรวมเข้ากับเคอร์เนลทั่วไป 6.1 (android14-6.1) เราขอแนะนำให้พาร์ทเนอร์อัปเดตเคอร์เนลเพื่อให้เป็นเวอร์ชันล่าสุดที่มีการแก้ไขข้อบกพร่องเฉพาะ LTS และ Android

ACK KMI kernel branch

Kernel ของ GKI มีอินเทอร์เฟซโมดูล Kernel ที่เสถียร KMI จะได้รับการระบุอย่างไม่ซ้ำกัน ตามเวอร์ชันเคอร์เนลและรุ่นแพลตฟอร์ม Android ดังนั้น จึงตั้งชื่อสาขาเป็น ANDROID_RELEASE-KERNEL_VERSION เช่น เคอร์เนล 6.1 GKI สำหรับ Android 14 มีชื่อว่า android14-6.1 สำหรับ Android 15 เราได้เปิดตัวเคอร์เนล GKI android15-6.6

ลำดับชั้นเคอร์เนลทั่วไป

แยกสาขาจาก android-mainline

ระดับบนสุดของลำดับชั้นเคอร์เนลทั่วไปแสดงในรูปที่ 1

การสร้างเคอร์เนลทั่วไปจากเคอร์เนล android-mainline

รูปที่ 1 การสร้างเคอร์เนลทั่วไปจากเคอร์เนล android-mainline

โปรดทราบว่าเราได้แยกสาขาเคอร์เนลทั่วไปของ Android ใหม่ android14-6.1 จาก android-mainline ในปี 2022 ในปี 2023 เมื่อมีการประกาศ LTS รุ่นถัดไป android15-6.6 ได้แยกสาขาจาก android-mainline

ดังที่แสดงในรูปที่ 1 เคอร์เนลแต่ละเวอร์ชันสามารถเป็นพื้นฐานสำหรับเคอร์เนล GKI 2 รายการ ตัวอย่างเช่น เคอร์เนล v5.15 ทั้ง 2 รายการคือ android13-5.15 และ android14-5.15 ซึ่งเป็นเคอร์เนลฟีเจอร์สำหรับการเปิดตัวแพลตฟอร์มที่เกี่ยวข้อง กรณีนี้เกิดขึ้นกับ 5.10 ด้วยเช่นกัน โดย android12-5.10 สร้างขึ้นเมื่อมีการประกาศ LTS และ android13-5.10 แยกสาขาจาก android12-5.10 ที่เหตุการณ์สำคัญของฟีเจอร์เคอร์เนลที่เสร็จสมบูรณ์ในฤดูใบไม้ผลิปี 2021 เพื่ออนุญาตให้พัฒนาฟีเจอร์สำหรับ Android 13 ตั้งแต่ Android 15 (2024) เป็นต้นไป จะมีเคอร์เนล GKI ใหม่เพียง เคอร์เนลเดียวต่อเวอร์ชันเคอร์เนล (ไม่มีเคอร์เนล android15-6.1)

วงจรการใช้งานของสาขา ACK KMI

วงจรการใช้งานของสาขา ACK KMI แสดงในรูปที่ 2

6.6 วงจรการใช้งานของสาขา ACK KMI

รูปที่ 2 6.6 วงจรการใช้งานของสาขา ACK KMI

รูปที่ 2 มุ่งเน้นที่สาขา ACK KMI สำหรับ 6.6 เพื่อชี้แจงกระบวนการพัฒนาและวงจรสาขา

สาขา ACK KMI แต่ละสาขาจะหมุนเวียนผ่าน 3 เฟสที่ระบุในรูปที่ 2 โดย แต่ละสาขาจะมีสีที่แตกต่างกัน ดังที่แสดง LTS จะได้รับการผสานเป็นประจำไม่ว่า จะอยู่ในระยะใดก็ตาม

ระยะการพัฒนา

เมื่อสร้างแล้ว สาขา ACK KMI จะเข้าสู่ระยะการพัฒนา (มีป้ายกำกับเป็น dev ในรูปที่ 2) และเปิดรับการมีส่วนร่วมในการเพิ่มฟีเจอร์สำหรับการเปิดตัวแพลตฟอร์ม Android รุ่นถัดไป ในรูปที่ 2 android15-6.6 สร้างขึ้นเมื่อมีการประกาศว่า 6.6 เป็นเคอร์เนล LTS ต้นทางใหม่

ระยะการรักษาเสถียรภาพ

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

ระยะหยุดการทำงานของ KMI

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

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

เช่น การเปลี่ยนแปลงที่เพิ่มฟิลด์ลงในโครงสร้างที่ใช้โดยอินเทอร์เฟซ KMI เคอร์เนลทั่วไปไม่ได้รับอนุญาตเนื่องจากเป็นการเปลี่ยนแปลงคำจำกัดความของอินเทอร์เฟซ

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

แต่คุณเพิ่มฟังก์ชันใหม่ได้โดยทำดังนี้

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

ตลอดอายุการใช้งานของเคอร์เนล GKI ระบบจะรักษาความเข้ากันได้แบบย้อนหลังกับพื้นที่ผู้ใช้ เพื่อให้ใช้เคอร์เนลได้อย่างปลอดภัยสำหรับแพลตฟอร์ม Android ที่เปิดตัวอุปกรณ์ การทดสอบอย่างต่อเนื่องกับรุ่นก่อนหน้า ช่วยรักษาความเข้ากันได้ ดังนั้นในรูปที่ 2 คุณจะใช้android15-6.6 เคอร์เนลกับอุปกรณ์ Android 15 ขึ้นไป ได้ เนื่องจากการเปิดตัวแพลตฟอร์ม Android ยังใช้ร่วมกับเวอร์ชันก่อนหน้าได้ด้วย จึงสามารถใช้android14-6.1เคอร์เนลกับอุปกรณ์ Android 15 ได้ทั้งสำหรับการเปิดตัวหรือการอัปเกรด

หมายเลขรุ่น KMI

หากมีการผสาน LTS ในช่วงการสร้างความเสถียร หรือมีปัญหาด้านความปลอดภัยหรือ เหตุการณ์อื่นๆ หลังจากนี้ที่ต้องยอมรับแพตช์ที่เปลี่ยนแปลง KMI ระบบจะเพิ่มหมายเลขรุ่น KMI ที่บันทึกไว้ใน build.config.common คุณดูรุ่น KMI ปัจจุบันได้โดยใช้คำสั่ง uname

$ uname -r
6.6.30-android15-6-g86d10b30f51f

หมายเลขหลังการเปิดตัวแพลตฟอร์มคือรุ่น KMI (ในกรณีนี้คือ 6)

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

ความเข้ากันได้ระหว่างเคอร์เนล

ข้อกำหนดด้านความเข้ากันได้ระหว่างเคอร์เนลในตระกูล LTS เดียวกันจะ มีการเปลี่ยนแปลงโดยเริ่มจากเคอร์เนล GKI ใหม่

เคอร์เนล GKI

เคอร์เนล GKI จะรักษาความเข้ากันได้แบบย้อนหลังกับแพลตฟอร์ม Android ทุกรุ่นที่รองรับเคอร์เนลเวอร์ชันนั้น นอกจากนี้ แพลตฟอร์ม Android รุ่นต่างๆ ยังเข้ากันได้แบบย้อนหลังกับเคอร์เนล GKI จากรุ่นก่อนหน้าด้วย คุณจึงใช้เคอร์เนลที่พัฒนาขึ้นสำหรับ Android 14 (2023) ในอุปกรณ์ที่ใช้ Android 15 (2024) ได้อย่างปลอดภัยandroid14-6.1 การยืนยันความเข้ากันได้จะดำเนินการผ่านการทดสอบ VTS และ CTS อย่างต่อเนื่องของเคอร์เนล GKI กับรุ่นที่รองรับทั้งหมด

KMI มีความเสถียรเพื่อให้สามารถอัปเดตเคอร์เนลได้โดยไม่ต้องสร้างโมดูลเคอร์เนลใหม่ ในอิมเมจของผู้ให้บริการ

ความเข้ากันได้ของ KMI จะไม่ได้รับการรักษาไว้ระหว่างเคอร์เนล GKI ที่แตกต่างกัน ดังนั้น เช่น คุณจะแทนที่เคอร์เนล android14-6.1 ด้วยเคอร์เนล android15-6.6 ไม่ได้โดยไม่ต้องสร้างโมดูลทั้งหมดใหม่

ระบบจะรองรับเคอร์เนล GKI สำหรับรุ่นแรกและรุ่นต่อๆ ไปเท่านั้น โดยจะไม่รองรับการเผยแพร่รุ่นเก่า ดังนั้นอุปกรณ์ที่ใช้ Android 14 (2023) จึงไม่รองรับเคอร์เนล android15-6.6

เมตริกซ์ความเข้ากันได้

ตารางนี้แสดงเวอร์ชันเคอร์เนลที่รองรับและทดสอบกับแพลตฟอร์ม Android แต่ละรุ่น

การเปิดตัวแพลตฟอร์ม Android เคอร์เนลที่รองรับ
Android 16 (2025) android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 15 (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4

อายุการใช้งานที่รองรับและแพตช์ความปลอดภัย

ACK จะได้รับการผสาน LTS จากต้นทางและการแก้ไขข้อบกพร่องสำหรับโค้ดที่เฉพาะเจาะจงของ Android การแก้ไขเหล่านี้รวมถึงแพตช์ความปลอดภัยของเคอร์เนลทั้งหมดที่อ้างอิงในกระสุนด้านความปลอดภัยของ Android รายเดือนที่เกี่ยวข้องกับ ACK

ACK อาจได้รับการสนับสนุนนานกว่าเคอร์เนลเสถียรที่เกี่ยวข้องในต้นทาง ที่ kernel.org ในกรณีนี้ Google จะให้การสนับสนุนเพิ่มเติมจนถึงวันที่สิ้นสุดอายุการใช้งาน (EOL) ที่แสดงในส่วนนี้ เมื่อเคอร์เนลถึง EOL แล้ว Google จะไม่รองรับเคอร์เนลดังกล่าวอีกต่อไป และถือว่าอุปกรณ์ที่ใช้เคอร์เนลนั้นมีความเสี่ยง

ตั้งแต่เคอร์เนล 6.6 เป็นต้นไป อายุการรองรับสำหรับเคอร์เนลที่เสถียรจะอยู่ที่ 4 ปี

ตารางนี้แสดงอายุการใช้งานของ ACK ที่รองรับ

ACK Branch วันที่
เปิดตัว
อายุการใช้งาน

(ปี)
EOL
android11-5.4 2019-11-24 6 2026-01-01
android12-5.4 2019-11-24 6 2026-01-01
android12-5.10 2020-12-13 6 2027-07-01
android13-5.10 2020-12-13 6 2027-07-01
android13-5.15 2021-10-31 6 2028-07-01
android14-5.15 2021-10-31 6 2028-07-01
android14-6.1 2022-12-11 6 2029-07-01
android15-6.6 2023-10-29 4 2028-07-01
android16-6.12 2024-11-17 4 2029-07-01

การทดสอบเคอร์เนลทั่วไป

เราทดสอบเคอร์เนลทั่วไปกับระบบ CI หลายระบบ นอกเหนือจากการทดสอบดาวน์สตรีม โดยผู้ให้บริการ

การทดสอบการทำงานของเคอร์เนล Linux

การทดสอบการทำงานของเคอร์เนล Linux (LKFT) การทดสอบจะเริ่มต้นชุดทดสอบต่างๆ ซึ่งรวมถึง kselftest, LTP, VTS และ CTS ใน ชุดอุปกรณ์ arm32 และ arm64 จริง คุณดูผลการทดสอบล่าสุดได้ ในหน้า android-lkft

การทดสอบ KernelCI

การทดสอบการสร้างและการบูตของ KernelCI จะเริ่มขึ้น เมื่อใดก็ตามที่มีการคอมมิตแพตช์ใหม่ไปยังสาขาเคอร์เนลทั่วไป มีการทดสอบและบูตการกำหนดค่าบิลด์หลายร้อยรายการในบอร์ดต่างๆ ผลการทดสอบล่าสุดสำหรับเคอร์เนล Android ดูได้ที่เว็บไซต์ KernelCL

การทดสอบก่อนส่งและหลังส่งของ Android

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

การทดสอบหลังการส่งของ Android จะดำเนินการ ในบิลด์ที่เผยแพร่ใหม่ในสาขาเคอร์เนลทั่วไปของ Android เมื่อมีการคอมมิตแพตช์ใหม่ ไปยังสาขาเคอร์เนลทั่วไปของ Android ใน ci.android.com โดย การป้อน aosp_kernel เป็นชื่อสาขาบางส่วนใน ci.android.com คุณจะเห็นรายการสาขาเคอร์เนลที่มี ผลลัพธ์พร้อมใช้งาน เช่น ผลลัพธ์สำหรับ android-mainline จะอยู่ในแดชบอร์ดการผสานรวมการสร้างอย่างต่อเนื่องของ Android (Android CI) คลิก บิลด์ที่ต้องการเพื่อดูสถานะการทดสอบในแท็บ Test Results

การทดสอบที่กำหนดโดย test-mapping พร้อมกลุ่มทดสอบ kernel-presubmit ในโครงสร้างแหล่งที่มาของแพลตฟอร์ม Android จะทำงานเป็น การทดสอบก่อนส่งสำหรับสาขาเคอร์เนล Android ตัวอย่างเช่น การกำหนดค่าต่อไปนี้ใน test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING จะเปิดใช้ vts_kernel_proc_file_api_test เป็นการทดสอบก่อนส่งที่การเช็คอินโค้ดเคอร์เนลทั่วไปของ Android

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

การทดสอบแบบ 0 วัน

การทดสอบแบบ 0 วันจะทำการทดสอบแพตช์ทีละแพตช์ ในสาขาเคอร์เนลทั่วไปของ Android ทั้งหมดเมื่อมีการคอมมิตแพตช์ใหม่ มีการทดสอบการบูต การทำงาน และประสิทธิภาพต่างๆ เข้าร่วมกลุ่มสาธารณะ cros-kernel-buildreports

เมทริกซ์ทดสอบ

เคอร์เนลทั่วไปของ Android การเปิดตัวแพลตฟอร์ม Android ชุดทดสอบ
หลัก 16 15 14 13 12 LKFT KernelCI ก่อนส่ง หลังส่ง Zero Day
android-mainline
android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4

ร่วมสนับสนุนเคอร์เนลทั่วไปของ Android

โดยทั่วไปแล้ว การพัฒนาฟีเจอร์ควรทำใน Linux หลักและไม่ใช่ในเคอร์เนลทั่วไปของ Android เราขอแนะนำอย่างยิ่งให้พัฒนาต้นทาง และหลังจากที่ยอมรับการพัฒนาแล้ว คุณสามารถย้อนกลับไปที่สาขา ACK ที่เฉพาะเจาะจงได้ตามต้องการ ทีมเคอร์เนลของ Android ยินดี ที่จะสนับสนุนความพยายามในการส่งโค้ดไปยังต้นน้ำเพื่อประโยชน์ของระบบนิเวศของ Android

ส่งแพตช์ไปยัง Gerrit และปฏิบัติตามหลักเกณฑ์การมีส่วนร่วมเหล่านี้