¿Cómo cargo permanentemente un módulo de kernel?

13

Tengo un Compaq Presario CQ-61 320SQ, estoy usando Ubuntu 10.04 porque después de la actualización a 10.10 mi mouse y touchpad no funcionarán, la red no funcionará, el sonido no funcionará ... (logré arreglar la mayoría de después de casi un mes de googlear, pero no todos, mis 2 computadoras de escritorio no tienen problemas con 10.10), así que decidí volver a 10.04, donde tengo un problema:

Mi velocidad de banda ancha es muy baja debido al módulo del núcleo r8169, descargué el módulo bueno r8101y cada vez que la computadora arranca tiene una rc.localentrada para solucionar esto.

Pregunta:
¿Puedo cargar el módulo permanentemente desde una ubicación específica? Me enteré /etc/modulespero necesito el nombre del módulo, pero tengo que cargarlo desde una ruta específica (¿dónde está la ruta predeterminada para eso)?

Gracias.

Entonces estudié el guión:

Se crea el archivo r8101.koen /lib/modules/`uname -r`/kernel/drivers/netlo que creo, siempre y cuando nadie va a eliminar ese archivo, y no actualizar el kernel, tal vez añadiendo r8108a /etc/modulestrabajar se, y añadir r8169a la lista negra ... Voy a darle una oportunidad.

Edit2:
por lo que añade r8101a /etc/modulesy blacklist r8169a /etc/modprobe.d/blacklist.conf. Todavía usa el antiguo módulo .:

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

EDITAR: El módulo se carga usando este script que vino con él .:

#!/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
fuente
Si agregarlo a / etc / modules funciona, debe responder su propia pregunta.
Javier Rivera
no funcionó como se esperaba, actualizó la pregunta
Radu Maris
77
Si edita / etc / modules necesita ejecutar (como sudo) update-initramfs -u y luego reiniciar.
papukaija 01 de
1
@papukaija: hombre, eres un genio, tks :)
Radu Maris
stackoverflow.com/questions/4356224/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

12

Entonces, para reunir todos los datos para una respuesta, aquí está:

  1. Después de la primera compilación del nuevo módulo, que tenía el archivo del módulo r8101.koen /lib/modules/$(uname -r)/kernel/drivers/net.

  2. He añadido r8101a /etc/modulesy blacklist r8169a /etc/modprobe.d/blacklist.confpero todavía estaba iniciando desde el módulo de edad.

  3. Luego ejecuto sudo update-initramfs -uy luego, después de reiniciar, el nuevo módulo se cargó como se esperaba (gracias al comentario de @papukaija).

Radu Maris
fuente