カーネルモジュールを永続的にロードするにはどうすればよいですか?


13

Compaq Presario CQ-61 320SQを使用しています。10.10にアップデートした後、マウスとタッチパッドが機能せず、ネットワークが機能せず、サウンドが機能しないため、Ubuntu 10.04を使用しています。ほぼ1か月間のグーグル検索の後、すべてではありませんが、私の2つのデスクトップは10.10で問題ありません。そこで、問題のある10.04に切り替えることにしました。

カーネルモジュールのためr8169、ブロードバンドの速度が非常に遅いため、適切なモジュールをダウンロードしr8101、コンピューターを起動するたびにrc.localこれを修正するエントリがあります。

質問:
特定の場所からモジュールを永続的にロードできますか。私は聞いたこと/etc/modulesがありますが、モジュール名が必要ですが、特定のパスからロードする必要があります(そのためのデフォルトパスはどこですか)?

ありがとうございました。

だから私はスクリプトを勉強しました:

これは、ファイルの作成r8101.ko中に/lib/modules/`uname -r`/kernel/drivers/net私がいる限り、誰もがそのファイルを削除しないだろう、と私は多分追加して、カーネルを更新しないと考えるようr8108/etc/modules意志の仕事、および追加r8169ブラックリストに...私はそれを試してみるだろうし。

EDIT2:
だから私は追加r8101する/etc/modulesblacklist r8169します/etc/modprobe.d/blacklist.conf。まだ古いモジュールを使用しています。

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

編集:モジュールは、付属のこのスクリプトを使用してロードされます。

#!/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

/ etc / modulesに追加することが機能する場合は、独自の質問に答える必要があります。
ハビエルリベラ

期待どおりに機能しなかったため、質問を更新しました
ラドゥマリス

7
/ etc / modulesを編集する場合、(sudoとして)update-initramfs -uを実行してから再起動する必要があります。
パプカイジャ

1
@papukaija:男you'r天才、TKS :)
ラドゥ・マリス

回答:


12

したがって、回答に対するすべてのデータを収集するには、次のようにします。

  1. 新しいモジュールの最初のコンパイル後、モジュールファイルがにありr8101.koました/lib/modules/$(uname -r)/kernel/drivers/net

  2. 私は追加r8101する/etc/modulesblacklist r8169する/etc/modprobe.d/blacklist.confが、私はまだ古いモジュールに起動されました。

  3. その後、実行sudo update-initramfs -uし、再起動後に新しいモジュールが期待どおりにロードされました(@papukaijaコメントのおかげ)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.