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

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

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

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

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

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

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

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

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

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

Необходимые действия партнера

Партнеры должны принять следующие меры на основе этих изменений на устройствах Android 12:

  • Сделайте так, чтобы все инициализации узлов DebugFS во время загрузки происходили во время инициализации HAL дампа. Пример того, как это сделать, см. в разделе DNM: Пример инициализации файлов DebugFS во время загрузки .
  • Не разрешайте доступ DebugFS во время выполнения. Применяются следующие исключения:
    • Генерация отчета об ошибках (берется из дампа HAL)
    • Тестирование и проверка (доступно через root и shell adb root — сначала убедитесь, что DebugFS смонтирована)

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

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