вывод printk ядра Linux

Я новичок в разработке ядра Linux, и когда я пытаюсь изменить функцию системного вызова, просто добавив функцию printk в файл timekeep.c, например

 printk("BEGIN!$$$$$\n");

утилита dmesg дает мне вывод, например:

[   75.919335] BEGIN!$$$$$
[   75.919337] BEGIN!$$$$$
[   75.919340] BEGIN!$$$$$
[   75.919343] BEGIN!$$$$$
[   75.919347] BEGIN!$$$$$
[   75.919349] BEGIN!$$$$$
[   75.919353] BEGIN!$$$$$
[   75.919355] BEGIN!$$$$$
[   75.919358] BEGIN!$$$$$
[   75.919361] BEGIN!$$$$$
[   75.919364] BEGIN!$$$$$
[   75.919367] BEGIN!$$$$$
[   75.919370] BEGIN!$$$$$
[   75.919374] BEGIN!$$$$$

Я действительно не понимаю, как генерируются те, что в []. Может ли кто-нибудь дать мне намек на это?


person user2423523    schedule 27.05.2013    source источник
comment
Вы забыли префикс уровня журнала: printk(KERN_DEBUG "BEGIN!"\n");   -  person Kaz    schedule 27.05.2013


Ответы (2)


В вашем ядре включена опция CONFIG_PRINTK_TIME. Эта опция отвечает за это поле метки времени перед printk() сообщениями. Из опции конфигурации ядра

 "Selecting this option causes time stamps of the `printk()` messages to be
  added to the output of the `syslog()` system call and at the console."

источник: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/lib/Kconfig.debug#n2

Этот параметр настраивается во время настройки ядра через поле конфигурации «Взлом ядра». И вы можете включить/отключить его с помощью параметра командной строки ядра: printk.time=0 (отключить) или printk.time=1 (включить).

person rakib_    schedule 27.05.2013

На самом деле это dmesg временные метки в секундах с момента загрузки системы.

Вы можете спокойно игнорировать их, если вы на самом деле ищете проблемы со временем (например, водителю требуется 30 секунд, чтобы сделать что-то, что должно быть намного быстрее).

Если вам нужен более читаемый формат, вы можете использовать dmesg -T, но вы потеряете некоторую точность.

pax> dmesg -T | tail -5l

[Mon May 27 09:08:58 2013] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[Mon May 27 09:09:00 2013] usblp0: removed
[Mon May 27 09:09:00 2013] usblp0: USB Bidirectional printer dev 3 if 0 alt 0 proto 2 vid 0x03F0 pid 0x3A02
[Mon May 27 09:09:09 2013] eth0: no IPv6 routers present
[Mon May 27 10:09:59 2013] usblp0: removed

Вы также можете полностью удалить их с помощью dmesg -t, но тогда вы потеряете вся информация о времени.

pax> dmesg -t | tail -5l

ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
usblp0: removed
usblp0: USB Bidirectional printer dev 3 if 0 alt 0 proto 2 vid 0x03F0 pid 0x3A02
eth0: no IPv6 routers present
usblp0: removed
person paxdiablo    schedule 27.05.2013