Я отлаживал свой syscall, и я обнаружил, что dmesg печатает так много строк, которые заставили меня не видеть всех моих printk
.Ядро Linux - printk в файл
Возможно ли до printk
в файле?
Я отлаживал свой syscall, и я обнаружил, что dmesg печатает так много строк, которые заставили меня не видеть всех моих printk
.Ядро Linux - printk в файл
Возможно ли до printk
в файле?
Использование trace_printk()
вместо printk()
и ваши отпечатки должны быть в ftrace буферами.
$ cd /sys/kernel/debug/tracing
$ cat trace
См http://june-takeout.blogspot.dk/2010/01/debugging-kernel-using-ftrace-part-1.html и смотрите раздел "Использование trace_printk()"
Основное различие между printk() и Е() является возможность бывший указать LogLevel. Ядро использует loglevel, чтобы решить, следует ли печатать сообщение на консоли. Ядро отображает все сообщения с уровнем log ниже заданного значения на консоли.
В стандартной системе Linux сообщения из буфера журнала проходят через syslogd в/var/log/messages.
В противном случае вы можете проверить конфигурацию syslogd, чтобы узнать, куда отправиться.
Если вам не SyslogD вообще и Systemd это возможно, вы могли бы найти сообщения с journalctl -k -f
Нет такой вещи, как «стандартная система Linux», поэтому вы должны проверить '/ var/log/syslog' на Debian производные;) – myaut
'dmesg | grep'? – immibis
действительно, что 'dmesg | grep> out.txt' может быть решением, так как я могу grep указать свое ключевое ключевое слово и распечатать файл. Однако это будет проблемой, когда я хочу только printk для моего текущего процесса, а также распечатывает все старые журналы процессов – Algorithman
'printk' печатает в кольцевой буфер, доступный через'/proc/kmsg'. Если вы потеряете сообщения, перекомпилируйте ядро с большим буфером ('CONFIG_LOG_BUF_SHIFT'). Если вы видите слишком много сообщений, изучите фильтрацию (т. Е. 'Grep'). Также рассмотрите другие методы отладки (SystemTap, ftrace). – myaut