Куда выводится вывод print в ядре? - PullRequest
20 голосов
/ 23 декабря 2010

Я отлаживаю драйвер для 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] 

Есть объяснения?

Ответы [ 7 ]

25 голосов
/ 23 декабря 2010

Много раз KERN_DEBUG сообщения уровня фильтруются, и вам необходимо явно повысить уровень ведения журнала.Вы можете увидеть, что по умолчанию системы, изучив /proc/sys/kernel/printk.Например, в моей системе:

# cat /proc/sys/kernel/printk
4       4       1       7

первое число показывает уровень журнала консоли KERN_WARNING (для получения дополнительной информации см. proc (5) справочные страницы).Это означает, что сообщения 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 к параметрам загрузки ядра, где N - это уровень журнала, который вы хотите перейти на консоль, или ignore_loglevel для печати всех сообщений ядра на консоль.

12 голосов
/ 23 декабря 2010

Это зависит от дистрибутива, но многие используют klogd(8) для получения сообщений от ядра и регистрируют их либо в файл (иногда /var/log/dmesg или /var/log/kernel), либо в системный журнал через syslog(3).В последнем случае, где записи журнала будут заканчиваться, будет зависеть от конфигурации syslogd(8).

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

5 голосов
/ 23 декабря 2010

Вы получите вывод с помощью команды dmesg

3 голосов
/ 27 декабря 2010

dmesg выводит все сообщения из ядра.Поиск нужных вам сообщений будет затруднен.Лучше использовать комбинацию dmesg и grep и использовать метку драйвера для всех ваших сообщений printk.Это облегчит устранение всех нежелательных сообщений.

printk("test: hello world")

dmesg | grep test
1 голос
/ 19 января 2012

У меня была эта проблема в Ubuntu 11.10 и 10.04 LTS, в первом я отредактировал /etc/rsyslog.d/50-default.conf, затем перезапустил rsyslog с помощью «sudo service rsyslog restart», чтобы перезапустить rsyslogd. Тогда это сработало.

Обратите внимание, что Ubuntu использует * r * syslogd, а не syslogd.

0 голосов
/ 07 декабря 2014

В сантистах (Atleast in centos 6.6) вывод будет в / var / log / messages

0 голосов
/ 23 декабря 2010

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

...