включить отладочные сообщения драйвера ядра linux dev_dbg - PullRequest
0 голосов
/ 24 мая 2018

существует ли самый простой способ включить драйвер ядра Linux dev_dbg отладочные сообщения (на самом деле это сообщения в стиле trace), надеюсь, без путаницы с исправлением / перекомпиляцией ядра или с драйвером, реализующим что-то дополнительное, например debugfs?возможно, есть способ включить что-то ПРОСТОЕ в ядре (например, один флаг?), вызывая определенный драйвер или все драйверы dev_dbg (это может быть отфильтровано с помощью вывода `dmesg | grep" driverName ")?

ядроверсия 4.14.там вообще нет журнала syslog/daemonlog/system.сетевого интерфейса НЕТ, и доступен только один последовательный порт.целевая система очень медленная и очень компактная, поэтому НЕТ СПОСОБА добавлять syslog / etc, нет ничего, кроме dmesg, где точно было бы неплохо увидеть вывод таких строк, как:

dev_dbg(&client->dev, "bla bla bla\n");

в некоторых сообщениях уже предлагалось добавить ключевое слово debug для параметров ядра bootargs, к сожалению, этого было недостаточно.

выходные данные, подобные dev_info, попадают в dmesg без проблем, поэтомуопределенно что-то близкоеспасибо

Ответы [ 2 ]

0 голосов
/ 21 июля 2018

Вы можете смонтировать файловую систему отладки вручную, выполнив следующую команду:

mount -t debugfs none / sys / kernel / debug

После этого выполните:

ls / sys / kernel / debug

Вся отладочная информация и сообщения будут храниться там без необходимости повторной компиляции.

Кроме того, выможете добавить это в ваш / etc / fstab, чтобы при перезагрузке монтирование происходило автоматически.

... Если вы все равно перекомпилируете свое ядро, то вы можете включить «[*] Debug File System» в «Kernel Hacking»

Удачи, надеюсь, все пройдет хорошо.

0 голосов
/ 25 мая 2018

Самый простой способ получения dev_dbg сообщений без установки / настройки syslog / etc. Похоже, необходимо выполнить следующие шаги:

  1. предоставить ключ debug в bootargs параметрах ядра

  2. добавьте #define DEBUG в первой строке файла драйвера - если драйвер представляет собой один файл и использует общий Makefile, или добавьте -DDEBUG в сборку CCпараметры, если драйвер содержит несколько исходных файлов и, как обычно, имеет собственный Makefile

  3. после загрузки ядра и появляется приглашение включить сообщения уровня отладки, выполнив либо dmesg -n 8, либо echo 8 > /proc/sys/kernel/printk

  4. загрузить драйвер, если модуль с командой insmod <driver name> или modprobe <driver name> или если драйвер интегрирован в ядро, команды вставки могут различаться.

пример того, как назначить встроенный драйвер ядра для подсистемы шины i2c:

echo <driver name> <i2c bus address> > /sys/bus/i2c/devices/i2c-0/new_device

примечания:

, еслиУ DTS будет запись с драйверамиНапример, повторное назначение драйвера вручную приведет к ошибке - в случае подсистемы i2c - ошибка EBUSY (-16), драйвер будет назначен до командной строки, а сообщения dmesg будут ограничены уровнем по умолчанию (обычно dev_info только)

в случае, если драйвер уже был назначен DTS и нет способа исключить его временный из источника дерева - полезно отсоединить и повторно подключить его послеАктивированы сообщения уровня debug (трассировки)

для подсистемы i2c, для которой потребуется выполнить команду:

echo <driver name> > /sys/bus/i2c/drivers/<drivername>/unbind

затем

echo <driver name> > /sys/bus/i2c/drivers/<drivername>/bind

предупреждение:

механизм трассировки драйверов ядра не поможет при отладке внутреннего драйвера, неправильно настроенного или отсутствующего сервисных структур.т. е. если драйвер загружен, но хранит молчание без сообщений о трассировке, это означает, что probe никогда не выполнялся из-за того, что некоторые ожидаемые ядром данные о служебных структурах отсутствовали или были неисправны

...