Устройства, запускаемые с 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 и
shelladb root— сначала убедитесь, что DebugFS смонтирована)
Разработчики могут установить постоянное свойство отладки persist.dbg.keep_debugfs_mounted , чтобы DebugFs монтировался при перезагрузках в сборках userdebug и eng.
Тесты на соответствие GTS гарантируют, что файловая система DebugFS не смонтирована в пользовательских сборках. Операторы Sepolicy neverallow гарантировать, что на устройствах, запускаемых на Android 12 или более поздней версии, неавторизованным процессам не будет предоставлен доступ к DebugFs .