Сообщения ядра хранятся в кольцевом буфере (log buffer) размером LOG_BUF_LEN
CONFIG_LOG_BUF_SHIFT
. Для однопроцессорной машины это значение по умолчанию равно 16 Кбайт. Другими словами в ядре может хранится до 16 Кбайт системных сообщений. Если общий размер всех сообщений ядра достигает этого максимального значения и приходит новое сообщение, то оно переписывается поверх самого старого из хранящихся в буфере сообщений. Буфер сообщений ядра называется Использование кольцевого буфера предоставляет определенные преимущества. Так как одновременные операции чтения и записи в кольцевом буфере выполняются достаточно просто, то функцию printk()
Демоны syslogd
klogd
В стандартной системе Linux для извлечения сообщений ядра из буфера используется специальный демон пространства пользователя klogd
klogd
может считывать данные из файла /proc/kmsg
, или использовать системный вызов syslog()
. По умолчанию используется подход на основе файловой системы /proc
. Если сообщений нет, то демон klogd
блокируется на операции чтения, пока не поступит новое сообщение. Когда приходит новое сообщение, демон возвращается к выполнению, считывает сообщения и обрабатывает их. По умолчанию сообщения отправляются демону syslogd
.Демон syslogd
/var/log/messages
. Имя соответствующего файла можно настроить в конфигурационном файле /etc/syslog.conf
.Изменить уровень вывода сообщений на консоль (console loglevel) можно при старте демона klogd
-с
.Замечание относительно функции printk()
Когда впервые начинают разрабатывать код ядра, то скорее всего очень часто приходится заменять функцию printf()
printk()
. Это нормально, потому что нельзя не принимать во внимание многолетний опыт по написанию пользовательских программ и использовании функции printf()
. Следует надеяться, что повторение таких ошибок не будет продолжаться долго, потому что повторяющиеся ошибки компоновщика начнут быстро надоедать.Однажды вдруг окажется, что вы поймали себя на том, что начали использовать функцию printk()
printf()
в пользовательских программах. Когда для вас этот день наконец наступит, то можно сказать, что вы стали настоящим хакером и специалистом по разработке кода ядра.Сообщения Oops