Установка 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.
Другие вопросы по тегам