मैं एक एकल इन-ट्री कर्नेल मॉड्यूल कैसे बनाऊं?


37

Linux-source -... में एक मॉड्यूल है जो कि config /boot/config-3.4-trunk-686-pae में अक्षम है, ताकि यह linux-image -... का हिस्सा न हो ... (यह डेबियन पर है, लेकिन समाधान उबंटू, या?) के लिए समान होना चाहिए, जैसे

# CONFIG_CAN_PEAK_USB is not set

कोई उस कर्नेल मॉड्यूल को कैसे संकलित करेगा, ताकि उसे वितरित कर्नेल के साथ उपयोग किया जा सके?

संबंधित linux-source -... पैकेज पहले से स्थापित है, असम्पीडित और / usr / src / linux से जुड़ा हुआ है। /boot/config-3.4-trunk-686-pae को /usr/src/linux/.config में कॉपी किया जाता है और उसके साथ संशोधित किया जाता है

CONFIG_CAN_PEAK_USB=m

साथ में

make
make modules

कर्नेल और सभी मॉड्यूल को संकलित करना संभव है। लेकिन कोई केवल उस विशिष्ट एकल मॉड्यूल को कैसे संकलित करेगा?

(नोट: यह भी गिरी की जरूरत से पहले संकलित करने, अन्यथा आपको निम्न त्रुटि मिलती है: no symbol version for module_layout)


कृपया 14627 के डुप्लिकेट के रूप में बंद करें। उपयोगकर्ता 'रादू सी' का उत्तर प्रश्न का उत्तर देता है।
mab

क्या आपने depmod -aपहले प्रयास किया था modbrobe?
नादिया

1
निम्नलिखित लेख पर भी विचार करें: stackoverflow.com/questions/8744087/…
ओलेग कोकोरिन

जवाबों:


38

मुझे भी यही समस्या थी। मुझे लगता है कि आपको न केवल कॉपी .config बल्कि Module.symvers की भी आवश्यकता है

मॉड्यूल ft1000 को संकलित करने के लिए मेरे कदम (डेबियन व्हीज़ 7.1.0; कर्नेल 3.2.0-4-686-pae) चला रहे हैं:

aptitude install linux-headers-3.2.0-4-686-pae
aptitude install linux-source-3.2
cd /usr/src/
tar xjf linux-source-3.2.tar.bz2
cd /usr/src/linux-source-3.2
cp ../linux-headers-3.2.0-4-686-pae/Module.symvers .
make oldconfig # it copies .config to ./
vi .config # enable ft1000 module: CONFIG_FT1000=m
make prepare # setup FT1000 as module
make modules_prepare
make SUBDIRS=scripts/mod
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
cp drivers/staging/ft1000/ft1000-usb/ft1000.ko /lib/modules/3.2.0-4-686-pae/kernel
/drivers/staging/
depmod
modprobe ft1000

4
अगर SUBDIRS अभी भी सही है तो मुझे यकीन नहीं है यह मेरे लिए नजरअंदाज कर दिया गया था। Kernel.org/doc/Documentation/kbuild/modules.txt पढ़ने के बाद मैंने make M=/path/to/moduleकाम करने की कोशिश की ।
हानिकारक

Iam एक अलग मॉड्यूल को संशोधित करने की कोशिश कर रहा है (जब मैं एक USB मॉड्यूल को एक मौजूदा मॉड्यूल में जोड़ रहा हूं) जब मैं इसे संकलित करता हूं तो मुझे कोई त्रुटि नहीं मिलती है, लेकिन जब मैं इसे सम्मिलित करता हूं तो मुझे अमान्य मॉड्यूल प्रारूप मिलता है क्यों ?!
जिब्री

14

शीर्ष-स्तरीय स्रोत निर्देशिका के भीतर, बस मॉड्यूल नाम या मॉड्यूल निर्देशिका के लिए रास्ता बनाते हैं, जैसे:

make drivers/net/can/usb/peak_usb/

या सरल उदाहरण के लिए (Intel e1000 ईथरनेट ड्राइवर):

make drivers/net/ethernet/intel/e1000/e1000.ko

बस कर: make drivers/net/can/usb/peak_usb/pcan_usb.koकेवल pcan_usb.o का निर्माण किया। करना make drivers/net/can/usb/peak_usb/ && make drivers/net/can/usb/peak_usb/pcan_usb.koयह संकलन करता है, लेकिन insmod शिकायत करता है Error: could not insert module drivers/net/can/usb/peak_usb/peak_usb.ko: Invalid module format। dmesg:peak_usb: no symbol version for module_layout
mab

क्या आप उस विशिष्ट कर्नेल को चला रहे हैं, और क्या आपने पहले ही कर्नेल को एक बार संकलित कर लिया है? कृपया के साथ modprobeभी प्रयास करें ।
ish

मैं पैक किए गए कर्नेल चला रहा हूं। पूरा कर्नेल कार्यों को संकलित करना। लेकिन मैं पूर्ण कर्नेल, बस विशिष्ट कर्नेल मॉड्यूल को संकलित नहीं करने की कोशिश कर रहा हूं। क्या कोई ऐसा लक्ष्य है जो एकल मॉड्यूल संकलन को 'तैयार' करता है? modprobe समान त्रुटि दिखाता है।
mab

6
के अनुसार stackoverflow तुम सिर्फ उपयोग कर सकते हैं make modules SUBDIRS=drivers/net/can/usb/peak_usbया किसी अन्य subdir। यह यहाँ ठीक काम करता है।
त्रीवीनो

0

जैसा कि सरल है: (यह उदाहरण ft1000 ड्राइवर का उदाहरण देता है, यह सिर्फ कुछ मिनट लेना चाहिए, अगर नहीं है)

cd /usr/src/kernel-sources
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
# Enable the ft1000 module: CONFIG_FT1000=m  on the config with 
make xconfig # or "make menuconfig" then save
make prepare
make modules_prepare
make SUBDIRS=scripts/mod
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules_install

फिर आप के साथ मॉड्यूल लोड कर सकते हैं modprobeके बादdepmod

नोट: मॉड्यूल निर्भरता के आधार पर आपको पूरी तरह से कर्नेल के पुनर्निर्माण की आवश्यकता हो सकती है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.