ภาพรวมของเคอร์เนล

เคอร์เนล Android อิงตามเคอร์เนล Linux ที่ได้รับการสนับสนุนระยะยาว (LTS) ต้นทาง ที่ Google เราจะรวมเคอร์เนล LTS เข้ากับแพตช์เฉพาะของ Android เพื่อสร้างเคอร์เนลทั่วไปของ Android (ACK)

ACK สร้างขึ้นจากที่เก็บ kernel/common ที่เก็บนี้เป็น ซูเปอร์เซ็ตของเคอร์เนล Linux ต้นทางที่มีแพตช์เพิ่มเติมเฉพาะ Android

ACK เวอร์ชัน 5.10 ขึ้นไปเรียกอีกอย่างว่าเคอร์เนล *Generic Kernel Image (GKI) เคอร์เนล GKI รองรับการแยกโค้ดเคอร์เนลหลักทั่วไปและโมดูล GKI ที่ไม่ขึ้นอยู่กับฮาร์ดแวร์ออกจากโมดูลของผู้ให้บริการที่เฉพาะเจาะจงฮาร์ดแวร์

Kernel Module Interface (KMI) ช่วยให้การโต้ตอบระหว่างเคอร์เนล GKI กับโมดูลของผู้ให้บริการเป็นไปได้ โดย KMI ประกอบด้วยรายการสัญลักษณ์ที่ระบุฟังก์ชันและข้อมูลส่วนกลางที่โมดูลของผู้ให้บริการต้องการ รูปที่ 1 แสดงสถาปัตยกรรมของเคอร์เนล GKI และโมดูลของผู้ให้บริการ

สถาปัตยกรรมเคอร์เนล GKI และโมดูลของผู้ให้บริการ

รูปที่ 1 สถาปัตยกรรมเคอร์เนล GKI และโมดูลของผู้ให้บริการ

อภิธานศัพท์เคอร์เนล

ต่อไปนี้คือคำศัพท์ที่ใช้ในเอกสารประกอบของเคอร์เนล

ประเภทเคอร์เนล

เคอร์เนลทั่วไปของ Android (ACK)
เคอร์เนลที่อยู่ดาวน์สตรีมของเคอร์เนล LTS และมีแพตช์ที่ สำคัญต่อชุมชน Android แพตช์เหล่านี้ยังไม่ได้รวมเข้ากับ เคอร์เนล Linux mainline หรือ GKI ระยะยาว

เคอร์เนลเวอร์ชัน 5.10 ขึ้นไปเรียกอีกอย่างว่าเคอร์เนล Generic Kernel Image (GKI)

เคอร์เนลของโครงการโอเพนซอร์ส Android (AOSP)
ดูเคอร์เนลทั่วไปของ Android

ฟีเจอร์ของ Android 12 ไม่สามารถพอร์ตไปยังเคอร์เนล 4.19 ได้ ชุดฟีเจอร์จะคล้ายกับอุปกรณ์ที่เปิดตัวด้วย 4.19 ใน Android 11 และอัปเกรดเป็น Android 12

เคอร์เนล Generic Kernel Image (GKI)

เคอร์เนล ACK เวอร์ชัน 5.10 ขึ้นไป(aarch64 เท่านั้น) เคอร์เนล GKI มี 2 ส่วนดังนี้

  • เคอร์เนลทั่วไป - ส่วนของเคอร์เนล GKI ที่ใช้ร่วมกันใน อุปกรณ์ทั้งหมด

  • โมดูล GKI - โมดูลเคอร์เนลที่สร้างโดย Google ซึ่งโหลดแบบไดนามิกได้ ในอุปกรณ์ที่เกี่ยวข้อง โมดูลเหล่านี้สร้างขึ้นเป็นอาร์ติแฟกต์ ของเคอร์เนล GKI และจะจัดส่งพร้อมกับ GKI ในรูปแบบ system_dlkm_staging_archive.tar.gz โมดูล GKI ได้รับการลงนามโดย Google โดยใช้คู่คีย์เวลาบิลด์เคอร์เนล และใช้ได้กับ เคอร์เนล GKI ที่สร้างขึ้นด้วยกันเท่านั้น

เคอร์เนล Kernel Module Interface (KMI)

ดูเคอร์เนล GKI

เคอร์เนลที่ได้รับการสนับสนุนระยะยาว (LTS)

เคอร์เนล Linux ที่รองรับเป็นเวลา 2-6 ปี เคอร์เนล LTS จะ เปิดตัวปีละครั้งและเป็นพื้นฐานของเคอร์เนลทั่วไปของ Android แต่ละรายการของ Google

ประเภทสาขา

ACK KMI kernel branch
สาขาที่สร้างเคอร์เนล GKI ชื่อสาขาจะสอดคล้องกับเวอร์ชันเคอร์เนล เช่น android15-6.6
Android-mainline
สาขาการพัฒนาหลักสำหรับฟีเจอร์ Android เมื่อมีการประกาศเคอร์เนล LTS ใหม่ในต้นทาง ระบบจะแยกเคอร์เนล GKI ใหม่ที่เกี่ยวข้องออกจาก android-mainline

Linux mainline : สาขาการพัฒนาหลักสำหรับเคอร์เนล Linux ต้นทาง รวมถึงเคอร์เนล LTS

คำศัพท์อื่นๆ

รูปภาพการเปิดเครื่องที่ได้รับการรับรอง
เคอร์เนลที่ส่งในรูปแบบไบนารี (boot.img) และแฟลชลงในอุปกรณ์ รูปภาพนี้ถือว่าได้รับการรับรองเนื่องจากมีใบรับรองที่ฝังอยู่ เพื่อให้ Google ยืนยันได้ว่าอุปกรณ์จัดส่งพร้อมเคอร์เนลที่ได้รับการรับรองจาก Google
โมดูลเคอร์เนลที่โหลดได้แบบไดนามิก (DLKM)
โมดูลที่โหลดแบบไดนามิกระหว่างการบูตอุปกรณ์ได้ ทั้งนี้ขึ้นอยู่กับ ความต้องการของอุปกรณ์ ทั้ง GKI และโมดูลของผู้ให้บริการต่างก็เป็น DLKM ประเภทหนึ่ง DLKM จะ เผยแพร่ในรูปแบบ .ko และอาจเป็นไดรเวอร์หรืออาจให้ฟังก์ชันการทำงานอื่นๆ ของเคอร์เนล
โปรเจ็กต์ GKI
โปรเจ็กต์ของ Google ที่จัดการปัญหาการแยกส่วนของเคอร์เนลโดยแยกฟังก์ชันการทำงานของเคอร์เนลหลักทั่วไป ออกจาก SoC และการรองรับบอร์ดที่เฉพาะเจาะจงของผู้ให้บริการเป็นโมดูลที่โหลดได้

Generic Kernel Image (GKI) : อิมเมจบูทที่ Google รับรองซึ่งมีเคอร์เนล GKI ที่สร้างจาก โครงสร้างแหล่งที่มาของ ACK และเหมาะที่จะแฟลชไปยังพาร์ติชันการบูท ของอุปกรณ์ที่ขับเคลื่อนโดย Android

Kernel Module Interface (KMI)
อินเทอร์เฟซระหว่างเคอร์เนล GKI กับโมดูลของผู้ให้บริการ ซึ่งช่วยให้ โมดูลของผู้ให้บริการได้รับการอัปเดตแยกจากเคอร์เนล GKI อินเทอร์เฟซนี้ประกอบด้วยฟังก์ชันเคอร์เนลและข้อมูลส่วนกลางที่ระบุว่าเป็น การขึ้นต่อกันของผู้ให้บริการ/OEM โดยใช้รายการสัญลักษณ์ต่อพาร์ทเนอร์
โมดูลผู้ให้บริการ
โมดูลเฉพาะฮาร์ดแวร์ที่พัฒนาโดยพาร์ทเนอร์และมี SoC และ ฟังก์ชันการทำงานเฉพาะอุปกรณ์ โมดูลของผู้ให้บริการเป็นโมดูลเคอร์เนลประเภทหนึ่งที่โหลดแบบไดนามิกได้

ขั้นตอนถัดไป

หากคุณเพิ่งเริ่มพัฒนาเคอร์เนล Android โปรดเริ่มต้นด้วยการอ่านข้อมูลต่อไปนี้

หากคุณเพิ่งเริ่มพัฒนาเคอร์เนล GKI โปรดเริ่มต้นด้วยการอ่านการพัฒนา GKI