[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:16490] Re: modules.confについて。



こじま@そろそろボージョレ・ヌーボーの季節か,,です.

# ボージョレ・ヌーボーって発酵のさせかたが特殊だから,それこそバナナみ
# たいな甘い薫りもするんですよね

From: FumimasaKojima <kojima-lab@k2.dion.ne.jp>
Subject: [plamo:16470] modules.confについて。
Date: Fri, 15 Nov 2002 20:46:18 +0900

> カーネルモジュールを起動時に読み込ませるための
> /etc/modules.conf
> の中で、
> alias <別名> <モジュール名>
> とか書き込みますよね。
> この<別名>部分は、組み込みたいデバイスなど
> によって違うと思うのですが、どうやって調べる
> のですか?

以下の内容は自分ではこう理解しているというだけで,ちゃんと調べたわけで
はないから間違ってたら遠慮なく指摘してくださいませ.

-------------------------

alias は別名定義だから,alias <alias_name> <result> と書いた場合,
alias_name を modprobe すれば result に置換されて必要なモジュールがロー
ドされる,というのが一般的な機能です.

一方,カーネルの立場からすると,各種デバイスはデバイス番号で識別してい
るから,あるデバイスを使いたい場合,そのデバイスのデバイス番号で呼び出
すことになり,modprobe レベルでデバイス番号 => デバイスドライバの変換
をする必要があります.

例えば,Plamo のデフォルトの /etc/modules.conf にはサウンドカードのデ
バイスの指定例として以下のような設定を登録していますが,

alias char-major-14 es1371
post-install es1371 /usr/bin/aumix -q -v85 -w88

この場合,char-major-14 というのはデバイスのメジャー番号が 14 になって
いるデバイス,すなわちサウンド関係のデバイスで,カーネルがこのデバイス
番号で指定されるデバイスにアクセスしようとした場合(より厳密に言うと,
メジャー番号 14 のデバイスにアクセスしてアクセスできなかった場合),
es1371 というモジュールをロードする,という指定になります.

# 具体的にはカーネルスレッドの kmod あたりがカーネルのトラップを検知し
# て /proc/sys/kernel/modprobe に定義されているコマンドを起動する,と
# いう手順を辿るはず.

ちなみに es1371というモジュールが機能するために必要なモジュールについ
ての情報(依存関係)は,depmod を実行することにより/lib/modules/<vers>/modules.dep 
に設定され,手元では以下のようになっていました.

/lib/modules/2.4.19.org/kernel/drivers/sound/es1371.o:	/lib/modules/2.4.19.org/kernel/drivers/char/joystick/gameport.o \
	/lib/modules/2.4.19.org/kernel/drivers/sound/soundcore.o \
	/lib/modules/2.4.19.org/kernel/drivers/sound/ac97_codec.o

これを見ると,es1371 というモジュールを動作させるためには gameport.o 
や soundcore.o,ac97_codec.o というモジュールが必要なため,modprobe は
これらも(再帰的に = soundcore.o に必要なモジュールがあればそれも)自動
的にロードしてくれます.

# 一方,insmod は modules.dep は見ないので,
# insmod /lib/modules/2.4.19.org/kernel/drivers/sound/es1371.o を実行する前に
# は必要なモジュール(ac97_codec.o, soundcore,o, gameport.o)を,事前に insmod 
# してやる必要があります.

ちょっと複雑な例では,PPP の設定として下記のようなものを指定していますが,

# for PPP on 2.4 kernel
alias /dev/ppp          ppp_generic
alias char-major-108    ppp_generic
alias tty-ldisc-3       ppp_async
alias tty-ldisc-14      ppp_synctty
alias ppp-compress-21   bsd_comp
alias ppp-compress-24   ppp_deflate
alias ppp-compress-26   ppp_deflate

この場合,ls -l /dev/ppp すれば分るように /dev/ppp のメジャーデバイス
番号は 108 なので,alias /dev/ppp と alias char-major-108 は同じ意味に
なります.

# メジャーデバイス番号が 108 なのは /dev/ppp だけなのでこの指定でいい
# んでしょうね.一方,メジャーデバイス番号が 14 なのはマイナー番号によっ
# て dspN やら midiN,mixerN に割りあてられているので char-major-14 と
# いう形の指定の方が合理的なのでしょう.

それぞれのデバイスにどういうデバイス番号が(公式に)与えられているかは 
MOUE さんも指摘されているように /usr/src/linux/Documentation/devices.txt 
に記載されています.

> ちなみに私は、
> alias eth<数> <モジュール名(ne2k-pciとか)>
> でランカードが使えるようになる。
> ぐらいしか知りません。

実は Linux のネットワークデバイス(ethX)というのは,ちょっと例外的なデ
バイスなんですよね.

本来の UNIX の考え方では,全てのデバイスは上記のように /dev/ 以下のデ
バイスファイルを経由して利用するのが行儀のいいやりかたなので すが,
Linux の場合,過去の実装上の都合からネットワーク用のデバイスは /dev 以
下のデバイスファイルではなく,カーネルが直接利用するデバイスとして定義
されているため,ethN というデバイスは /dev 以下にありませんし,メジャー
/マイナー番号も割りあてられておらず,alias char-XXX みたいな形では指定
できないわけです.

# このヘン,個人的には 0.99 当時の(ad hoc な)実装に由来する盲腸みたい
# な部分だと思っているんだけど,いつの間にか TCP スタックの実装とかも
# このヘンを使った完全に独自の実装になってしまっているから,変更するわ
# けにはいかないんだろうなぁ..

まぁ,このヘンは Red Hat あたりのディストリビューションなら完全に裏に
隠してしまっているので一般ユーザが気にしなくて済むのですが,Plamo の場
合,そこまで親切ではないもので,,(苦笑)

------
こじま

References
[plamo:16470] modules.confについて。, FumimasaKojima
[plamo:16479] Re: modules.confについて。, MOUE Kiyoshi

[検索ページ] [メール一覧]
Plamo ML 公開システム