Где идет вывод печати в ядре?
Я отлаживаю драйвер для Linux (в частности, сервер ubuntu 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/ath 1/fractel_config (с разным временем, конечно).
[ 8671.924873] proc write
[ 8671.924919]
Любые объяснения?
Ответы
Ответ 1
Это зависит от дистрибутива, но многие используют klogd(8)
для получения сообщений из ядра и будут либо записывать их в файл (иногда /var/log/dmesg
или /var/log/kernel
), либо в системный журнал через syslog(3)
. В последнем случае, когда записи журнала в конечном итоге будут зависеть от конфигурации syslogd(8)
.
Одна заметка о команде dmesg
: сообщения ядра хранятся в круговом буфере, поэтому большие объемы вывода будут перезаписаны.
Ответ 2
Много раз сообщения уровня 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 в параметры загрузки ядра, где N - это уровень журнала, который вы хотите отправить в консоль, или ignore_loglevel
, чтобы распечатать все сообщения ядра на консоли.
Ответ 3
Вы получите результат командой dmesg
Ответ 4
dmesg выводит все сообщения из ядра. Поиск ваших желаемых сообщений будет затруднительным. Лучше используйте комбинацию dmesg и grep и используйте ярлык с драйверами во всех ваших сообщениях printk
. Это облегчит устранение всех нежелательных сообщений.
printk("test: hello world")
dmesg | grep test
Ответ 5
У меня была эта проблема в Ubuntu 11.10 и 10.04 LTS, на первом я отредактировал /etc/rsyslog.d/50-default.conf, а затем перезапустил rsyslog с помощью "sudo service rsyslog restart", чтобы перезапустить rsyslogd. Тогда это сработало.
Обратите внимание, что Ubuntu использует * r * syslogd, а не syslogd.
Ответ 6
Вы можете попробовать более высокий уровень, чем KERN_DEBUG, например KERN_INFO. В зависимости от вашей конфигурации сообщения с низким приоритетом могут не отображаться.
Ответ 7
В centos (Atleast in centos 6.6) вывод будет в/var/log/messages