Устройства, которые запускаются с Android 12 с версиями ядра выше v5.4, должны поставляться с ядром GKI. Чтобы партнеры могли получить доступ к DebugFS
в сборках userdebug во время разработки на ядре GKI, конфигурация ядра CONFIG_DEBUG_FS
включена в defconfig GKI. Никогда не монтируйте DebugFS
в пользовательских сборках для устройств, запускаемых на Android 12.
Сборки пользовательской отладки имеют лучшее тестовое покрытие, чем пользовательские сборки, и тщательно тестируются на протяжении всего цикла разработки. Следующий план сводит к минимуму разницу между двумя типами сборки в отношении доступа к DebugFS
и обеспечивает следующие преимущества:
- Предотвращает случайную зависимость сборок пользовательской отладки от
DebugFS
для новых функций. - Гарантирует, что любая существующая функциональность, которая нарушена из-за отсутствия DebugFS, известна на ранних этапах цикла разработки.
Доступы Debugfs в сборках userdebug классифицируются следующим образом:
- Инициализация файла
DebugFS
во время загрузки устройства, например доступ для записи к файлу вDebugFS
для включения сбора отладочных данных. - Генерация сообщения об ошибке: HAL
DebugFS
, когдаDumpstateBoard()
вызываетсяdumpstate
. Эта информация становится частью отчета об ошибке. - Тестирование и проверка конкретных устройств.
В следующей таблице описано, как каждая из этих трех категорий поддерживается в 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
.