Jak trwale załadować moduł jądra?

13

Mam Compaq Presario CQ-61 320SQ, używam Ubuntu 10.04, ponieważ po aktualizacji do 10.10 moja mysz i touchpad nie działają, sieć nie działa, dźwięk nie działa ... (udało mi się naprawić większość po prawie miesiącu od Google, ale nie wszystkie, moje 2 komputery nie mają problemu z 10.10), więc postanowiłem wrócić do 10.04, gdzie mam problem:

Moja prędkość szerokopasmowa jest bardzo niska z powodu modułu jądra r8169, pobrałem dobry moduł r8101i za każdym razem, gdy rozruch komputera ma rc.localwpis, aby to naprawić.

Pytanie:
Czy mogę załadować moduł na stałe z określonej lokalizacji. Słyszałem o, /etc/modulesale potrzebuję nazwy modułu, ale muszę go załadować z określonej ścieżki (gdzie jest ścieżka domyślna)?

Dziękuję Ci.

Studiowałem więc scenariusz:

Tworzy plik r8101.kow /lib/modules/`uname -r`/kernel/drivers/nettak myślę, że tak długo, jak nikt nie usunie tego pliku, a ja nie aktualizować jądro, może dodanie r8108do /etc/modulespracy będzie, i dodać r8169do czarnej listy ... dam jej spróbować.

EDIT2:
Więc dodałem r8101do /etc/modulesi blacklist r8169do /etc/modprobe.d/blacklist.conf. Nadal używa starego modułu:

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

EDYCJA: Moduł jest ładowany za pomocą tego skryptu, który został dostarczony:

#!/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
źródło
Jeśli dodanie go do / etc / modułów działa, powinieneś odpowiedzieć na własne pytanie.
Javier Rivera
nie działało zgodnie z oczekiwaniami, zaktualizowałem pytanie
Radu Maris
7
Jeśli edytujesz / etc / moduły, musisz uruchomić (jako sudo) update-initramfs -u, a następnie ponownie uruchomić.
papukaija
1
@papukaija: man you a genius, tks :)
Radu Maris
stackoverflow.com/questions/4356224/…
Ciro Santilli 15 改造 中心 法轮功 六四 事件

Odpowiedzi:

12

Aby zebrać wszystkie dane do odpowiedzi, oto:

  1. Po pierwszej kompilacji nowego modułu, miałem plik modułu r8101.kow /lib/modules/$(uname -r)/kernel/drivers/net.

  2. Dodałem r8101do /etc/modulesi blacklist r8169do, /etc/modprobe.d/blacklist.confale wciąż uruchamiałem się do starego modułu.

  3. Następnie uruchamiam, sudo update-initramfs -ua następnie po restarcie nowy moduł został załadowany zgodnie z oczekiwaniami (dzięki komentarzowi @papukaija).

Radu Maris
źródło