2015-03-08 7 views
9

देने नहीं मैं एक लोड करने योग्य कर्नेल मॉड्यूल है और उसके initpr_debug किसी भी उत्पादन

static int __init id_init(void) 
{ 
    struct identity *temp; 

    /* some code which is not relevant to the question */ 

    temp = identity_find(3); 
    pr_debug("id 3 = %s\n", temp->name); 

    temp = identity_find(42); 
    if (temp == NULL) 
     pr_debug("id 42 not found\n"); 

    /* some code which is not relevant to the question */ 

    return 0; 
} 

इसके अलावा, मैं सक्षम किया है, गतिशील डिबगिंग कर्नेल संस्करण मैं उपयोग कर रहा हूँ पर सक्षम नीचे दिया गया है के रूप में - CONFIG_DYNAMIC_DEBUG=y अर्थात।

और मॉड्यूल के मेकफ़ाइल में मैंने एक पंक्ति CFLAGS_[id].o := -DDEBUG जोड़ा है जहां id.c फ़ाइल का नाम है।

अब मैं इस मॉड्यूल, जिसमें मैंने पाया की insmod कर नीचे लाइनों

/home/pauldc/Programming/Kernel/id/id.c:69 [id]id_init =_ "id 42 not found\012" 
/home/pauldc/Programming/Kernel/id/id.c:65 [id]id_init =_ "id 3 = %s\012" 
उपरोक्त दो pr_debug में बयान

यहां तक ​​कि इस सब करने के बाद, मेरे निराशा को मैं नहीं मिल सका के बाद /sys/kernel/debug/dynamic_debug/control में जाँच डीएमएसजी का उत्पादन। तो मैं क्या याद कर रहा हूँ या गलत कर रहा हूँ?

+0

आपके सिस्टम के लॉग स्तर की जाँच करें। हो सकता है कि यह डीबग लॉग मुद्रित न हो। –

+0

क्या आपने dmesg या स्क्रीन पर या दोनों में प्रतीत नहीं किया है? जब आप इसे लोड करते हैं तो मॉड्यूल में 'dyndbg' पैरामीटर जोड़ने का प्रयास करें। यदि आपने ' .dyndbg' उपयोग में संकलित किया है, जहां मेकफ़ाइल के अनुसार आपके मॉड्यूल का नाम है। – 0andriy

+0

@ मिलिने क्या आपका मतलब CONFIG_MESSAGE_LOGLEVEL_DEFAULT था? कॉन्फ़िगरेशन फ़ाइल द्वारा रिपोर्ट की गई यह 4 है। लेकिन क्या इससे कोई फर्क पड़ता है? – PaulDaviesC

उत्तर

9

मेकफ़ाइल में निम्नलिखित जोड़ें, मान लें कि id.c मॉड्यूल स्रोत फ़ाइल है।

CFLAGS_id.o := -DDEBUG 

नहीं

CFLAGS_[id].o := -DDEBUG 

देखें https://www.kernel.org/doc/local/pr_debug.txt

+0

पर सेट करें कम से कम मेरे लिए काम किया। –

+0

यह मुझे भी काम करता है :) – PaulDaviesC

संबंधित मुद्दे