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

[pbsd-mg2] Re: conf.c



conf.cとMAKEDEVの話です。

Takao Shinohara <shin@sm.sony.co.jp> writes:
> etc/etc.hpcmips/MAKEDEVはi386用のものが入っているため、これを使ってデバ
> イスファイルを作ると当然動作しません。カーネルのソースでは、メジャー番号
> はpmaxと基本的には同じになっているので、pmax用をベースに修正する必要があ
> ります。make distributionでdisklessのルートファイルシステムを作成したと
> ころ、全然動かなくてしばらく悩みました。

先日上記のように書いたとおり、現在のCVSのソースではカーネルのconf.cと
MAKEDEVは一致していません。したがって、普通の方法(cd etc; make
distribution)でバイナリキットを作成すると、出来上がったバイナリの/dev/の
下のデバイスファイルのメジャー番号はカーネルと異なるものができます。当然
ですが、そのままでは動作しません。

カーネルのioconf.cを変えてメジャー番号が変わる場合は、
etc/etc.hpcmips/MAKEDEVも同期して変更しなければなりません。また、バイナ
リキット(というか、動作するマシンのルートファイルシステム上のデバイスファ
イル)も同期して変更されなければなりません。

バイナリ互換性の問題ですので、変更手順を間違えると立ち上がらないシステム
が出来上がったりして、復旧に苦労したりします。

幸い(?)NetBSD/hpcmipsでは、ホストマシン上でファイルシステムやカーネルを
作り、それを使ってターゲットマシンがブートするので、間違えたときでも直す
のが簡単で気が楽ですが。

* * * * *

釈迦に説法だとは思いますが、念の為にデバイスファイルとカーネルの関係につ
いて説明しておきます。

[デバイスファイル]

ファイルシステム上の名前(/dev/console等)とメジャー番号を対応付けるための
特別なファイルです。名前とメジャー番号との対応関係はMAKEDEVによってデバ
イスファイルが作成される際に決定されます。

[メジャー番号]

カーネルはデバイスファイル名がなんであろうと気にせず、デバイスファイルの
メジャー番号のみを用いてデバイスファイルとデバイスドライバの対応関係を決
めます。メジャー番号とデバイスドライバの対応関係を決定しているのがカーネ
ルのソースのioconf.cです。



対応づけの流れとしては以下のようになります。

	デバイスファイル名
		|.............. MAKEDEVで対応関係が決定される
		v
	メジャー番号
		|.............. ioconf.cで対応関係が決定される
		v
	デバイスドライバ

したがって、デバイスファイルが目的のデバイスドライバと対応付けられるため
には、この対応関係に矛盾があってはいけません。ioconf.cとMAKEDEVが同期し
て変更されなければならないと書いたのはこういうことです。

篠原