ใช้ DebugFS ใน Android 12

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

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

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

การเข้าถึง Debugfs ในบิลด์ userdebug จะจัดหมวดหมู่ดังนี้

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

ตารางต่อไปนี้อธิบายการรองรับแต่ละหมวดหมู่เหล่านี้ใน Android 12 โปรดทราบว่าข้อมูลต่อไปนี้มีผลกับบิลด์ userdebug เท่านั้น เนื่องจากจะไม่สามารถเมานต์ DebugFS ในบิลด์สำหรับผู้ใช้ได้

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

1 หากต้องการต่อเชื่อม DebugFS จาก adb shell ด้วยสิทธิ์เข้าถึงระดับรูท ให้ใช้คำสั่งนี้

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

การดำเนินการที่จำเป็นสำหรับพาร์ทเนอร์

พาร์ทเนอร์ต้องดำเนินการต่อไปนี้ตามการเปลี่ยนแปลงเหล่านี้ในอุปกรณ์ Android 12

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

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

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