発想をかえてみよう。
今までは、2.6.38-rc4では修正されている、という情報を元に、kernelを新しくしようとしていた。
しかし、USBドライバさえ修正されるとよくなるのではないだろうか?
まずは、ここを見て、musb_platform_exit()を書き換えてみた。
書き換えたというか、idle timerのキャンセル処理を追加したようなことが書かれていると思い、2.6.38のソースを見て2.6.32に追加しただけ。
1行だけ。
。。。だめだった。USBがあると起動すらしない。
しかも、USB機器を外してもrebootするとpanicを起こしていた。
ならば、と、drivers/usb/musbをまるまる置き換えた。
そうすると、今度はrebootしてもすんなり!
しかし、USB機器を認識しない。。。
まあ、そうそう部品のようにはいかんということだ。
ん? musbはビルドすらされてないようだ。
そもそも、musbってなんだろう?
どうやら、Mentor Graphics社が開発したUSB実装のようだ。
USBコントローラがMentor Graphics社の場合に使うのかな。
sourceforgeでやるようになっているみたいだ。
musbのMakefileにも、こうある。
# for USB OTG silicon based on Mentor Graphics INVENTRA designs
INVENTRA、という単語は、menuconfigにも出てきていた。
・Inventra Highspeed Dual Role Controller (TI, ADI, ...) (USB_MUSB_HDRC)
・Inventra HDRC USB Peripheral (TI, ADI, ...) (USB_GADGET_MUSB_HDRC)
・Both host and peripheral: USB OTG (On The Go) Device (USB_MUSB_OTG)
今の.configで関係しているのはこのあたりだ。
しかし・・・やはりドライバだけを差し替えるというのは、無謀なようだ。
とりあえずわかったのは、musbがないとUSB機器を認識しないし、musbがなければrebootしてもpanicにならない、ということなのかな。
あら、ならば2.6.38でrebootしてもpanicにならなかったのは、単にそのせい?
make xconfigして、2.6.32と2.6.38を見比べると、「Inventra Highspeed Dual Role」のあたりがちょっと違った。
2.6.32は「OMAP 343x high speed USB support」となっている。
2.6.38は「Platform Glue Layer」となって、TUSB6010とかOMAP2430から選ぶようになっているのだ。
実装を見ると、2.6.38では間に1枚はさむようになっている。それがGlue Layerなのだろう。
musbだけ置き換える、というのはダメだな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。