Куда идет вывод печати в ядре?
-
12-10-2019 - |
Вопрос
Я отлаживаю драйвера для Linux (в частности Ubuntu Server 9.04), и в коде есть несколько операторов PrintF.
Где я могу просмотреть вывод этих утверждений?
EDIT1: То, что я пытаюсь сделать,-это написать в ядро, используя файловую систему Proc. Код печати
static int proc_fractel_config_write(struct file *file, const char *argbuf, unsigned long count, void *data)
{
printk(KERN_DEBUG "writing fractel config\n");
...
В kern.log я вижу следующее сообщение, когда пытаюсь перезаписать файл/proc/net/madwifi/ath1/fractel_config (с различным временем, конечно).
[ 8671.924873] proc write
[ 8671.924919]
Есть объяснения?
Решение
Это зависит от распределения, но многие используют klogd(8)
Чтобы получить сообщения из ядра и либо зарегистрировать их в файл (иногда /var/log/dmesg
или же /var/log/kernel
) или в системный журнал через syslog(3)
. Анкет В последнем случае, когда записи журнала в конечном итоге будут зависеть от конфигурации syslogd(8)
.
Одна примечания о dmesg
Команда: Сообщения ядра хранятся в круглом буфере, поэтому большое количество выводов будет перезаписано.
Другие советы
Много раз KERN_DEBUG
Сообщения уровня фильтруются, и вам необходимо явно повысить уровень регистрации. Вы можете увидеть, что такое система по умолчанию, изучив /proc/sys/kernel/printk
. Анкет Например, в моей системе:
# cat /proc/sys/kernel/printk
4 4 1 7
Первый номер показывает, что уровень журнала консоли KERN_WARNING
(видеть Proc (5) Man Pages для получения дополнительной информации). Это означает KERN_NOTICE
, KERN_INFO
, а также KERN_DEBUG
Сообщения будут отфильтрованы из консоли. Для повышения уровня ведения ведения или условно dmesg
$ sudo dmesg -n 7
$ cat /proc/sys/kernel/printk
7 4 1 7
Здесь установите уровень до 7 (KERN_DEBUG
) позволит всем уровням сообщений появляться на консоли. Чтобы автоматизировать это, добавьте loglevel=
Не к параметрам загрузки ядра, где n - уровень журнала, который вы хотите перейти на консоли или ignore_loglevel
печатать все сообщения ядра в консоли.
Вы получите выход с командой dmesg
Dmesg выводит все сообщения из ядра. Найти желаемые сообщения было бы сложно. Лучше использовать Dmesg а также грип комбинация и используйте специальную метку драйвера во всех ваших printk
Сообщения. Это облегчит устранение всех нежелательных сообщений.
printk("test: hello world")
dmesg | grep test
У меня была эта проблема на Ubuntu 11.10 и 10.04 LTS, на первом i Edited /etc/rsyslog.d/50-default.conf, а затем перезапустил rsyslog с использованием «Sudo Service Rsyslog restart» для перезапуска Rsyslogd. Тогда это сработало.
Обратите внимание, что Ubuntu использует *р*Syslogd, а не Syslogd.
Вы можете попробовать более высокий уровень, чем kern_debug, например, kern_info. В зависимости от вашей конфигурации, сообщения с самым низким приоритетом могут не отображаться.
В CentOS (по крайней мере в CentOS 6.6) вывод будет в/var/log/messages