ふと、SL-C860に、SL-C3x00/1000用のD01NXドライバを入れて、カードを挿したときの挙動を見てみた。
デバッグを有効にしたカーネルを作って、SL-C860に焼き込み、syslogを起動しておいて、カーネルのログを出力させてみたところ、
usb.c: registered new driver hub
hub.c: usb_hub_thread exiting
usb.c: deregistering driver hub
ds: instance is NULL
というログが得られた。
dsのログは、自分で追加したもの。カードサービスの登録に失敗する理由を探るために入れていたもので、ドライバのインスタンスがないから登録できないよ、ということ。
しかし、ドライバは2.4.20用なのだけれど、SL-C860のカーネルはバージョンの違いなどおかまいなしにロードしようとしている様子。これは、SDカードドライバがプロプライエタリなので、それを読み込ませるための細工なのかしら。(確か、標準ではGPLドライバしかロードしなかったような)
ここで思った。hub.cがエラーを返している、ということは、usbcoreに互換性の問題があるからではなかろうか、と。となれば、usbcoreを2.4.20用のものからバックポーとしてしまえば、いいんじゃないかしら?と。
でも、先ほどのログは、usbcoreがロードされていなかったために起こったのかもしれない、と思った。
試しに、usbcore をmodprobeしておいてからカードを挿したときのログは、
usb.c: registered new driver hub
ds: instance is NULL
となっていた。少なくとも、hub.c: usb_hub_thread exiting のエラーはなくなった。
いや実際は、先にエラーが出て消えているだけかもしれないけれど。
もう少し詳しく見るには、usbcore にデバッグログを仕込むことかな?
ちなみに、カードを取り出したあと、lsmod をしてみると、usbcoreは消えていた。vmb_usbにつられて削除されたらしい。