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