2013年12月28日土曜日

Raspberry Pi に 小型USBモニタ (Mimo UM-740) を接続してみた

 Raspberry Pi に 小型のUSBモニタを接続してみました。今回使用したのは、Mimo UM-740 (といいう型番だったと思う)という Displayllink の USBグラフィックモニタです。例によって、使用目的は特にありません。使わなくなったUSBモニタが転がっていたので、遊びで試してみようと思っただけです。
 Windowsで使用していた時に、中身はDisplaylinkのUSBグラフィックチップなことはわかっていたため、ためしに、「Raspberry Pi」「Displaylink」で Google先生に問合せたところ、情報は既にたくさんありました。今回、参考にさせてもらったのは、こちらです。以下の内容は、参考にさせてもらったこちらの写しとなります。

 まず、カーネルコンパイルのための環境を用意します。自分は、Ubuntu 12の仮想環境を利用しました。

 Raspberry Pi 用のクロス開発環境をインストールします。

   sudo apt-get install git-core gcc-4.6-arm-linux-gnueabi
   sudo ln -s /usr/bin/arm-linux-gnueabi-gcc-4.6 /usr/bin/arm-linux-gnueabi-gcc

 Raspberry Pi のカーネルソースを落とします。

   mkdir raspisrc
   cd raspisrc
   git clone git://github.com/raspberrypi/linux.git

 標準configをコピーしてきて、menuconfig でDevice Driver を追加します。

   cd linux
   cp arch/arm/configs/bcmrpi_cutdown_defconfig .config
   make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- menuconfig

 メニュー画面で [Device Drivers --->] → [Graphics support --->] → [Support for frame buffer devices --->] と選んでいき、この中の[Displaylink USB Framebuffer support]を有効にして、あとは、ESCキーで戻っていき、最後の保存の問合せで[Yes]でConfigを保存します。

 カーネルをビルドします。

   make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k -j2

 エラーがなければ、arch/arm/boot 下に zImage ができています。続いてモジュール。

   mkdir ../modules
   make modules_install ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- INSTALL_MOD_PATH=../modules/

 エラーがなければ、 ../modules/にlibができています。

と、この辺までやったところで、もう一つ、日本語のサイトでこのようなサイトを見つけました。こちらは日本語ですし、丁寧に手順が画面キャプチャ入りで説明されているのでお勧めです。自分の途中の設定からはこちらを参考させて進めさせてもらいます。

 作成したカーネルとモジュールをパックしておきます。--- 以下、こちらのサイトの写しです ---

   mkdir udlfb_raspi
   cp arch/arm/boot/zImage udlfb_raspi/kernel.img
   cp -pr ../modules udlfb_raspi/
   tar cvzf udlfb_raspi.tgz udlfb_raspi

 ここで、現状動いているRaspberry Pi のバックアップを取ります。こちらのサイトではモジュールをコピーしていますが、今回はWin32 Disk Imager でSDカードのイメージを丸々バックアップしました。(こちらを参考)

 バックアップ後SDカードをRaspberry Piに戻して、起動し、ネットワーク越しにファイルコピー。

   scp udlfb_raspi.tgz pi@xxx.xxx.xxx.xxx:/home/pi     (xxx...はRaspberry Piのアドレス)

 ここからは、Raspberry Pi 側にsshログインして作業。

   tar xvzf udlfb_raspi.tgz
   sudo cp udlfb_raspi/kernel.img /boot/kernel.img
   sudo cp -pr udlfb_raspi/modules/lib/modules/3.10.24+ /lib/modules/
   sudo reboot

 まずは、再起動後に無事に起動することを確認。(USBモニタはまださしていない)

 つづいて、いよいよ、USBモニタを挿してみましたが、一瞬緑色に表示されるものの、すぐに画面が暗くなり、SSHログインも切断。・・・よく見ると、無線LANのドングルもチカチカしなくなっています。どうやら、USB給電不足の様子。このUSBモニタはかなり電気食いのようです。そこで、間にACアダプタ付き(セルフパワー)のUSBハブをかましてみたところ、緑色に発光。画面は表示されません。なにも参考なしでやっていたら、これでダメかと思ってしまうところですが、事前に先ほどの参考にさせてもらったサイトを見ていたので、これで正常動作であることは認識済み。
 設定ファイルを作成して、Xを起動する必要があるらしい。

   sudo vi /etc/X11/xorg.conf

で、xorg.conf ファイルを作成・編集します。configフィアルの中身の意味は、わかっていません、すみません。とりあえず、丸写し。そのうち勉強します・・・。

   Section "Device"
    Identifier "uga"
    driver "fbdev"
    Option "fbdev" "/dev/fb1"
    Option "ShadowFB" "off"
   EndSection
   
   Section "Monitor"
    Identifier "monitor"
   EndSection
   
   Section "Screen"
    Identifier "screen"
    Device "uga"
    Monitor "monitor"
   EndSection
   
   SEction "ServerLayout"
    Identifier "default"
    Screen 0 "screen" 0 0
   EndSection

で、Xを起動します。

   startx


 おおっ、映った。わーい。



 今回は、Google先生と先人の力に100%頼り切りでした。もうすこし、自分であれこれ試してみたほうがよかったかな・・・。でも、こういった情報を公開して頂けるのは本当にありがたいですね。感謝しつつ今回のトライは終了。