ディスカッション (8件)
本記事は、ソフトウェアエンジニアを対象とした、ユーザースペースでUSBドライバを実装するための実践的な入門ガイドです。カーネル開発の複雑な迷宮に潜り込むことなく、libusbなどを使用してデバイスを制御する方法について、その基礎概念を分かりやすく解説しています。ハードウェア制御を自分の武器にしたい開発者にとって、最初の一歩に最適な内容です。
これって、USBドライバがアプリケーションコードでもあるって前提だよね?ドライバっていうよりライブラリ+プログラムって感じ。例えばUSB-LANアダプタがあるとして、どうやってこれをイーサネットアダプタのサブシステムに組み込むの?
このC++、めちゃくちゃだな。矢印が打てるキーボードなんて見たことないよ。
「USBデバイスを渡されて、そのドライバを書けと言われたとする」……。そいつを突き返して、OSが最初から仮想COMポートとして認識するデバイスじゃ実現できないって証拠を見せろって言うべきだね。
もしGoでこれをやりたいなら、cgoを使わずに済むライブラリを書いたからチェックしてみて:https://github.com/kevmo314/go-usb 。これを使って、同じようにcgoなしでUVCデバイスにアクセスしてるよ:https://github.com/kevmo314/go-uvc
タイミング最高。数日中に近くのGuitar CenterからMOTU MIDI Express XTが届く予定なんだ(2週間前に届いてたけど、盗品じゃないか確認するための保留期間があった)。残念なことに、これってクラスコンプライアントなMIDI-over-USBじゃなくて変な独自プロトコルを使ってるから、PC(ほぼ全部LinuxとかOpenBSD、HaikuとかでWindows/macOSじゃない)からUSB経由で使うのは無理なんだよね。直近の用途ならPCを通さなくていいから大丈夫だけど、PC側も動くようになったら最高だ。既存のLinux用外部ドライバもあって期待できそうなんだけど、JACKとかで使うための最低限の機能しかなさそうだし、安定性もXT対応も微妙っぽい。専用アプリみたいにルーティングプリセットの作成もしたいし、カーネルに余計なドライバを入れたくないし、OpenBSDやHaikuでも使いたい。だからユーザー空間のUSBドライバでMIDIポートを公開して、ツールで制御するのが良さそうだと思ってLibUSBのドキュメントを読み漁ってたところ。この記事はまさにそういうユーザー空間ドライバの入門として探してたものだよ。
すごく役立つ入門記事だね!低レイヤーのハードウェアAPIを扱うのは大変だけど、やりがいがある。最近のOSの抽象化レイヤーのおかげで楽にはなってるけど、その中身を理解しておくのはめちゃくちゃ価値があるよ。
ずっと昔にシンプルなUSBデバイスを作ろうとしたとき、やり方の情報が全然なくて困ったよ。ディスクリプタの正しい書き方とかね。よくあるアドバイスは「作りたいものに似たデバイスを見つけて、そのディスクリプタをコピーしてトライ&エラーで調整しろ」だった。USBって素晴らしい標準規格だよね。……皮肉だけど、間違ってる?