Устройства с Android 12 и версией ядра выше 5.4 должны поставляться с ядром GKI. Чтобы партнеры могли получить доступ к DebugFS в сборках userdebug при разработке на ядре GKI, в файле defconfig GKI включена конфигурация ядра CONFIG_DEBUG_FS.
Никогда не монтировать DebugFS в пользовательских сборках для устройств с Android 12.
Сборки userdebug лучше протестированы, чем сборки user, и проходят тщательное тестирование на протяжении всего цикла разработки. Ниже описан план, который позволяет свести к минимуму разницу между двумя типами сборок в отношении доступа к DebugFS и обеспечивает следующие преимущества:
- Запрещает сборкам userdebug случайно зависеть от
DebugFSдля новых функций. - Позволяет на ранних этапах разработки выявить функции, которые не работают из-за отсутствия DebugFS.
Доступ к Debugfs в сборках userdebug классифицируется следующим образом:
- Инициализация файлов
DebugFSво время загрузки устройства, например доступ на запись к файлу вDebugFSдля включения сбора данных отладки. - Создание отчета об ошибке. HAL dumpstate считывает файлы
DebugFS, когдаDumpstateBoard()вызываетсяdumpstate. Эта информация будет включена в отчет об ошибке. - Тестирование и проверка на конкретных устройствах.
В таблице ниже описано, как каждая из этих трех категорий поддерживается в Android 12. Обратите внимание, что приведенная ниже информация относится только к сборкам userdebug, поскольку DebugFS нельзя смонтировать в сборках user.
| Пример использования | Сборка userdebug для Android 12 |
|---|---|
Однократная инициализация DebugFS файлов при запуске.
Этот доступ предоставляется только один раз во время загрузки.
|
HAL Dumpstate выполняет это во время инициализации HAL. Чтобы включить его, init монтирует DebugFS в сборках userdebug до инициализации HAL.
Init вызывает umount() на DebugFS, когда устройство завершает загрузку.
|
Создание отчета об ошибке. HAL-модуль dumpstate считывает файлы DebugFS, которые становятся частью отчета об ошибке.
|
Выполняется HAL dumpstate в DumpstateBoard() при вызове dumpstate (DumpstateDevice.cpp).
Утилита dumpstate (часть фреймворка Android) гарантирует, что DebugFS
монтируется во время вызова.
|
| Тестирование и проверка на определенных устройствах | Adb root и shell. Подключите DebugFS из оболочки adb с root-доступом1.
|
1Чтобы подключить DebugFS из adb shell с правами root, используйте следующую команду:
adb shell mount -t debugfs debugfs /sys/kernel/debug.
Что нужно сделать партнерам
В связи с изменениями в Android 12 партнеры должны:
- Все инициализации узлов
DebugFSво время загрузки должны выполняться при инициализации HAL dumpstate. Пример того, как это сделать, приведен в разделе DNM: Example for boot time initialization ofDebugFSfiles (Пример инициализации файлов во время загрузки). - Запретить доступ к приложению "
DebugFS" во время выполнения. Применяются следующие исключения:- Создание отчета об ошибке (из HAL dumpstate).
- Тестирование и проверка (доступно для
adb rootиshell; сначала убедитесь, что DebugFS смонтирована)
Разработчики могут задать постоянное свойство отладки persist.dbg.keep_debugfs_mounted, чтобы DebugFs оставался подключенным после перезагрузки в сборках userdebug и eng.
Тесты на соответствие требованиям GTS гарантируют, что файловая система DebugFS не монтируется в сборках для пользователей. Операторы sepolicy neverallow гарантируют, что на устройствах с Android 12 или более поздней версии неавторизованные процессы не получат доступ к DebugFs.