2015-03-08 2 views
4

Я отлаживал свой syscall, и я обнаружил, что dmesg печатает так много строк, которые заставили меня не видеть всех моих printk.Ядро Linux - printk в файл

Возможно ли до printk в файле?

+0

'dmesg | grep'? – immibis

+0

действительно, что 'dmesg | grep> out.txt' может быть решением, так как я могу grep указать свое ключевое ключевое слово и распечатать файл. Однако это будет проблемой, когда я хочу только printk для моего текущего процесса, а также распечатывает все старые журналы процессов – Algorithman

+0

'printk' печатает в кольцевой буфер, доступный через'/proc/kmsg'. Если вы потеряете сообщения, перекомпилируйте ядро ​​с большим буфером ('CONFIG_LOG_BUF_SHIFT'). Если вы видите слишком много сообщений, изучите фильтрацию (т. Е. 'Grep'). Также рассмотрите другие методы отладки (SystemTap, ftrace). – myaut

ответ

0

Основное различие между printk() и Е() является возможность бывший указать LogLevel. Ядро использует loglevel, чтобы решить, следует ли печатать сообщение на консоли. Ядро отображает все сообщения с уровнем log ниже заданного значения на консоли.

В стандартной системе Linux сообщения из буфера журнала проходят через syslogd в/var/log/messages.

В противном случае вы можете проверить конфигурацию syslogd, чтобы узнать, куда отправиться.

Если вам не SyslogD вообще и Systemd это возможно, вы могли бы найти сообщения с journalctl -k -f

+0

Нет такой вещи, как «стандартная система Linux», поэтому вы должны проверить '/ var/log/syslog' на Debian производные;) – myaut

Смежные вопросы