การใช้ DebugFS ใน Android 12

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

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

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

การเข้าถึง Debugfs ใน build ของ userdebug มีการแบ่งประเภทดังนี้:

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

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

กรณีการใช้งาน โครงสร้างการแก้ไขข้อบกพร่องผู้ใช้ Android 12
การเริ่มต้นไฟล์ DebugFS เพียงครั้งเดียวระหว่างการเริ่มต้นระบบ . การเข้าถึงนี้ เกิดขึ้นเพียงครั้งเดียว ระหว่างเวลาบูต Dumpstate HAL ดำเนินการนี้ในระหว่างการเตรียมใช้งาน HAL หากต้องการเปิดใช้งานสิ่งเดียวกัน ให้ init ติดตั้ง DebugFS ใน userdebug builds ก่อนที่ HAL จะเริ่มต้น Init เรียก umount() บน DebugFS เมื่ออุปกรณ์บูทเสร็จแล้ว
การสร้างรายงานข้อบกพร่อง : dumpstate HAL อ่านไฟล์ DebugFS ซึ่งกลายเป็นส่วนหนึ่งของรายงานข้อบกพร่อง เสร็จสิ้นโดย dumpstate HAL ภายใน 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 เกิดขึ้นในระหว่างการเตรียมใช้งาน dumpstate HAL สำหรับตัวอย่างวิธีดำเนินการนี้ โปรดดู DNM: ตัวอย่างสำหรับการเริ่มต้นเวลาบูตของไฟล์ DebugFS
  • ไม่อนุญาตให้เข้าถึง DebugFS ในระหว่างรันไทม์ มีข้อยกเว้นต่อไปนี้:
    • การสร้างรายงานข้อบกพร่อง (มาจาก dumpstate HAL)
    • การทดสอบและการตรวจสอบ (เข้าถึงได้โดย adb root และ shell - ตรวจสอบให้แน่ใจว่าติดตั้ง DebugFS ก่อน)

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

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