Установка CFLAGS для pr_debug и printk
Я пытаюсь понять модуль ядра Linux и хотел бы увидеть вывод pr_debug
а также printk
, Я использую GNU Make.
Я понимаю, что для получения сообщений pr_debug мы должны использовать DDEBUG
,
Итак, как мне включить printk
заявления?
Допустим, имя файла kvm.c
, В чем разница между этими двумя:
CFLAGS_kvm.o := -DDEBUG
CFLAGS_kvm.o += -DDEBUG
Что делает это утверждение:
CFLAGS_kvm.o := -I.
[Редактировать]:
Похоже, мое использование квадратных скобок вызвало некоторую путаницу. На самом деле под [имя файла] я имел в виду какой-то файл, скажем kvm.c.
2 ответа
Я не знаю, как активировать printk()
- что вы искали с помощью Google? Среди прочего, я нашел это, которое, кажется, подразумевает printk()
почти всегда доступен (но вы должны пометить сообщения соответствующим уровнем, и, вероятно, есть контроль над тем, какие уровни отображаются на консоли).
Квадратные скобки в имени макроса неортодоксальны - и, следовательно, являются, вероятно, расширением, специфичным для вашей системы.
Читая между строк, вполне вероятно, что вы говорите о ядре Linux и, следовательно, о GNU Make, но вы бы помогли всем, если бы вы сказали такие вещи.
:=
нотация - это непосредственное присвоение переменной. RHS оценивается, когда строка считывается и обрабатывается, а не когда используется макрос, как обычно. Это означает, что если на RHS имеются макросы, последующие изменения этих макросов не влияют на значение этого макроса. Рассматривать:
CFLAGS = ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}
CFLAGS := ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}
Первый вариант отмечает, что CFLAGS будет сформирован из 4 именованных макросов (ну, на самом деле, он просто копирует строку, готовую для последующего расширения), но не расширяет значения, пока не будет использован (предположительно) в команде компиляции Си.
Второй вариант сразу ищет значения 4 макросов в момент чтения строки и расширяет их. Последующие изменения в 4 ссылочных макросах не отражены в CFLAGS.
+=
нотация добавляет RHS к макросу, а не просто заменяет его.
От https://www.kernel.org/doc/local/pr_debug.txt
:
pr_debug()
Some files call pr_debug(), which is ordinarily an empty macro that discards
its arguments at compile time. To enable debugging output, build the
appropriate file with -DDEBUG by adding
CFLAGS_[filename].o := -DDEBUG
to the makefile.
For example, to see all attempts to spawn a usermode helper (such as
/sbin/hotplug), add to lib/Makefile the line:
CFLAGS_kobject_uevent.o := -DDEBUG
Then boot the new kernel, do something that spawns a usermode helper, and
use the "dmesg" command to view the pr_debug() output.