web-dev-qa-db-fra.com

Comment charger en permanence un module de noyau?

J'ai un Compaq Presario CQ-61 320SQ, j'utilise Ubuntu 10.04 car après la mise à jour à la version 10.10, la souris et le pavé tactile ne fonctionnent pas, le réseau ne fonctionne pas, le son ne fonctionne pas ... eux après presque un mois de recherche sur Google, mais pas tous, mes 2 ordinateurs de bureau n’ont aucun problème avec 10.10) alors j’ai décidé de revenir à 10.04, où j’ai un problème:

Ma vitesse de bande passante est très faible en raison du module de noyau r8169, j'ai téléchargé le bon module r8101 et chaque fois que l'ordinateur démarre, une entrée rc.local permet de résoudre ce problème.

Question:
Puis-je charger le module de manière permanente à partir d'un emplacement spécifique? J'ai entendu parler de /etc/modules mais il me faut le nom du module, mais je dois le charger depuis un chemin spécifique (où est le chemin par défaut pour cela)?

Je vous remercie.

J'ai donc étudié le script:

Cela crée le fichier r8101.ko dans /lib/modules/`uname -r`/kernel/drivers/net, donc je pense que tant que personne ne le supprimera, et je ne mets pas à jour le noyau, ajouter r8108 à /etc/modules fonctionnera, et ajoutera r8169 à la liste noire ... Je vais l'essayer .

EDIT2:
J'ai donc ajouté r8101 à /etc/modules et blacklist r8169 à /etc/modprobe.d/blacklist.conf. Il utilise toujours l'ancien module .:

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

EDIT: Le module est chargé en utilisant le script qui l’a fourni:

#!/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
13
Radu Maris

Donc, pour rassembler toutes les données pour une réponse, la voici:

  1. Après la première compilation du nouveau module, j'avais le fichier de module r8101.ko dans /lib/modules/$(uname -r)/kernel/drivers/net.

  2. J'ai ajouté r8101 à /etc/modules et blacklist r8169 à /etc/modprobe.d/blacklist.conf mais je démarrais toujours avec l'ancien module.

  3. Ensuite, je lance Sudo update-initramfs -u puis après le redémarrage, le nouveau module a été chargé comme prévu (grâce au commentaire @papukaija).

12
Radu Maris