Использование DebugFS в Android 12

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

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

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

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

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

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

Вариант использования Сборка пользовательской отладки Android 12
Одноразовая инициализация файлов DebugFS во время запуска . Этот доступ происходит только один раз во время загрузки. Dumpstate HAL выполняет это во время инициализации HAL. Чтобы включить то же самое, init монтирует DebugFS в сборках userdebug до инициализации HAL. Init вызывает umount() в DebugFS после завершения загрузки устройства.
Генерация отчета об ошибке : HAL дампа состояния считывает файлы DebugFS , которые становятся частью отчета об ошибке. Выполняется с помощью HAL дампа состояния в DumpstateBoard() при вызове дампа состояния ( DumpstateDevice.cpp ). Инструмент dumpstate (часть платформы Android) обеспечивает монтирование DebugFS во время вызова.
Тестирование и проверка конкретных устройств Адб рут и оболочка. Смонтируйте 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 .