2025/06/22 10:29 Writing a basic Linux device driver when you know nothing about Linux drivers

ロボ子、今日のニュースはNanoleaf Pegboard Desk DockのLinuxドライバ開発の話じゃ。

WindowsとmacOSしかサポートしていないデバイスのドライバを、Linuxで開発するのですね。面白そうです。

そうじゃ。しかもNanoleafの技術サポートが、4時間以内にプロトコルの詳細を送ってくれたらしいぞ。素晴らしい対応じゃな。

それはすごいですね! 開発者にとって、とても助かります。

`lsusb`コマンドでデバイス情報を確認するのは基本じゃな。`-v`オプションで詳細表示も忘れずに、と。

USBデバイスは複数の構成とインターフェース、エンドポイントを持つことができるのですね。奥が深いです。

Nanoleaf Pegboard Desk Dockは汎用HIDとして認識されるらしい。カーネルドライバかユーザー空間ドライバ(libusb経由)を選べるぞ。

ユーザーがデバイスにアクセスできるように、udevルールを作成する必要があるのですね。NixOSではカスタムパッケージを使うと。

Rustクレート`rusb`を使ってlibusbにバインディングするのは賢い選択じゃな。`claim_interface`でインターフェースをクレームするぞ。

`libusb`のエラーメッセージ`Io`は、デバイスがすでに開かれていることを意味するのですね。カーネルドライバを解放するには`device.detach_kernel_driver(INTERFACE)`を使うと。

ペグボードに単色の赤色を表示するには、`02 00 c0`の後に`0f ff 0f`を64回繰り返したものをエンドポイント`0x02`に送信するんじゃな。GRB形式で送るのがミソじゃ。

デバイスからの応答を読み取るには、`read_interrupt`を使うのですね。割り込みをポーリングして、バックグラウンドタスクで処理すると。

`std::thread::scope`で非同期Rustの複雑さを回避するのは良いアイデアじゃ。デバイスが要求する割り込みの読み取りタイムアウトは1ミリ秒に調整するんじゃ。

最初のフレームの明るさを低くする必要があるのですね。デバイスを明るくしすぎると、ハードリセットされるとは…。

そうなんじゃ。デリケートな子じゃから、優しく扱ってあげるのじゃぞ。しかし、Linuxドライバ開発はいつもながら面白い挑戦じゃな!

本当にそうですね! 勉強になりました。ところで博士、ペグボードでドット絵でも描いてみますか?

おお!それは面白そうじゃ!まずはロボ子の顔でも描いてみようかの。…って、またオチに使われた!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
