Como eu carrego permanentemente um módulo do kernel?

12

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 funcionarão, a rede não funcionará, o som não funcionará ... (consegui conserto a maioria deles depois de quase um mês pesquisando, mas não todos, meus 2 Desktops não têm problema com 10.10) então eu decidi voltar para o 10.04, onde eu tenho um problema:

Minha velocidade de banda larga é muito baixa porque o módulo do kernel r8169 , eu baixei o módulo bom r8101 e toda vez que o computador inicializa tem uma entrada rc.local para consertar isso.

Pergunta:
Posso carregar o módulo permanentemente de um local específico. Eu ouvi sobre /etc/modules mas lá eu preciso do nome do módulo, mas eu tenho que carregá-lo de um caminho específico (onde é o caminho padrão para isso)?

Obrigado.

Então eu estudei o roteiro:

Ele cria o arquivo r8101.ko em /lib/modules/'uname -r'/kernel/drivers/net , então acho que enquanto ninguém excluir esse arquivo, e eu não atualizar o kernel, talvez adicionar r8108 a /etc/modules funcione e adicionar r8169 to blacklist ... Eu vou tentar.

EDIT2:
Então, adicionei r8101 a /etc/modules e blacklist r8169 a /etc/modprobe.d/blacklist.conf . Ainda usa o antigo módulo.:

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

EDIT: O módulo é carregado usando este script que o 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
    
por Radu Maris 01.02.2011 / 18:31

1 resposta

12

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

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

  2. Adicionei r8101 a /etc/modules e blacklist r8169 a /etc/modprobe.d/blacklist.conf , mas ainda estava inicializando no módulo antigo.

  3. Em seguida, executo sudo update-initramfs -u e, após a reinicialização, o novo módulo foi carregado como esperado (graças ao comentário @papukaija).

por Radu Maris 01.02.2011 / 22:11