2013年11月4日月曜日

Raspberry Pi でDisplayLinkのudlfbドライバを使う

前回、RPiに接続したDisplayLinkコントローラ搭載のUSBモニタにlibdloライブラリを使って描画するテストをしてみました。今回はフレームバッファデバイスとして汎用的に使えるようにするため、udlfbドライバをインストールし、ロードできることを確認します。操作は下記のとおり。

1. udlfbドライバのインストール(カーネル再構築)


DisplayLinkをフレームバッファデバイスとして使うためのドライバとしてudlfbが必要です。ぐぐってみると、udlfbはPlugableのサイトでソース配布されていて、これをビルドすればOK、という記述もちらほら見つかるんですが、実はカーネルソースツリーのdrivers/gpu/drm/udlに(バージョン2.6.31以降?)入っていて、コンフィギュレーションしてビルドすればカーネルモジュールが生成されるようになっています。そこで今回は、udlfbのビルドを有効にしたうえでカーネルを再構築しインストールしてみます。
本当はeLinux.orgの記事にあるとおり、PCのlinuxマシンで作業したほうがビルドが早く済むんですが、今回はRPi上で作業しちゃってます。

まずはGitHubのレポジトリからカーネル取得。
使用中のカーネルのコンフィギュレーションをコピーしてきて、適用する。 次に、udlfbのドライバを有効にする。 下記のように進んで、Displaylink USB Framebuffer supportをモジュール選択します。依存するEnable Video Mode Handling Helpersも自動的に有効になります。 menuconfigの画面上では、下の画像の項目です。

SaveしてExitします。で、さっそくビルド。 RPi上でビルドしたせいもあり、たぶん10時間くらいかかったかな。
ビルドが終わったら、モジュールとカーネルをインストールして再起動します。

2.usb_modeswitchのインストール


今回使用しているLCD-USB10XB-Tは(もしかしたら他のDisplayLinkモニタも同様かもしれませんが)、コンピュータにUSB接続すると、初めにストレージデバイスとして認識されます。ストレージ内にはautorun.infが入っていて、Windows PCなどの場合、同梱のドライバインストーラを起動する仕組みになっています。ドライバがインストールされた後はストレージではなく、DisplayLinkモニタとして認識されるようになります。この仕組みはUSB接続のモデムなどでも見られることがあります。こうすることで、デバイスメーカーはドライバのCDを製品に添付せずに済むわけです。
Linuxマシンに接続した場合も、この仕組みのせいでストレージデバイスとして認識され、本来のDisplayLinkデバイスとしての使用を妨げてしまいます。 そこで、どのデバイスとして認識するかの切り替えができるusb_modeswitchを導入します。デスクトップのUbuntuではパッケージレポジトリに登録されているようですが、Raspbianではapt-getでインストールできなかったので、ソースからビルドします。#追記:Raspbianでも、ちゃんとapt-get updageすればレポジトリからインストールできるようです。ただしバージョンが古く(Version 1.2.3)今回の用途では正しく動作しないため、新しいVersion 2.0.1をソースビルドしてインストールする必要があります。
ここからusb_modeswitchのソースをダウンロードして、makeします。
バイナリのインストール。


3.udlfbドライバのロード


modprobeコマンドで、モジュールをロードします。 lsmodコマンドを打つと、モジュールがロードされていることを確認できます。 udlfb本体と同時に、依存するモジュールもロードされています。
最後に、インストールしたusb_modeswitchコマンドで切り替えを行います。あらかじめlsusbコマンドやdmesg等でDisplayLinkモニタのベンダIDとプロダクトIDを調べておく必要があります。 DisplayLinkというデバイスの17e9:0156がベンダIDとデバイスIDの対です。これをusb_modeswitchコマンドの-vパラメータと-pパラメータに指定して実行します。 成功すれば、DisplayLinkモニタの画面がクリーン一色になります。
udlfbはフレームバッファドライバなので、デバイスファイルfb1が増えていることも確認できます。


参考情報

DisplayLink - ArchWiki
RPi Kernel Compilation - eLinux.org
Raspberry Pi でカーネルにaufsを組み込む - よもやま雑記帳
LCD-USB10XB-TをUbuntuで使う - PPE : Petit Panda Extreme
UbuntuでEmobileのD21LCを利用する - Blog.37to.net

0 件のコメント:

コメントを投稿