मैं स्थायी रूप से कर्नेल मॉड्यूल कैसे लोड कर सकता हूं?


13

मेरे पास एक कॉम्पैक प्रेसारियो CQ-61 320SQ है, मैं Ubuntu 10.04 का उपयोग कर रहा हूं क्योंकि 10.10 पर अपडेट होने के बाद मेरा माउस और टचपैड काम नहीं करेगा, नेटवर्क काम नहीं करेगा, ध्वनि काम नहीं करेगी ... (मैं सबसे ज्यादा ठीक करने में कामयाब रहा लगभग एक महीने तक चले जाने के बाद उन्हें, लेकिन सभी को नहीं, मेरे 2 डेस्कटॉप को 10.10 से कोई समस्या नहीं है) इसलिए मैंने 10.04 पर वापस जाने का फैसला किया, जहाँ मुझे समस्या है:

मेरी ब्रॉडबैंड की गति कर्नेल मॉड्यूल की बहुत कम है r8169, मैंने अच्छे मॉड्यूल को डाउनलोड किया r8101और हर बार कंप्यूटर के बूट में rc.localइसे ठीक करने के लिए एक प्रविष्टि होती है।

प्रश्न:
क्या मैं एक विशिष्ट स्थान से स्थायी रूप से मॉड्यूल लोड कर सकता हूं। मैंने सुना है /etc/modules, लेकिन मुझे मॉड्यूल नाम की आवश्यकता है, लेकिन मुझे इसे एक विशिष्ट पथ से लोड करना होगा (उस के लिए डिफ़ॉल्ट पथ कहां है)?

धन्यवाद।

इसलिए मैंने स्क्रिप्ट का अध्ययन किया:

यह फ़ाइल बनाता r8101.koहै /lib/modules/`uname -r`/kernel/drivers/netइसलिए मुझे लगता है कि जब तक कोई भी उस फ़ाइल को नहीं हटाएगा, और मैं कर्नेल को अपडेट नहीं करता, शायद काम r8108करने के लिए जोड़ /etc/modulesदेगा, और r8169ब्लैकलिस्ट में जोड़ देगा ... मैं इसे आज़माऊंगा।

EDIT2:
तो मैं r8101करने के लिए /etc/modulesऔर blacklist r8169करने के लिए जोड़ा /etc/modprobe.d/blacklist.conf। यह अभी भी पुराने मॉड्यूल का उपयोग करता है।

radu@adu:~$ lsmod | grep r8
r8101                  67626  0 
r8169                  34108  0 
mii                     4381  1 r8169

संपादित करें: मॉड्यूल इस स्क्रिप्ट के साथ लोड किया गया है जो इसके साथ आया था ।:

#!/bin/sh

# invoke insmod with all arguments we got
# and use a pathname, as insmod doesn't look in . by default

TARGET_PATH=/lib/modules/`uname -r`/kernel/drivers/net
echo
echo "Check old driver and unload it." 
check=`lsmod | grep r8169`
if [ "$check" != "" ]; then
        echo "rmmod r8169"
        /sbin/rmmod r8169
fi

check=`lsmod | grep r8101`
if [ "$check" != "" ]; then
        echo "rmmod r8101"
        /sbin/rmmod r8101
fi

echo "Build the module and install"
echo "-------------------------------" >> log.txt
date 1>>log.txt
make all 1>>log.txt || exit 1
module=`ls src/*.ko`
module=${module#src/}
module=${module%.ko}

if [ "$module" == "" ]; then
    echo "No driver exists!!!"
    exit 1
elif [ "$module" != "r8169" ]; then
    if test -e $TARGET_PATH/r8169.ko ; then
        echo "Backup r8169.ko"
        if test -e $TARGET_PATH/r8169.bak ; then
            i=0
            while test -e $TARGET_PATH/r8169.bak$i
            do
                i=$(($i+1))
            done
            echo "rename r8169.ko to r8169.bak$i"
            mv $TARGET_PATH/r8169.ko $TARGET_PATH/r8169.bak$i
        else
            echo "rename r8169.ko to r8169.bak"
            mv $TARGET_PATH/r8169.ko $TARGET_PATH/r8169.bak
        fi
    fi
fi

echo "Depending module. Please wait."
depmod -a
echo "load module $module"
modprobe $module

echo "Completed."
exit 0

यदि इसे / etc / मॉड्यूल काम करता है, तो आपको अपने प्रश्न का उत्तर देना चाहिए।
जेवियर रिवेरा

उम्मीद के मुताबिक काम नहीं किया, सवाल को अपडेट किया
रादू मैरिस

7
यदि आप / etc / मॉड्यूल संपादित करते हैं, तो आपको (sudo के रूप में) अपडेट-initramfs -u चलाने की आवश्यकता है और फिर पुनरारंभ करें।
पापुकैजा

1
@papukaija: manrr a genius, tks :)
मैरिस

जवाबों:


12

तो सभी डेटा को एक उत्तर में इकट्ठा करने के लिए, यहाँ यह है:

  1. नए मॉड्यूल के पहले संकलन के बाद, मेरे पास मॉड्यूल फ़ाइल r8101.koथी /lib/modules/$(uname -r)/kernel/drivers/net

  2. मैं जोड़ा r8101करने के लिए /etc/modulesऔर blacklist r8169करने के लिए /etc/modprobe.d/blacklist.conf, लेकिन मैं अभी भी पुराने मॉड्यूल को बूट किया गया था।

  3. फिर मैं दौड़ता हूं sudo update-initramfs -uऔर फिर से शुरू होने के बाद नए मॉड्यूल को उम्मीद के मुताबिक लोड किया गया (@papukaija टिप्पणी के लिए धन्यवाद)।

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