Как можно увидеть изменения вывода dmesg?

Как можно увидеть изменения вывода dmesg?

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

Как я могу это сделать?

решение1

Относительно недавние dmesgверсиипредоставить возможность следовать( -w, --follow) который работает аналогично tail -f.

Таким образом, просто используйте следующую команду:

$ dmesg -wH

( -H, --humanвключает удобные для пользователя функции, такие как цвета, относительное время)

Эти опции доступны, например, в Fedora 19.

решение2

Вы можете использовать watchкоманду, которая предназначена именно для таких вещей

watch -n 0.1 "dmesg | tail -n $((LINES-6))"

эта $((LINES-6))деталь должна хорошо вписаться в ваш терминал.

решение3

Вы не можете напрямую контролировать выходные данные dmesg.

Однако велика вероятность, что ваш модуль не печатает напрямую в кольцевой буфер dmesg, а вместо этого использует средства ведения журнала ядра (которые затем будут отображены dmesg). Если у вас syslogесть какие-то разумные (например, по умолчанию) настройки, эти сообщения, скорее всего, также будут отображаться в kern.logфайле журнала.

Итак, вы можете сделать что-то вроде:

 tail -f /var/log/kern.log

решение4

Если вы используете встроенную систему, напримерBusyBoxчто распространено в таких системах, какOpenWrt, он имеет очень ограниченную функциональность и поддерживает только 2-3 флага.

Если вам нужен быстрый и грязный способ непрерывной печати вывода dmesg на экране по мере изменения событий, то простой цикл Bash подойдет. Он не идеален, но, как я уже упоминал, в BusyBox dmesg отсутствует множество функций. Я обнаружил, что следующее дает тот же эффект при вводе в командную строку:

$ while true; do dmesg -c ; sleep 1 ; done

Вы можете выйти из цикла с помощью Ctrl+ C. Sleep 1 нужен для того, чтобы остановить бесполезную загрузку ЦП, а флаг -c очищает буфер при каждом вызове, так что вы не увидите повторяющийся вывод каждую секунду.

Связанный контент