Bagaimana cara saya memuat modul kernel secara permanen?

13

Saya memiliki Compaq Presario CQ-61 320SQ, saya menggunakan Ubuntu 10.04 karena setelah memperbarui ke 10.10 mouse dan touchpad saya tidak berfungsi, jaringan tidak berfungsi, suara tidak berfungsi ... (Saya berhasil memperbaiki sebagian besar dari mereka setelah hampir sebulan googling, tetapi tidak semua, 2 Desktop saya tidak punya masalah dengan 10.10) jadi saya memutuskan untuk beralih kembali ke 10,04, di mana saya punya masalah:

Kecepatan broadband saya sangat rendah karena modul kernel r8169, saya mengunduh modul yang bagus r8101dan setiap kali komputer mem-boot rc.localentri untuk memperbaikinya.

Pertanyaan:
Dapatkah saya memuat modul secara permanen dari lokasi tertentu. Saya mendengar tentang /etc/modulestetapi di sana saya memerlukan nama modul, tetapi saya harus memuatnya dari jalur tertentu (di mana jalur default untuk itu)?

Terima kasih.

Jadi saya mempelajari naskahnya:

Ini menciptakan file r8101.kodi /lib/modules/`uname -r`/kernel/drivers/netjadi saya pikir selama tidak ada akan menghapus file itu, dan saya tidak memperbarui kernel, mungkin menambahkan r8108ke /etc/moduleskemauan kerja, dan menambahkan r8169ke daftar hitam ... saya akan mencobanya.

EDIT2:
Jadi saya menambahkan r8101ke /etc/modulesdan blacklist r8169ke /etc/modprobe.d/blacklist.conf. Masih menggunakan modul lama .:

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

EDIT: Modul ini dimuat menggunakan skrip ini yang menyertainya .:

#!/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
sumber
Jika menambahkannya ke / etc / modules berfungsi, Anda harus menjawab pertanyaan Anda sendiri.
Javier Rivera
tidak berfungsi seperti yang diharapkan, memperbarui pertanyaan
Radu Maris
7
Jika Anda mengedit / etc / modules Anda perlu menjalankan (as sudo) perbarui-initramfs -u dan kemudian restart.
papukaija
1
@papukaija: pria jenius, tks :)
Radu Maris
stackoverflow.com/questions/4356224/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

12

Jadi untuk mengumpulkan semua data ke sebuah jawaban, ini dia:

  1. Setelah kompilasi pertama dari modul baru, saya punya file modul r8101.kodi /lib/modules/$(uname -r)/kernel/drivers/net.

  2. Saya menambahkan r8101ke /etc/modulesdan blacklist r8169ke /etc/modprobe.d/blacklist.conftapi saya masih boot ke modul lama.

  3. Lalu saya jalankan sudo update-initramfs -udan kemudian setelah restart modul baru dimuat seperti yang diharapkan (terima kasih kepada komentar @papukaija).

Radu Maris
sumber