2011-02-26 9 views
6

Estoy tratando de comprender un módulo de kernel de Linux y me gustaría ver el resultado de pr_debug y printk. Estoy usando GNU Make.
Entiendo que para obtener los mensajes pr_debug, tenemos que usar DDEBUG.Configuración de CFLAGS para pr_debug y printk

Entonces, ¿cómo habilito las declaraciones printk?

Digamos que el nombre del archivo es kvm.c. ¿Cuál es la diferencia entre estos dos:

 CFLAGS_kvm.o := -DDEBUG 
     CFLAGS_kvm.o += -DDEBUG 

lo que hace esta declaración hacemos:

 CFLAGS_kvm.o := -I. 

[Editar]:
Parece que mi uso de corchetes ha causado cierta confusión. En realidad, por [nombre del archivo], quise decir algún archivo, digamos kvm.c.

+0

Umm ... es esto en un makefile? ¿Un script de shell? – Beta

+0

Es un archivo MAKE. He corregido la pregunta. – db42

Respuesta

1

No sé cómo activar printk() - ¿Qué buscaste con Google? Entre otras cosas, encontré this que parece implicar que printk() casi siempre está disponible (pero debe marcar los mensajes con un nivel apropiado, y probablemente haya un control sobre qué niveles se muestran en la consola).

Los corchetes en un nombre de macro son poco ortodoxos y, por lo tanto, probablemente sean una extensión específica de su sistema.

Leyendo entre líneas, es probable que esté hablando del kernel de Linux y, por lo tanto, de GNU Make, pero usted ayudaría a todos si afirmaba tales cosas.

La notación := es una asignación inmediata a la variable. El RHS se evalúa cuando la línea se lee y se procesa, no cuando se usa la macro como es normalmente el caso. Significa que si hay macros referenciadas en el RHS, los cambios posteriores a esas macros no afectarán el valor de esta macro. Considere lo siguiente:

CFLAGS = ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS} 
CFLAGS := ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS} 

La primera variación señala que CFLAGS se forma a partir de las 4 macros con nombre (bueno, en realidad, simplemente copia la línea listo para la expansión posterior), pero no se expande los valores hasta que se utiliza en (presumiblemente) un comando de compilación C

La segunda variación busca inmediatamente los valores de las 4 macros en el momento en que se lee la línea y las expande. Los cambios posteriores en las 4 macros referenciadas no se reflejan en CFLAGS.

La notación += agrega el RHS a la macro, en lugar de simplemente reemplazarlo.

+0

Gracias. Y, lo siento, no hay corchetes. He corregido la pregunta. – db42

4

De 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. 
Cuestiones relacionadas