Raspberry Pi用ベアメタルUSBデバイスドライバ「csud」の調査(3)

前回の続きです。
以前にリストアップした中でちょっと触れていたcsudの64bit対応の派生版について、もう少し詳しく調べてみました。

下記のリポジトリにはコンパイル済みのバイナリがあり、マウスとキーボードの値が画面表示されます。

USB peripherals in bare metal? – Raspberry Pi Forums

Raspberry-Pi/Arm32_64_USB at master · LdB-ECM/Raspberry-Pi

以前調べたときはこのバイナリをそのまま動かして動作を確認しただけでした。
今回は、この中身を調べて、シリアルポートにキーコードを出力するサンプルを作ってみました。

このドライバは、完全に新規なドライバというわけではなく、csudを書き直して

・RPi2 / RPi3(32bit) / RPi3(64bit) 対応
・主なファイルを1つだけに

したもののようです。

実際、内部を見ると関数や全体の構造はかなり似ています。
一方で、csudのコードがそのまま残っているわけでもなく、大幅に整理されています。
csudでは個別のファイルに分かれていたUSBハブやHIDデバイスのためのコードも含まれています。
主なコードは「rpi-USB.[ch]」だけで、合わせて4300行足らずです。

csudよりもさらに行数は減っていますが、そのためか、USBキーボードなど個々のデバイスのサポート用関数などは減っています。

csudで作った、押されたキーのキーコードをシリアルポートに書き出すプログラムをrpi-USBで書き直したものを下記に置いておきます。

bare_matal_rpi_zero/usb_kbd2 at master · boochow/bare_matal_rpi_zero

Raspberry Pi Zero Wで動かす際にcsudにあった不具合は、そのまま引き継がれているようで、キーボードはUSBハブ経由で接続する必要があります。

コメント