mikanos
mikanos copied to clipboard
USBドライバが動かない環境について報告
まだ全くと行っていいほど情報が集まってないのですが、USBドライバが動かない環境があるようです(本だとday06cのところで確認)
環境1ではhttps://github.com/uchan-nos/mikanos/blob/37029cba7c66d3cc9f27db435c3c7ac4738145f9/kernel/usb/xhci/xhci.cpp#L138
環境2ではhttps://github.com/uchan-nos/mikanos/blob/37029cba7c66d3cc9f27db435c3c7ac4738145f9/kernel/usb/xhci/xhci.cpp#L248
にてエラーが起きています。
そうですね、動かない機種はあると思います。 いくつかの機種でしか動作確認できていませんので。
実機で動かない系のバグのデバッグは手元に実機が必要ですから、私はそれらの機種への対応作業はできません。 HonokaNo さんがデバッグをして、MikanOS を修正していただけるのでしたら、とっても嬉しいです。
この Issue を、HonokaNo さんのデバッグ作業の記録用にお使いいただいても良いですが、 クローズせずに残しておきましょうか? (クローズせずにおいておけば、もしかしたら協力者が現れるかもしれません)
すみません、お願いします。 もう少し情報集めて、目指せ実機動作!
もしかしたら無線マウスだと無線用で別ドライバが必要かもしれない 無線用の別クラス(って言い方でいいんだっけ)があるらしい。
@HonokaNo 手元の Bluetooth ドングル LBT-UAN05C2/N のデバイスクラスは 0xE0 でした。 https://usb.org/defined-class-codes#anchor_BaseClassE0h
明らかに HID ではないので、この場合は専用のクラスドライバが必要ですね。
デバイスディスクリプタ(USBView で取得)
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0200
bDeviceClass: 0xE0 -> This is a Wireless Controller(Bluetooth) Device
bDeviceSubClass: 0x01
*!*ERROR: bDeviceSubClass of 1 is invalid
bDeviceProtocol: 0x01
bMaxPacketSize0: 0x40 = (64) Bytes
idVendor: 0x0A12 = Cambridge Silicon Radio Ltd.
idProduct: 0x0001
bcdDevice: 0x8891
iManufacturer: 0x00
iProduct: 0x02
String Descriptor for index 2 not available while device is in low power state.
iSerialNumber: 0x00
bNumConfigurations: 0x01
一応無線通信は関係ありませんでした。申し訳ない。
どうやら、DeviceManager::AllocDeviceで、devices_[slot_id]がnullptrになっているのが原因っぽいです Deviceクラスのコンストラクタに原因がありそう?
そもそもAllocArrayすらうまくいってない 原因の箇所が絞れてきた。
とりあえずバッファを拡張してAllocArrayはうまくいったっぽい。 次の問題としてOnEvent(https://github.com/uchan-nos/mikanos/blob/37029cba7c66d3cc9f27db435c3c7ac4738145f9/kernel/usb/xhci/xhci.cpp#L194) のswitch文で ConfigPhase::WaitingAddressed,ConfigPhase::EnablingSlotが 渡されているからdefaultでエラーが出ているみたい。 もうちょっとlinuxのUSBドライバの解析とか 理解を進めなくちゃいけない
同じ問題に陥って解決したので記録として残しておきます。
私の環境では、 @HonokaNo さんがすでに挙げられているように、 https://github.com/uchan-nos/mikanos/blob/b5f7740c04002e67a95af16a5c6e073b664bf3f5/kernel/usb/memory.hpp#L13 の値を4096*32から4096*128に変更して、バッファを拡張することで解決しました。
一方で、USBデバイスによって動作したりしなかったりする現象が見られました。
動作が確認できたデバイスとして、 ・TK-FCM104 (キーボード) ・BSMBU04M (マウス)
逆に、動作しなかったデバイスとして、 ・M500S (高機能なマウス) ・ノートPC内蔵キーボード ・ノートPC内蔵マウス
となりました。使用したノートPCの型番は ILeNXi-15FX064-i7_-RFSXB です。
USBViewやデバイスマネージャーを使ってデバイスの確認したところ、 ・M500SはUSBデバイスクラスが0x00(USB Composite Device)で、マウスとキーボードが一体ということになっている? ・ノートPC内蔵のものはPS/2デバイス扱い(マウスはUSBデバイスとしても認識されていたように見えたが、実態は謎)
ということがわかりました。 そのため、USBデバイスに注意する(単純な構造のデバイスなら使えるかも?)か、XHCIのドライバを改造するなどの対応をすれば動作すると考えられます。
大雑把な調査の記録となりましたが、お役に立てば幸いです。