2013-07-10 11 views
5

मैं संकलन और मेरी कर्नेल में एक मॉड्यूल सम्मिलित करने के लिए कोशिश कर रहा हूँ, लेकिन मैं इस त्रुटि प्राप्त हो रही:एक बहुत सरल मॉड्यूल सम्मिलित करने में नाकाम रहने insmod

insmod: error inserting 'hello.ko': -1 Invalid module format 

मैं चरणों यहाँ पर इस ट्यूटोरियल में वर्णित का पालन किया: http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html। और सब कुछ समझ में आया और काम किया। मुझे अपना नमूना मॉड्यूल संकलित मिला लेकिन एक चेतावनी थी कि यह बात क्यों विफल रही है कि यह बात क्यों विफल रही है। चेतावनी यह थी:

WARNING: Symbol version dump /usr/src/linux-3.0.0/Module.symvers is missing; modules will have no dependencies and modversions.

मैं स्पष्ट रूप से नहीं जानता कि Module.symvers फ़ाइल क्यों नहीं है। /usr/src/linux-3.0.0 निर्देशिका और अपने सभी सामग्री मेरे द्वारा बनाया गया था के बाद मैं इस आदेश का उपयोग सूत्रों पूछेगा:

apt-get source linux-image-$(uname -r)

कि वास्तव में था कि ट्यूटोरियल के केवल कदम है कि मैं का पालन नहीं किया, क्योंकि मुझे अपने कर्नेल (3.0.0-32-जेनेरिक) के लिए सटीक स्रोत नहीं मिल सका और सोचा कि योग्यता उपकरण मुझे यह सॉर्ट करेगा।

और मैं एक 64 बिट्स मशीन पर Ubuntu चल रहा हूँ वैसे, यहाँ uname -एक उत्पादन है:

Linux vega 3.0.0-32-generiC#51-Ubuntu SMP Thu Mar 21 15:50:59 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

आगे क्या करने की कोशिश करना है के रूप में कोई सुझाव? कोई अनुशंसित पढ़ने?

PS1। कुछ और शोध के बाद मैंने पुष्टि की कि मैं 3.0.0-32-जेनेरिक चला रहा हूं। अद्यतन-कोड़ना लौटे:

Found linux image: /boot/vmlinuz-3.0.0-32-generic 

लेकिन एक sudo oldconfig बनाने के जारी करने और जिसके परिणामस्वरूप .config फ़ाइल मैं इस दिलचस्प लाइन प्राप्त की जाँच के बाद:

CONFIG_VERSION_SIGNATURE="Ubuntu 3.0.0-32.51-generic 3.0.69" 

कि एक missmatch माना जाएगा?

PS2। dmesg आउटपुट इस:

[ 5.869900] ADDRCONF(NETDEV_UP): eth1: link is not ready 
[ 6.144304] EXT4-fs (dm-1): re-mounted. Opts: errors=remount-ro 
[ 6.368936] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) 
[ 6.433919] vesafb: mode is 640x480x32, linelength=2560, pages=0 
[ 6.433921] vesafb: scrolling: redraw 
[ 6.433923] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 
[ 6.435424] vesafb: framebuffer at 0xb0000000, mapped to 0xffffc90012800000, using 1216k, total 1216k 
[ 6.435516] Console: switching to colour frame buffer device 80x30 
[ 6.443104] EXT4-fs (dm-2): mounted filesystem with ordered data mode. Opts: (null) 
[ 6.450198] fb0: VESA VGA frame buffer device 
[ 8.884523] e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx 
[ 8.885845] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready 
[ 12.611236] init: ssh main process (762) terminated with status 255 
[ 12.624381] init: failsafe main process (752) killed by TERM signal 
[ 12.634739] type=1400 audit(1373412287.107:8): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=852 comm="apparmor_parser" 
[ 12.634873] type=1400 audit(1373412287.107:9): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=851 comm="apparmor_parser" 
[ 12.635180] type=1400 audit(1373412287.107:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=851 comm="apparmor_parser" 
[ 12.635403] type=1400 audit(1373412287.107:11): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=851 comm="apparmor_parser" 
[ 19.390991] eth1: no IPv6 routers present 
[ 576.758697] hello: no symbol version for module_layout 
+0

ठीक से चलाने के बाद क्या dmesg कहता है, उदाहरण के लिए पिछले 10 लाइनें? – fghj

+0

मैंने अभी डीएसईजी आउटपुट की कुछ और पंक्तियों को पेस्ट करने के लिए प्रश्न अपडेट किया है, लेकिन मेरा मानना ​​है कि केवल अंतिम व्यक्ति प्रासंगिक होना चाहिए। – Bilthon

+0

यहां http://stackoverflow.com/questions/1738539/how-do-i-fix-no-symbol-version-for- मॉड्यूल- प्लेआउट? – fghj

उत्तर

7

अपने वर्तमान कर्नेल संस्करण 3.0.0-32-सामान्य है cd /lib/modules/3.0.0-32-gereric/ निर्देशिका पर जाकर देखें कि क्या निर्माण निर्देशिका या मौजूद है नहीं।

cd /usr/src/linux-3.0.0/ 

make menuconfig 

make -j5 

make modules 

sudo make modules_install 

sudo make install 

sudo reboot 

तो के साथ अपने सिस्टम को बूट: आप सीधे यदि आप आपके द्वारा डाउनलोड किए गए तो नीचे प्रक्रिया का पालन गिरी के साथ अपने मॉड्यूल संकलित करने के लिए चाहते हैं आदेश

make -C /lib/modules/3.0.0-32-generic/build M=$(PWD) modules 

नीचे का उपयोग कर अपने मॉड्यूल संकलित कर सकते हैं तो वर्तमान हैं linux-3.0.0 कर्नेल, और नीचे दिए गए कमांड का उपयोग करके अपने मॉड्यूल को संकलित करें:

make -C /lib/modules/3.0.0/build M=$(PWD) modules 
+0

धन्यवाद, मैं आपका जवाब स्वीकार करूंगा क्योंकि यह केवल इतना ही प्रदान किया गया है! हालांकि मैं आपके कदमों से गुजरना नहीं चाहता था। इसके बजाय मैंने बस एक नया कर्नेल संकलित किया और नए पर insmod भाग गया। यह काम करता है, लेकिन मैंने यह भी देखा कि मेरे पास स्रोत होने के बावजूद, वे संकलित नहीं किए गए थे ताकि शायद मेरी समस्या हो। – Bilthon

+0

बहुत उपयोगी! मैंने रीबूट किया और insmod मुझे कोड पर यह त्रुटि दी जो 5 मिनट पहले काम कर रहा था। मैंने/lib/मॉड्यूल में चेक किया और निश्चित रूप से पर्याप्त संस्करण संख्या के साथ एक दूसरा डीआईआर था। मैंने अपनी मेक फ़ाइल को संस्करण का उपयोग करने के लिए स्विच किया और सब कुछ फिर से काम करना शुरू कर दिया। –

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