web-dev-qa-db-ja.com

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

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/modulesに、blacklist 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
13
Radu Maris

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

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

  2. r8101/etc/modulesに追加し、blacklist r8169/etc/modprobe.d/blacklist.confに追加しましたが、まだ古いモジュールを起動していました。

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

12
Radu Maris