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を導入します。
ここから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 - ArchWikiRPi Kernel Compilation - eLinux.org
Raspberry Pi でカーネルにaufsを組み込む - よもやま雑記帳
LCD-USB10XB-TをUbuntuで使う - PPE : Petit Panda Extreme
UbuntuでEmobileのD21LCを利用する - Blog.37to.net
0 件のコメント:
コメントを投稿