ข้อกำหนดเคอร์เนลหลัก

Android 8.0 และสูงกว่ากำหนดเวอร์ชันเคอร์เนลขั้นต่ำและการกำหนดค่าเคอร์เนล ซึ่งตรวจสอบโดย Vendor Test Suite (VTS) และการอัปเดตแบบ over-the-air (OTA) เมล็ดอุปกรณ์ Android ต้องเปิดใช้งานเคอร์เนล .config สนับสนุนและเลือกที่จะอ่านการตั้งค่า kernel ที่รันไทม์ผ่าน procfs ระบบไฟล์

รองรับเคอร์เนล .config

เมล็ดอุปกรณ์ทั้งหมดต้องเปิดใช้งานทั้งหมดของ หุ่นยนต์ base.cfg ซึ่งจะต้องรวมตัวเลือกต่อไปนี้เคอร์เนล-config (หรือเทียบเท่าเคอร์เนลรุ่นของพวกเขา):

CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y

เวอร์ชันเคอร์เนล

สำหรับ Android 9 ข้อกำหนดเวอร์ชันเคอร์เนลขั้นต่ำสำหรับการสนับสนุนระยะยาว (LTS) คือ 4.4.107, 4.9.84 และ 4.14.42

  • SoC ทั้งหมดที่ผลิตในปี 2018 จะต้องเปิดตัวด้วยเคอร์เนล 4.9.84 หรือสูงกว่า
  • SoC อื่นๆ ทั้งหมดที่เปิดตัวอุปกรณ์ Android ที่ใช้ Android 9 ต้องใช้เคอร์เนล 4.4.107 หรือสูงกว่า
  • เคอร์เนลของอุปกรณ์ที่ใช้ 4.14 ต้องมีรุ่น 4.14.42 หรือ LTS ที่สูงกว่า
  • โดยไม่คำนึงถึงวันที่เปิดตัว SoC ทั้งหมดที่มีอุปกรณ์เปิดตัวบน Android 8.0 และสูงกว่านั้นยังคงขึ้นอยู่กับการเปลี่ยนแปลงเคอร์เนลที่จำเป็นในการเปิดใช้งาน Treble
  • อุปกรณ์ Android รุ่นเก่าที่อัปเกรดเป็น Android 8.0 หรือสูงกว่าสามารถใช้เคอร์เนลเวอร์ชันพื้นฐานเดิมได้

สำหรับรายละเอียดเกี่ยวกับเมล็ด LTS ดู เมล็ดมีเสถียรภาพระยะยาว และ Android เมล็ดทั่วไป

การสนับสนุน Devicetree

หากแพลตฟอร์มไม่สนับสนุนการ กำหนดค่าขั้นสูงและ Power Interface (ACPI) สเปคการสนับสนุน devicetree ใน kernel ต้องเปิดใช้งานและ bootloaders ต้องผ่านคำอธิบายฮาร์ดแวร์ในรูปแบบของ devicetree เพื่อเคอร์เนล Devicetree จะต้องพร้อมใช้งานสำหรับ Android เพื่ออ่าน และต้องสามารถส่งผ่านพารามิเตอร์เฉพาะของผู้ขายและ ODM ไปยัง Android CONFIG_OF มีผลบังคับใช้พร้อมกับกับอุปกรณ์และระบบย่อยเฉพาะอื่น ๆ ทั้งหมด CONFIG_OF_* ตัวเลือกการกำหนดค่าเคอร์เนล

การใช้ DebugFS

การดำเนินงานของส่วนติดต่อผู้ขายไม่สามารถพึ่งพา DebugFS ระบบแฟ้มข้อมูลการแก้ปัญหาการเข้าถึง นั่นเป็นเพราะใน Android 7.0-10, DebugFS สามารถเปิดใช้งาน แต่การทดสอบ VTS อาจทำได้ด้วย DebugFS เดินเท้า

ใน Android 11 DebugFS ไม่สามารถเข้าถึงหรือติดตั้งบนอุปกรณ์การผลิตเพื่อให้ผู้ผลิตอุปกรณ์ต้องเอามัน ก่อน Android 11 dumpstate เข้าถึงสถิติเครื่องผูกจาก DebugFS เนื่องจากผู้ใช้สร้างการเปิดตัวพร้อมกับ Android ที่ 11 หรือสูงไม่สามารถเข้าถึง DebugFS , dumpstate เข้าถึงสถิติเครื่องผูกจาก binderfs ต้องการเปิดใช้งาน Binderfs เปิดใช้งานการตั้งค่าเคอร์เนล CONFIG_ANDROID_BINDERFS

ใน Android 11 VTS จะบังคับใช้ข้อกำหนดสองข้อนี้:

  • CONFIG_DEBUG_FS ไม่ได้เปิดใช้งานในการตั้งค่าเคอร์เนลของอุปกรณ์
  • DebugFS ไม่ได้อยู่ภายใต้ /proc/filesystems

DebugFS ใน Android 12

อุปกรณ์ที่เปิดใช้ Android 12 ที่ใช้เคอร์เนลเวอร์ชันที่สูงกว่า v5.4 จะต้องจัดส่งพร้อมกับเคอร์เนล GKI เพื่อให้คู่ค้าสามารถเข้าถึง DebugFS ใน userdebug สร้างในขณะที่พวกเขาพัฒนาบนเคอร์เนล GKI ที่เคอร์เนลกำหนดค่า CONFIG_DEBUG_FS มีที่เปิดใช้งานใน defconfig GKI ไม่เคยติด DebugFS ในการใช้สร้างอุปกรณ์สำหรับการเปิดตัวในวันที่ 11 ทั้ง Android และ Android 12

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

  • ป้องกัน userdebug สร้างตั้งใจขึ้นอยู่กับ DebugFS สำหรับฟังก์ชันการทำงานใหม่
  • ตรวจสอบให้แน่ใจว่าฟังก์ชันที่มีอยู่ใด ๆ ที่เสียหายจากการขาด DebugFS นั้นเป็นที่รู้จักในช่วงต้นของวงจรการพัฒนา

debugfs เข้าถึงใน userdebug สร้างมีการแบ่งประเภทดังนี้

  1. DebugFS initializations แฟ้มในระหว่างการบูตเครื่องเช่นการเขียนการเข้าถึงไฟล์ใน DebugFS เพื่อเปิดการเก็บรวบรวมข้อมูลการแก้ปัญหา
  2. รายงานข้อบกพร่องรุ่น: ฮัล dumpstate อ่าน DebugFS แฟ้มเมื่อ DumpstateBoard() ถูกเรียกโดย dumpstate ข้อมูลนี้เป็นส่วนหนึ่งของรายงานข้อบกพร่อง
  3. การทดสอบและการตรวจสอบเฉพาะอุปกรณ์

ตารางต่อไปนี้อธิบายถึงวิธีการของแต่ละเหล่านี้สามประเภทได้รับการสนับสนุนใน Android 11 และ Android 12. โปรดทราบว่าต่อไปนี้จะใช้กับ userdebug สร้างตั้งแต่ DebugFS ไม่สามารถติดตั้งในการใช้สร้าง

ใช้กรณี การสร้างดีบักผู้ใช้ Android 11 การสร้างดีบักผู้ใช้ Android 12
ครั้งเดียว DebugFS ไฟล์เริ่มต้นระหว่างการเริ่มต้น การเข้าถึงนี้เกิดขึ้นเพียงครั้งเดียวในช่วงเวลาบูต ผู้ขาย init ทำเช่นนี้ Dumpstate HAL ดำเนินการนี้ในระหว่างการเริ่มต้น HAL ต้องการเปิดใช้งานเดียวกัน init ม้า DebugFS ใน userdebug สร้างก่อน initializes HAL Init เรียก umount() บน DebugFS เมื่ออุปกรณ์ได้เสร็จสิ้นการบูต
รายงานข้อบกพร่องรุ่น: ฮัล dumpstate อ่าน DebugFS ไฟล์ซึ่งเป็นส่วนหนึ่งของรายงานข้อผิดพลาด ทำได้โดย HAL dumpstate ภายใน DumpstateBoard() เมื่อเรียกโดยเครื่องมือ dumpstate ทำได้โดย HAL dumpstate ภายใน DumpstateBoard() เมื่อเรียกโดย dumpstate ( DumpstateDevice.cpp ) เครื่องมือ dumpstate (ส่วนหนึ่งของกรอบ Android) เพื่อให้แน่ใจว่า DebugFS ม้าในระหว่างอุทธรณ์
การทดสอบและการตรวจสอบเฉพาะอุปกรณ์ ราก Adb และเปลือก Adb รูทและเชลล์ เมา DebugFS จากเปลือก adb ที่มีการเข้าถึงราก 1

1 ในการติด DebugFS จาก adb shell ที่มีการเข้าถึงรากใช้คำสั่งนี้:

adb shell mount -t debugfs debugfs /sys/kernel/debug

การดำเนินการของพันธมิตรที่จำเป็น

พาร์ทเนอร์ต้องบังคับใช้สิ่งต่อไปนี้ตามการเปลี่ยนแปลงเหล่านี้ในอุปกรณ์ Android 12:

  • ทำให้ทุก initializations เวลาบูตของ DebugFS โหนดเกิดขึ้นในช่วงเริ่มต้น HAL dumpstate สำหรับตัวอย่างของวิธีการทำเช่นนี้ให้ดู DNM: ตัวอย่างสำหรับการเริ่มต้นเวลาบูตของ DebugFS ไฟล์
  • ไม่อนุญาตให้ DebugFS เข้าถึงระหว่างรันไทม์ มีข้อยกเว้นดังต่อไปนี้:
    • การสร้างรายงานข้อบกพร่อง (มาจากสถานะการถ่ายโอนข้อมูล HAL)
    • การทดสอบและการตรวจสอบ (สามารถเข้าถึงได้โดย adb root และ shell - ให้แน่ใจว่า debugfs ที่ติดตั้งครั้งแรก)

นักพัฒนาสามารถตั้งค่าการแก้ปัญหาทรัพย์สินถาวร persist.dbg.keep_debugfs_mounted เพื่อให้ DebugFs ติดตั้งทั่วเรียบบน userdebug และ eng สร้าง

การทดสอบการปฏิบัติตาม GTS ให้แน่ใจว่า DebugFS ระบบแฟ้มไม่ได้ติดตั้งในการใช้สร้าง Sepolicy neverallow งบให้มั่นใจว่าอุปกรณ์ในการเปิดตัวบน Android 12 หรือสูงกว่ากระบวนการไม่ได้รับอนุญาตจะไม่ให้เข้าถึง DebugFs