คำถามที่พบบ่อยเกี่ยวกับเคอร์เนลของ Android

เอกสารนี้มีคําถามที่พบบ่อยเกี่ยวกับเคอร์เนล Android หรือที่เรียกว่าเคอร์เนล Generic Kernel Image (GKI) หากคุณไม่คุ้นเคยกับคำศัพท์เกี่ยวกับ GKI และเคอร์เนล GKI โปรดดูภาพรวมของเคิร์นัล

รายการสัญลักษณ์ของอินเทอร์เฟซโมดูลเคอร์เนล (KMI) เปลี่ยนแปลงได้ในเคอร์เนลที่เสถียรไหม

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

ฉันจะเปลี่ยนโครงสร้างที่โมดูลของผู้ให้บริการใช้ในเคอร์เนลที่เสถียรได้ไหม

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

ฉันจะเปลี่ยนเคอร์เนลได้ไหม ตราบใดที่ฉันไม่ทำให้ไบนารีหรือซอร์สเข้ากันไม่ได้

การเปลี่ยนแปลงที่ไม่ส่งผลต่อ KMI สามารถทำได้ตามที่อธิบายไว้ในแพตช์สำหรับ Android โดยเฉพาะ

GKI จัดการการกำหนดค่าเคอร์เนลอย่างไร

ดูข้อมูลเกี่ยวกับการกำหนดค่าเคอร์เนลได้ที่หัวข้อการเปลี่ยนแปลง gki_defconfig

ฉันจะจัดการการแก้ไขข้อบกพร่องในอัปสตรีมสำหรับการเขียนทับโมดูล GKI ที่มีอยู่ได้อย่างไร

หากคุณสร้างโมดูลของผู้ให้บริการโดยอิงตามไดรเวอร์ใน Android Common Kernel (ACK) คุณจะต้องตรวจสอบว่าการแก้ไขข้อบกพร่องจากอัปสตรีมและ ACK ได้รับการนำไปใช้กับโมดูลของคุณ โดยทั่วไปแล้ว คุณควรใช้เคอร์เนล GKI และข้อบังคับของ GKI โดยไม่แก้ไขเพื่อให้ Google อัปเดตได้อย่างสม่ำเสมอ

มีวิธีการทดสอบเฉพาะสำหรับ GKI ไหม

การทดสอบ Vendor Test Suite (VTS) จะยืนยันการติดตั้งบิลด์ GKI ที่ได้รับการรับรอง รวมถึงบังคับใช้ข้อกำหนด GKI สำหรับแต่ละรุ่น ตัวอย่างเช่น การทดสอบ VTS ของ Android 12 สำหรับส่วนหัวของบูต v3 และเพื่อยืนยันว่ามีพาร์ติชันที่จำเป็นในอุปกรณ์ที่ใช้เคอร์เนล 5.10

ฉันจะสร้างไฟล์แฟรกเมนต์ defconfig ของโปรเจ็กต์สำหรับบิลด์อุปกรณ์ได้อย่างไร

อุปกรณ์ที่เป็นไปตามข้อกำหนด GKI จํานวนมากใช้ข้อมูลโค้ดการกําหนดค่าเพื่ออธิบายตัวเลือกการกําหนดค่าที่จําเป็น นอกเหนือจาก gki_defconfig เพื่อสร้างโมดูลของผู้ให้บริการ ตัวอย่างที่เป็นส่วนหนึ่งของโค้ดเบส ACK ได้แก่ Cuttlefish และ DB845c คุณไม่สามารถหลีกเลี่ยงการตรวจสอบตัวเลือกการกําหนดค่าด้วยตนเองเพื่อเพิ่มประสิทธิภาพของข้อมูลโค้ดได้ แต่ scripts/diffconfig จากแหล่งที่มาของเคอร์เนลมีประโยชน์สําหรับการเปรียบเทียบผลลัพธ์ของ gki_defconfig และ gki_defconfig+device.fragment

มีวิธีแก้ปัญหาสำหรับ modprobe ที่ถือว่า - และ _ มีค่าเท่ากันไหม

หน้าแมนของ modprobe มีคำอธิบายดังนี้ "modprobe เพิ่มหรือนำโมดูลออกจากเคอร์เนล Linux อย่างชาญฉลาด: โปรดทราบว่าไม่มีความแตกต่างระหว่าง _ และ - ในชื่อโมดูล (ระบบจะแปลงเครื่องหมายขีดล่างโดยอัตโนมัติ) เพื่ออำนวยความสะดวก" ทีม GKI ยึดตามรูปแบบมาตรฐานของ Upstream ดังนั้นเครื่องมือของผู้ให้บริการหรือรูปแบบการตั้งชื่อโมดูลต้องคำนึงถึงการยึดตามนี้

ฉันจะเปิดใช้ debugfs เพื่อใช้งานภายในได้อย่างไร

โปรดดูรายละเอียดเกี่ยวกับการเปิดใช้ debugfs ที่หัวข้อฟีเจอร์การแก้ไขข้อบกพร่องที่รบกวนฝั่งดาวน์สตรีม

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

ABI ที่ไม่ตรงกันระหว่างการกำหนดค่าเคอร์เนล GKI กับการกำหนดค่าโมดูลแสดงถึงการใช้การกำหนดค่าโมดูลโดยนัย ซึ่งการเปิดใช้โมดูลจะทำให้มีการรวมการกำหนดค่าไบนารีไว้ในอิมเมจเคอร์เนลที่ได้ โปรดติดต่อทีมเคอร์เนลของ Android (kernel-team@android.com) เพื่อหาแนวทางแก้ปัญหา หลังจากกำหนดรายการสัญลักษณ์แล้ว ให้สร้างข้อบกพร่องในเครื่องมือติดตามปัญหาและอัปโหลดการเปลี่ยนแปลงรายการสัญลักษณ์

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

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

ตัวอย่างที่ 1: ผู้ใช้ที่มีอุปกรณ์ที่เปิดตัวด้วย Android 11 ที่มีเคอร์เนล android11-5.4 (GKI 1.0) จะเลือกตัวเลือกใดก็ได้ต่อไปนี้เมื่ออัปเกรดเป็น Android 12

  • อัปเกรดเป็นเคอร์เนล android12-5.10 GKI 2.0 (แนะนำอย่างยิ่ง)

  • ใช้เคอร์เนล android11-5.4 ต่อไป

  • อัปเกรดเป็นเคอร์เนล android12-5.4

ตัวอย่างที่ 2: ผู้ใช้ที่มีอุปกรณ์ที่เปิดตัวด้วย Android 12 ที่มีเคอร์เนล android12-5.4 หรือ android12-5.10 จะเลือกตัวเลือกใดก็ได้ต่อไปนี้เมื่ออัปเกรดเป็น Android 13

  • อัปเกรดเป็นเคอร์เนล GKI 2.0 ของ android13-5.10 หรือ android13-5.15 (แนะนำอย่างยิ่ง)

  • ใช้เคอร์เนล android12-5.4 GKI 1.0 ต่อไป

  • ใช้เคอร์เนล android12-5.10 GKI 2.0 ต่อไป

สำหรับเฉพาะการทดสอบการปฏิบัติตามข้อกำหนดของ Treble เราขอแนะนำให้คุณดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้

  • แทนที่เคอร์เนลของพาร์ทเนอร์ด้วยเคอร์เนล GKI 1.0 (android11-5.4 หรือ android12-5.4) ที่ได้รับการรับรอง

  • มาพร้อมกับเคอร์เนล GKI 2.0 ที่ได้รับการรับรอง (android12-5.10, android13-5.10 หรือ android13-5.15) โดยขึ้นอยู่กับตัวเลือกของคุณ

คุณสามารถดาวน์โหลดบิลด์ GKI 1.0 ได้จากรุ่น 1.0 ของ Generic Kernel Image (GKI) บิลด์

คุณสามารถดาวน์โหลดบิลด์ GKI 2.0 ได้จากบิลด์รุ่น Generic Kernel Image (GKI)