Книга: Разработка ядра Linux
Уровни вывода сообщений ядра
Уровни вывода сообщений ядра
Главное отличие между функциями printk()
и printf()
— это возможность в первой указывать уровень вывода сообщений ядра (loglevel). Ядро использует уровень вывода сообщений для принятия решения о том, выводить сообщение на консоль или нет. Ядро выводит на консоль все сообщение с уровнями меньшими, или равными, соответствующему значению для консоли (console loglevel). Уровень вывода сообщений можно указывать следующим образом.
printk(KERN_WARNING "Это предупреждение!n");
printk(KERN_DEBUG "Это отладочное сообщение!n");
printk("Мы не указали значения loglevel!n");
Строки KERN_WARNING
и KERN_DEBUG
определены через препроцессор в заголовочном файле <linux/kernel.h>
. Эти макросы раскрываются в строки, соответственно "<4>"
и "<7>"
, которые объединяются со строкой формата в самом начале сообщения, выводимого функцией printk()
. После этого на основании уровня вывода сообщения и уровня вывода консоли (значение переменной console_loglevel
) ядро принимает решение выводить информацию на консоль или нет. В табл. 18.1 приведен полный список возможных значений уровня вывода сообщений.
Таблица 18.1. Доступные значения уровня вывода сообщений ядра (loglevel)
Значение loglevel | Описание |
---|---|
KERN_EMERG |
Аварийная ситуация |
KERN_ALERT |
Проблема, на которую требуется немедленно обратить внимание |
KERN_CRIT |
Критическая ситуация |
KERN_ERR |
Ошибка |
KERN_WARNING |
Предупреждение |
KERN_NOTICE |
Обычная ситуация, но на которую следует обратить внимание |
KERN_INFO |
Информационное сообщение |
KERN_DEBUG |
Отладочное сообщение — обычно избыточная информация |
Если уровень вывода сообщений ядра не указан, то его значение по умолчанию равно DEFAULT_MESSAGE_LOGLEVEL
, который в данный момент равен KERN_WARNING
. Так как это значение может измениться, то для своих сообщений необходимо всегда указывать уровень вывода.
Наиболее важный уровень вывода — KERN_EMERG
определен как "<0>"
, а наименее важный — KERN_DEBUG
, как "<7>"
. Например, после обработки препроцессором кода из предыдущего примера получается следующее.
printk("<4>Это предупреждение!n");
printk("<7>Это отладочное сообщение!n");
printk("<4>Мы не указали значения loglevel!n");
Как вы будете использовать функцию printk()
зависит только от вас. Конечно, обычные сообщения, которые должны быть видимы, должны иметь соответствующий уровень вывода. Отладочные сообщения, которые в большом количестве встраиваются в самые разные места кода с целью разобраться с проблемой — "допустим ошибка здесь", "пробуем", "работает" — могут иметь любой уровень вывода. Один вариант — оставить уровень при котором сообщения выводятся на консоль равным значению этого параметра по умолчанию, а уровень вывода ваших сообщений установить в значение KERN_CRIT
, или что-то около этого. Можно поступить и наоборот — для отладочных сообщений установить уровень KERN_DEBUG
и поднять уровень при котором сообщения выводятся на консоль. Каждый из вариантов имеет свои положительные и отрицательные стороны — вам решать.
Уровни вывода сообщений определены в файле <linux/kernel.h>
.
- Уровни логического нуля и единицы
- Включение и отключение синхронного вывода
- 2. Правила вывода Армстронга
- 3. Производные правила вывода
- 1.1 Режимы ядра и пользователя Windows
- 1.6 Драйверы и буферы ввода-вывода
- 1.1.4. Турпродукт: виды, уровни, стадии создания
- Глава 6 BIOS – базовая система ввода-вывода
- Алгоритм составления эффективных рекламных сообщений
- 2.3.1. Уровни физической модели
- 3.8. Обновление ядра
- 3.8.2. Обновление ядра из RPM-пакета