ใช้ DebugFS ใน Android 12

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

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

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

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

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

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

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

นักพัฒนาซอฟต์แวร์สามารถตั้งค่าพร็อพเพอร์ตี้การแก้ไขข้อบกพร่องถาวร persist.dbg.keep_debugfs_mounted เพื่อต่อเชื่อมDebugFsเพื่อต่อเชื่อม การรีบูตเมื่อมีการแก้ไขข้อบกพร่องของผู้ใช้และบิลด์ทางวิศวกรรม

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