4. kerneld がロードする対象のモジュールを認識する方法

kerneld は、たいていのモジュールタイプをあらかじめ認識できるように 作成されていますが、状況によっては、kernel からのリクエストを どう処理してよいか分からないということもあります。これは CD-ROM ドライバやネットワークドライバの場合に見られる症状です。ロード 可能なモジュールが複数存在しているのです。

kerneld デーモンがカーネルから受け取るリクエストは、 次のうちのどれかに該当します。

kerneld は、設定ファイル /etc/conf.modules を スキャンしてどのモジュールをロードすべきか決定します [1] 。このファイルには 2 種類の項目があります。ひとつはモジュールファイルが 置かれている場所へのパスであり、もうひとつは特定のサービスに対して ロードすべきモジュールを割り振っているエイリアスです。この設定ファイルが まだシステム上にない場合は、次のコマンドで作成することができます。

  /sbin/modprobe -c | grep -v '^path' /etc/conf.modules

デフォルトの path 設定に加えて、さらに別の path 設定を追加したい場合、 その際は、必ずデフォルトの全 path も一緒に設定してください/etc/conf.modules 内に path 設定があると、 modprobe がデフォルトで認識していたすべての path が書き換えられてしまうからです。

ただ、もともと通常必要とされる設定はなされているはずなので、それを いじって、わざわざpath を追加したいとは思わないでしょう。

上記とは異なり、alias や option の設定を追加するだけの場合、 /etc/conf.modules に対して新規に書き込まれた 設定は modprobe の既知の設定に追加されます。 alias や option を定義し直した場合、 /etc/conf.modules の新規の設定は、 もとの設定を上書きします。

4.1. ブロックデバイス

/sbin/modprobe -c を実行すると、カーネルが認識 している全モジュールと、そのモジュールに対するリスエスト名との 一覧が表示されます。たとえば、フロッピードライバをロードするための リクエストは、メジャー番号(major number) 2 を持つブロックデバイス に対するリクエストとなります。

  osiris:~ $ /sbin/modprobe -c | grep floppy
  alias block-major-2 floppy

この場合、なぜ block-major-2 という名称に なるのでしょうか? 理由は、/dev/fd* という フロッピーデバイスがメジャーデバイス番号 2 を使うブロックデバイス だからです。

  osiris:~ $ ls -l /dev/fd0 /dev/fd1
  brw-rw-rw-   1 root     root       2,   0 Mar  3  1995 /dev/fd0
  brw-r--r--   1 root     root       2,   1 Mar  3  1995 /dev/fd1

4.2. キャラクタデバイス

キャラクタデバイスの場合も上記と同じような処理になります。たとえば、 ftape フロッピーテープドライバは、メジャーデバイス番号が 27 番となって います。この番号は次のようにして確認できます。

  osiris:~ $ ls -lL /dev/ftape 
  crw-rw----   1 root     disk      27,   0 Jul 18  1994 /dev/ftape

ただ、kerneld は、初期設定のままでは ftape ドライバを認識しません。 /sbin/modprobe -c で出力されるリストには 載っていないからです。それゆえ、kerneld を設定して ftape ドライバ をロードするようにさせるには、kerneld の設定ファイルである /etc/conf.modules に次の一行を追加する 必要があります。

  alias char-major-27 ftape

4.3. ネットワークデバイス

char-major-xxxblock-major-yyy で設定するのではなく、デバイス名を使うことも可能です。 これが便利なのは、ネットワークドライバを使う場合です。たとえば、 eth0 で ne2000 ネットワークカードを使う場合、 次の行を付け加えます。

  alias eth0 ne

ドライバにオプションを渡す必要がある場合、たとえば、その カードが使用する IRQ をモジュールに指定する場合などは、 "options" という行を追加します。

  options ne irq=5

この設定により、kerneld は以下のコマンドを使って NE2000 ドライバを ロードします。

  /sbin/modprobe ne irq=5

もちろん、実際に使うオプションは、ロードするモジュールに合わせて 設定してください。

4.4. バイナリフォーマット

バイナリフォーマットも同様に扱われます。プログラムを実行しようとして、 そのプログラムをロードする方法をカーネルが認識できない場合はいつも、 kerneld に binfmt-xxx という リクエストが送られます。ここで xxx の部分にはある 数字が入りますが、これは実行ファイルの最初の数バイトを見て決定 されます。それゆえ、たとえば、ZMAGIC の binfmt_aout モジュール ( a.out バイナリのモジュール) をロードできるよう kerneld を設定する場合、 以下のようになります。

  alias binfmt-267 binfmt_aout

ZMAGIC ファイルのマジック番号は 267 なので、/etc/magic をチェックすれば、0413 という数字が記載されているのが 分かると思います。kerneld は 10 進数を使いますが、/etc/magic では 8 進数が使われているので、8 進数 413 = 10 進数 267 であることに注意してください。実際の a.out 実行 ファイルには、(NMAGIC、QMAGIC、ZMAGIC という) 3 種類の若干異なる 形式が存在しているので、binfmt_aout モジュールを完全にサポート するには以下のような設定が必要です。

  alias binfmt-264 binfmt_aout  # pure executable (NMAGIC)
  alias binfmt-267 binfmt_aout  # demand-paged executable (ZMAGIC)
  alias binfmt-204 binfmt_aout  # demand-paged executable (QMAGIC)

ただ、a.out、Java、iBCS のバイナリフォーマットは、特に設定 せずとも、kerneld に自動的に認識されるようになっています。

4.5. ライン制御 (slip, cslip, ppp)

ライン制御は、tty-ldisc-x という 書式でリクエストされます。ここで x には、通常 SLIP 用 の 1 か、PPP 用の 3 が入ります。特に設定をせずとも、kerneld はどちらも 自動で認識します。

ppp を使う場合、kerneld に ppp 用のデータ圧縮モジュールである bsd_comp をロードさせたいときは、以下の 2 行を /etc/conf.modules に追加してください。

  alias tty-ldisc-3 bsd_comp
  alias ppp0 bsd_comp

4.6. ネットワークプロトコルファミリ (IPX, AppleTalk, AX.25)

ネットワークプロトコルのなかにもモジュールとしてロードできる ものがあります。カーネルが kerneld に対してプロトコルファミリ をリクエストする際は、net-pf-X というリクエストを送ります。ここで X には、必要とするプロトコルファミリを示す数字が入ります。 たとえば、net-pf-3 というリクエストは AX.25 を、 net-pf-4 は IPX を、net-pf-5 は、AppleTalk を表しています。これらの数字は、Linux ソースの include/linux/socket.h ファイルにある AF_AX25 や AF_IPX 等の定義に基づいて決定されています。

  alias net-pf-4 ipx

起動時に未定義プロトコルファミリに関するメッセージが表示される のを抑制する方法については、FAQ に詳しい情報を記載しています。

4.7. ファイルシステム

ファイルシステムに関する kerneld リクエストには、そのファイル システムタイプの名称だけを使います。よくある例としては、CD-ROM のファイルシステム用に isofs モジュールをロードする場合があります。 すなわち、ファイルシステムタイプとして iso9660 を使う場合です。 その際の設定方法は以下のようになります。

  alias iso9660 isofs

Notes

[1]

ディストリビューションのなかには、この設定ファイルを modules.conf としているところもあります。