के माध्यम से मॉड्यूल डीबगिंग मैं अपने कर्नेल मॉड्यूल को डीबग करना चाहता हूं। कि मैं बस से पहले मेरी init_module
kernel
/module.c
में do_one_initcall
पर एक ब्रेकपाइंट डाल करने के लिए कहा जाता हो जाता है कोशिश कर रहा हूँ, लेकिन यहकेजीडीबी
पते पर स्मृति तक नहीं पहुंच पा 0x802010a0
नीचे Makefile
जो मैं कर रहा हूँ है का उपयोग कर:
obj-m := hello.o
KDIR=/lib/modules/$(shell uname -r)/build
PWD=$(shell pwd)
EXTRA_CFLAGS += -g
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
कृपया मुझे बताएं कि समस्या क्या हो सकती है।
मेरा 'insmod' सफल होता है और मैं अपने 'module_init' kprints int वह' dmesg' देखता हूं। लेकिन मेरा 'modprobe' विफल रहता है। और इस प्रकार 'modinfo' भी विफल रहता है। क्या आप कुछ अंतर्दृष्टि प्रदान कर सकते हैं? –
कई कारण हो सकते हैं। सबसे छोटा यह है कि मॉडप्रोब आपके मॉड्यूल को नहीं जानता है, क्योंकि यह डेटाबेस का उपभोग करता है, इसलिए आप 'modprobe my_module_file.ko' नहीं कर सकते हैं। इसके बजाय, आपको 'depmod -a' के साथ डेटाबेस में डालने के बाद' modprobe my_module_name' करना होगा। हालांकि इस उद्देश्य के लिए, यह वास्तव में कोई फर्क नहीं पड़ता। आप अपना नाम और फ़ाइल नाम जानते हैं, ताकि आप उत्तर देने के बजाए बस उनका उपयोग कर सकें। जैसे 'MODULE_NAME = my_module_name; MODULE_FILE = my_module_file.ko' – Nir
एक त्वरित युक्ति: आपको बिल्ली/sys/मॉड्यूल/मॉड्यूल-नाम-यहां/अनुभाग/प्राप्त करने के लिए रूट की आवश्यकता है।* काम करने के लिए सामान .. (अन्यथा यह सिर्फ 0x0 मान प्रदर्शित करता है)। – kaiwan