Rockchip · AI & Linux Hub

Android и BSP

Система журналов Rockchip Android: исключения, kernel panic и управление журналами

Система журналов Rockchip Android: исключения, kernel panic и управление журналами

· ArmSoM Editorial · Rockchip source documentation · 6 мин чтения

Справочный материал для ArmSoM: полное техническое содержание 8-страничного руководства Rockchip Android LOG. Имя файла не указывает язык, однако текст китайский; отдельного английского оригинала нет. Английский, русский и немецкий тексты переведены полностью; четыре оригинальных снимка с китайскими пометками снабжены переведёнными инструкциями. На обложке V1.1.0, последняя внутренняя техническая версия — v1.2.0; расхождение отмечено, используется фактический основной текст. Таблица передаёт область применения источника, а не подтверждённые испытания всех плат ArmSoM.

Продукт Ядро
ALL linux-5.10

Обзор системы RK LOG

RK Log — система журналирования, запускаемая событиями ошибок и предназначенная для следующих задач.

  1. Работает в сборках user. Чтобы не создавать слишком много журналов, журналы ошибок формируются при возникновении исключений; записи загрузки отдельно описаны ниже.

  2. После kernel panic и перезагрузки сохраняет сведения ядра о предшествовавшем panic.

  3. После запуска Android собирает журналы исключений Android: system crash, ANR, watchdog, lowmem, tombstone и других.

  4. Все журналы сохраняются в /data/user_de/0/com.android.shell/files/bugreports. Их можно получить через adb либо скопировать на USB-накопитель или SD-карту. Для копирования используйте штатное приложение Android Files. Сначала включите параметры разработчика, затем выполните действия на исходных снимках ниже.

Шаг 1: откройте настройки и выберите Storage.

Шаг 1: откройте настройки и выберите Storage.

Шаг 2: в Storage выберите Documents & other для просмотра документов.

Шаг 2: в Storage выберите Documents & other для просмотра документов.

Шаг 3: в Documents нажмите кнопку меню вверху слева либо проведите слева направо, чтобы открыть меню.

Шаг 3: в Documents нажмите кнопку меню вверху слева либо проведите слева направо, чтобы открыть меню.

Шаг 4: выберите Bug reports для списка собранных журналов. В файловом менеджере их можно копировать или удалять. Перед удалением убедитесь, что нужные журналы успешно экспортированы.

Шаг 4: выберите Bug reports для списка собранных журналов. В файловом менеджере их можно копировать или удалять. Перед удалением убедитесь, что нужные журналы успешно экспортированы.

  1. Символическая ссылка bugreports в корневом каталоге указывает на /data/user_de/0/com.android.shell/files/bugreports, поэтому файлы доступны напрямую через /bugreports/:
rk3588_s:/ $ ls bugreports -l
lrw-r--r-- 1 root root 50 2022-09-16 07:36 bugreports -> /data/user_de/0/com.android.shell/files/bugreports

Руководство по использованию

Каждое исключение создаёт ZIP-файл, имя которого начинается с даты. Сортировка по времени позволяет найти последние журналы, например:

rk3588_s:/ $ ls bugreports/
2023-03-14-10-04-27-SYSTEM_BOOT.zip  2023-03-14-10-04-30-TOMBSTONE.zip
2023-03-14-10-04-34-TOMBSTONE.zip  2023-03-14-10-04-39-system_app_crash.zip

Загрузка и перезапуск Android

При включении создаётся журнал загрузки:

rk3588_s:/ $ ls bugreports/
2023-03-14-10-04-27-SYSTEM_BOOT.zip

Файлы с более поздним временем относятся к текущему сеансу загрузки. При перезапуске Android создаётся файл с SYSTEM_RESTART в имени:

rk3588_s:/ $ ls bugreports/
2023-03-14-09-12-03-SYSTEM_RESTART.zip

По этим именам можно определить время загрузки системы и перезапуска Android.

Перезагрузка и зависание ядра

Рассматриваются перезагрузки и зависания ядра. При настройках RK из источника лишь некоторые ситуации, например segment fault, вызывают panic и перезагрузку; hard lock, soft lock или rcu stall могут оставить систему зависшей. Если доступен последовательный порт, соберите дополнительные журналы инструментом fiq через него. Иначе источник рекомендует следующие параметры для перезагрузки и сбора журналов:

+CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
+CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
+CONFIG_BOOTPARAM_RCU_STALL_PANIC=y

В описанных источником патчах и SDK эти параметры по умолчанию включены только для сборок user. Для userdebug добавьте соответствующие параметры в arch/arm64/configs/rockchip_defconfig. Пример сохранённого исключения:

rk3588_s:/ $ ls bugreports/
2022-09-24-09-58-10-kernel_panic.zip

Этот архив содержит подробный журнал kernel panic.

Типы исключений Android

Исключение Значение
TOMBSTONE Сбой на уровне native
system_server_crash Сбой системной службы
system_server_anr ANR системной службы
system_server_lowmem Недостаток памяти
system_server_watchdog Исключение watchdog в system_server
SYSTEM_RESTART Перезапуск Android
system_app_crash Принудительное закрытие системного приложения
system_app_anr ANR системного приложения
system_server_wtf Серьёзная ошибка Android framework; wtf означает What a Terrible Failure
data_app_anr ANR установленного пользователем приложения
data_app_crash Сбой установленного пользователем приложения
data_app_wtf wtf установленного пользователем приложения

Свойство persist.sys.rklog.level определяет собираемые исключения. Значение 0 отключает журналы исключений Android, оставляя только журналы kernel panic. Значение по умолчанию — 7. Определения:

enum {
    DROPBOX_SYSTEM_SERVER_CRASH = 1,
    DROPBOX_SYSTEM_SERVER_ANR = 2,
    DROPBOX_SYSTEM_SERVER_LOWMEM = 3,
    DROPBOX_SYSTEM_SERVER_WATCHDOG = 4,
    DROPBOX_SYSTEM_RESTART = 5,
    DROPBOX_SYSTEM_APP_CRASH = 6,
    DROPBOX_SYSTEM_APP_ANR = 7,
    DROPBOX_SYSTEM_SERVER_WTF = 8,
    DROPBOX_SYSTEM_APP_WTF = 9,
    DROPBOX_DATA_APP_ANR = 10,
    DROPBOX_DATA_APP_CRASH =11,
    DROPBOX_DATA_APP_WTF = 12,
    DROPBOX_MAX_ENTRY,
};

persist.sys.rklog.level=7 включает DROPBOX_SYSTEM_APP_ANR и предшествующие элементы dropbox в перечислении: это порог по порядку, а не битовая маска. Tombstone срабатывает по умолчанию, кроме случая persist.sys.rklog.level=0. Перечисление также содержит DROPBOX_SYSTEM_APP_WTF=9, отсутствующий отдельной строкой в описании; исходное определение сохранено. Тип исключения включается в имя файла, например:

2022-09-24-09-58-17-SYSTEM_BOOT.zip     2022-09-24-09-58-10-kernel_panic.zip
2022-09-24-09-55-10-system_app_crash.zip   2022-09-24-09-58-24-system_app_crash.zip
2022-09-24-09-55-16-system_app_crash.zip   2022-09-24-10-01-24-system_app_crash.zip

Ограничение места и очистка

Журналы находятся в /data/user_de/0/com.android.shell/files/bugreports. Источник ограничивает размер файлов, создаваемых системой журналирования, примерно 300M. Свойство dumpstate.max_log_size задаёт размер в M: 200 означает 200M. Значение по умолчанию меняется в frameworks/native/cmds/dumpstate/dumpstate.rc. При превышении лимита удаляются самые старые журналы. Фильтруйте файлы по дате в имени. Источник рекомендует очищать каталог после получения нужных журналов; предварительно проверьте полноту экспортированных файлов и сохраните необходимые резервные копии.

Подавление повторных исключений

Чтобы повторяющаяся ошибка не создавала слишком много журналов, система проверяет, встречалась ли та же ошибка после текущей загрузки. Если да, следующий журнал создаётся лишь через 5 минут. Например, многократные одинаковые system_server_wtf из одного места создают только один журнал за 5 минут.

Границы и меры предосторожности

Поведение и значения по умолчанию относятся к SDK/патчам источника и linux-5.10, а не ко всем прошивкам Android или ArmSoM. Параметры panic превращают некоторые зависания в перезагрузки, влияют на доступность и могут привести к потере несохранённых данных; проверяйте на соответствующей версии ядра. Знак + в начале строк конфигурации обозначает добавление в патче и не входит в имя параметра. Журналы могут содержать идентификаторы устройства, данные приложений и другую конфиденциальную информацию; проверяйте и защищайте их перед экспортом или передачей. Изменения конфигурации, внесение неисправностей, удаление файлов и аппаратные испытания не выполнялись.

Rockchip · ArmSoM

Другие статьи по теме → · Учебные маршруты →