Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > [kernel] dmesg в консоль ядра


Автор: null56 18.9.2012, 15:09
Всем привет

Поскольку я не силен в терминах, введу обозначения, которые буду использовать

Консоль ядра - при старте системы, вы видите информацию о том, как поднимаются интерфейсы, загружаются модули и прочее и при выключении/перезагрузке
dmesg - юзерспейсная утилита, которая читает циклический лог ядра и выводит в текущую консоль

Задача: как сделать так, чтобы циклический буфер ядра выводился в консоль ядра.
Цитата

dmesg -n 8 // вывод на текущую консоль, но он не подходит


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

Код

static void __exit my_exit(void)
{
    pr_info("!!!!!!!!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> exit");
// прочее, не важно что
}

module_exit(my_exit);


rmmod <мой модуль> не интересен, важно увидеть отладочную печать в процессе перезагрузки

Надеюсь задача ясна, заранее благодарен всем откликнувшимся за помощь

Автор: xvr 18.9.2012, 16:08
Попробуйте посмотреть в /var/log/messages и /var/log/kernellog 
Если повезет, то может быть поймаете там свои печати

Добавлено через 3 минуты и 52 секунды
Кстати, в /proc/sys/kernel/printk можно управлять печатью кернельных логов на консоль. Может подойдет

Цитата

   /proc/sys/kernel/printk
              The  four values in this file are console_loglevel, default_mes-
              sage_loglevel,    minimum_console_level     and     default_con-
              sole_loglevel.   These  values  influence printk() behavior when
              printing or logging error messages. See syslog(2) for more  info
              on  the  different  loglevels.   Messages with a higher priority
              than console_loglevel will be printed to the console.   Messages
              without  an  explicit  priority  will  be  printed with priority
              default_message_level.  minimum_console_loglevel is the  minimum
              (highest)   value   to   which   console_loglevel  can  be  set.
              default_console_loglevel  is  the   default   value   for   con-
              sole_loglevel.


Автор: null56 18.9.2012, 16:57
у меня сейчас значения
Цитата

 1(console_loglevel) 4(default_message_loglevel) 1(minimum_console_level) 7(default_console_loglevel)

я пытаюсь вывести сообщения с уровнем <6>, если речь о pr_info
если я правильно понял, мне хорошо бы поднять (уменьшить число) приоритета у сообщения, скажем, на KERN_ALERT.... или же изменить значение в proc, на console_loglevel и minimum_console_level выше 6... попробую первый вариант

к слову: отлаживаю на qemu, консоль остается даже после перезагрузки, поэтому если, напечатает, то всё увижу

Автор: null56 18.9.2012, 17:31
Цитата

printk(KERN_ALERT "info");

не прокатило, поиграюсь со значениями

Автор: null56 19.9.2012, 17:03
xvr, вы указали правильное направление, спасибо

Решение 1
Цитата

dmesg -n 8


Решение 2
Цитата

echo "8 4 1 7" > /proc/sys/kernel/printk

Автор: null56 19.9.2012, 18:40
открыл для себя Америку: при перезагрузке, ядро не выгружает сама загруженные ранее модули, поэтому метод clean у модуля не вызывается, те кто не знал этого, имейте в виду

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)