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

Re: TDK 96M CF doesn't work?



 > はじめまして、あおやまと申します。

はじめまして。

 > しばらくディスクレス環境で遊んでいたのですが、TDK の Compact Flash を
 > 入手したので、出来立ての 1.5_ALPHA snapshot (2000-06-20版)をインストー
 > ルしようとしたところブート途中でデバッガに落ちてしまいました。

まずカードを 1 枚ずつさして、どちらが問題なのか確かめて
下さい。

次に、pbsdboot の options のテキストボックスに -d を指定して
起動し、すぐにデバッガに落ちたところで以下のようにデバッグ
フラグを設定して起動してみてください。なにか有用な情報が
得られるかも知れません。

db> w pcmcia_debug 1
db> w pcmciacis_debug 1
db> c

デバッガの出力を見ると、ne_pcmcia_match() という関数から
呼んだ strcmp() で NULL をアクセスしたようです。おそらく
strcmp() の 2 つの引数のうちどちらかに NULL が指定されたのです。
ne_pcmcia_match()は ne2000 ドライバが、カードを利用可能どうか、
カード名の文字列比較などで調べる部分です。
sys/dev/pcmcia/if_ne_pcmcia.c の ne_pcmcia_match() および
ne2000_match() というマクロ定義を見てみて下さい。

#define ne2000_match(card, fct, n) \
((((((card)->manufacturer != PCMCIA_VENDOR_INVALID) && \
    ((card)->manufacturer == ne2000devs[(n)].manufacturer) && \
    ((card)->product != PCMCIA_PRODUCT_INVALID) && \
    ((card)->product == ne2000devs[(n)].product)) || \
   ((ne2000devs[(n)].cis_info[0]) && (ne2000devs[(n)].cis_info[1]) && \
    (strcmp((card)->cis1_info[0], ne2000devs[(n)].cis_info[0]) == 0) && \
    (strcmp((card)->cis1_info[1], ne2000devs[(n)].cis_info[1]) == 0))) && \
                             ↑このへんが怪しい?

 > どこが怪しいのかヒントを頂ければ幸いです。

私は dumpcis をみてすぐにどこが怪しいのかわかりませんが、
カーネルのソースコードに printf を入れて再コンパイルすれば
色々な情報が表示できますので、それで調べていってはどうで
しょうか。
症状がかなりはっきりしているので、普通のアプリケーション
プログラムのデバッグと比べてもそれほど難しくないと思います。

症状を聞いた限りでは放置できるバグではないので、ぜひ
調べてみて下さい。

Takemura