Wie lade ich ein Kernelmodul dauerhaft?

13

Ich habe ein Compaq Presario CQ-61 320SQ, ich verwende Ubuntu 10.04, da nach dem Update auf 10.10 meine Maus und mein Touchpad nicht funktionieren, das Netzwerk nicht funktioniert, der Sound nicht funktioniert ... (Ich habe die meisten Probleme behoben Nachdem ich fast einen Monat gegoogelt habe, aber nicht alle, haben meine 2 Desktops kein Problem mit 10.10.) Also habe ich beschlossen, wieder auf 10.04 zu wechseln, wo ich ein Problem habe:

Meine Breitbandgeschwindigkeit ist aufgrund des Kernelmoduls sehr niedrig. r8169Ich habe das gute Modul heruntergeladen r8101und jedes Mal, wenn der Computer hochfährt, einen rc.localEintrag, um dies zu beheben.

Frage:
Kann ich das Modul dauerhaft von einem bestimmten Ort laden? Ich habe davon gehört, /etc/modulesaber dort brauche ich den Modulnamen, aber ich muss ihn von einem bestimmten Pfad laden (wo ist der Standardpfad dafür)?

Vielen Dank.

Also habe ich das Drehbuch studiert:

Es erstellt die Datei r8101.koin, /lib/modules/`uname -r`/kernel/drivers/netso dass ich denke, solange niemand diese Datei löschen wird und ich den Kernel nicht aktualisiere. Vielleicht funktioniert das Hinzufügen r8108zu /etc/modulesund Hinzufügen r8169zur Blacklist ... Ich werde es versuchen.

EDIT2:
Also habe ich r8101zu /etc/modulesund blacklist r8169zu hinzugefügt /etc/modprobe.d/blacklist.conf. Es wird immer noch das alte Modul verwendet .:

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

BEARBEITEN: Das Modul wird mit dem mitgelieferten Skript geladen:

#!/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
Radu Maris
quelle
Wenn das Hinzufügen zu / etc / modules funktioniert, sollten Sie Ihre eigene Frage beantworten.
Javier Rivera
hat nicht wie erwartet funktioniert, die Frage aktualisiert
Radu Maris
7
Wenn Sie / etc / modules bearbeiten, müssen Sie update-initramfs -u (als sudo) ausführen und anschließend neu starten.
Papukaija
1
@ Papukaija: Mann, du bist ein Genie, tks :)
Radu Maris

Antworten:

12

Um alle Daten zu einer Antwort zusammenzufassen, hier ist es:

  1. Nach dem ersten Kompilieren des neuen Moduls hatte ich die Moduldatei r8101.koin /lib/modules/$(uname -r)/kernel/drivers/net.

  2. Ich habe r8101zu /etc/modulesund blacklist r8169zu hinzugefügt , /etc/modprobe.d/blacklist.confaber ich habe immer noch das alte Modul gebootet.

  3. Dann sudo update-initramfs -ustarte ich und nach dem Neustart wurde das neue Modul wie erwartet geladen (dank @papukaija Kommentar).

Radu Maris
quelle