Как использовать DebugFS в Android 12

Устройства с Android 12 и версией ядра выше 5.4 должны поставляться с ядром GKI. Чтобы партнеры могли получить доступ к DebugFS в сборках userdebug при разработке на ядре GKI, в файле defconfig GKI включена конфигурация ядра CONFIG_DEBUG_FS. Никогда не монтировать DebugFS в пользовательских сборках для устройств с Android 12.

Сборки userdebug лучше протестированы, чем сборки user, и проходят тщательное тестирование на протяжении всего цикла разработки. Ниже описан план, который позволяет свести к минимуму разницу между двумя типами сборок в отношении доступа к DebugFS и обеспечивает следующие преимущества:

  • Запрещает сборкам userdebug случайно зависеть от DebugFS для новых функций.
  • Позволяет на ранних этапах разработки выявить функции, которые не работают из-за отсутствия DebugFS.

Доступ к Debugfs в сборках userdebug классифицируется следующим образом:

  1. Инициализация файлов DebugFS во время загрузки устройства, например доступ на запись к файлу в DebugFS для включения сбора данных отладки.
  2. Создание отчета об ошибке. HAL dumpstate считывает файлы DebugFS, когда DumpstateBoard() вызывается dumpstate. Эта информация будет включена в отчет об ошибке.
  3. Тестирование и проверка на конкретных устройствах.

В таблице ниже описано, как каждая из этих трех категорий поддерживается в Android 12. Обратите внимание, что приведенная ниже информация относится только к сборкам userdebug, поскольку DebugFS нельзя смонтировать в сборках user.

Пример использования Сборка userdebug для Android 12
Однократная инициализация DebugFS файлов при запуске. Этот доступ предоставляется только один раз во время загрузки. HAL Dumpstate выполняет это во время инициализации HAL. Чтобы включить его, init монтирует DebugFS в сборках userdebug до инициализации HAL. Init вызывает umount() на DebugFS, когда устройство завершает загрузку.
Создание отчета об ошибке. HAL-модуль dumpstate считывает файлы DebugFS, которые становятся частью отчета об ошибке. Выполняется HAL dumpstate в DumpstateBoard() при вызове dumpstate (DumpstateDevice.cpp). Утилита dumpstate (часть фреймворка Android) гарантирует, что DebugFS монтируется во время вызова.
Тестирование и проверка на определенных устройствах Adb root и shell. Подключите DebugFS из оболочки adb с root-доступом1.

1Чтобы подключить DebugFS из adb shell с правами root, используйте следующую команду:

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

Что нужно сделать партнерам

В связи с изменениями в Android 12 партнеры должны:

  • Все инициализации узлов DebugFS во время загрузки должны выполняться при инициализации HAL dumpstate. Пример того, как это сделать, приведен в разделе DNM: Example for boot time initialization of DebugFS files (Пример инициализации файлов во время загрузки).
  • Запретить доступ к приложению "DebugFS" во время выполнения. Применяются следующие исключения:
    • Создание отчета об ошибке (из HAL dumpstate).
    • Тестирование и проверка (доступно для adb root и shell; сначала убедитесь, что DebugFS смонтирована)

Разработчики могут задать постоянное свойство отладки persist.dbg.keep_debugfs_mounted, чтобы DebugFs оставался подключенным после перезагрузки в сборках userdebug и eng.

Тесты на соответствие требованиям GTS гарантируют, что файловая система DebugFS не монтируется в сборках для пользователей. Операторы sepolicy neverallow гарантируют, что на устройствах с Android 12 или более поздней версии неавторизованные процессы не получат доступ к DebugFs.