Como carrego permanentemente um módulo do kernel?

13

Eu tenho um Compaq Presario CQ-61 320SQ, estou usando o Ubuntu 10.04 porque, após a atualização para 10.10, meu mouse e touchpad não funcionam, a rede não funciona, o som não funciona ... (consegui corrigir a maioria dos depois de quase um mês pesquisando, mas não todos, meus 2 Desktops não têm problemas com a 10.10), então decidi voltar para a 10.04, onde tenho um problema:

Minha velocidade de banda larga é muito baixa r8169, porque o módulo do kernel , baixei o módulo bom r8101e toda vez que o computador inicializa, tem uma rc.localentrada para corrigir isso.

Pergunta:
Posso carregar o módulo permanentemente de um local específico. Eu ouvi falar, /etc/modulesmas preciso do nome do módulo, mas preciso carregá-lo a partir de um caminho específico (onde está o caminho padrão para isso)?

Obrigado.

Então, eu estudei o script:

Ele cria o arquivo r8101.ko, /lib/modules/`uname -r`/kernel/drivers/netentão eu acho que, desde que ninguém exclua esse arquivo, e eu não atualizo o kernel, talvez adicionando r8108ao /etc/modulesfuncione e adicione r8169à lista negra ... Vou tentar.

EDIT2:
Então eu adicionei r8101para /etc/modulese blacklist r8169para /etc/modprobe.d/blacklist.conf. Ele ainda usa o módulo antigo .:

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

EDIT: O módulo é carregado usando este script que acompanha:

#!/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
fonte
Se adicioná-lo ao / etc / modules funcionar, você deverá responder sua própria pergunta.
Javier Rivera
não funcionou como esperado, atualizei a questão
Radu Maris
7
Se você editar / etc / modules, precisará executar (como sudo) update-initramfs -u e, em seguida, reiniciar.
papukaija
1
@papukaija: Homem você'r um gênio, tks :)
Radu Maris
stackoverflow.com/questions/4356224/…
Ciro Santilli escreveu:

Respostas:

12

Então, para reunir todos os dados para uma resposta, aqui está:

  1. Após a primeira compilação do novo módulo, tive o arquivo de módulo r8101.kono /lib/modules/$(uname -r)/kernel/drivers/net.

  2. Eu adicionei r8101para /etc/modulese blacklist r8169para /etc/modprobe.d/blacklist.conf, mas eu ainda estava a inicialização para o módulo antigo.

  3. Então eu corro sudo update-initramfs -ue, depois de reiniciar, o novo módulo foi carregado conforme o esperado (graças ao comentário @papukaija).

Radu Maris
fonte