USBディスプレイを使う anchor.png

DisplayLink社は,USBグラフィックアダブタを開発・販売していて,結構多くのUSB接続型ディスプレイ製品に組み込まれている。
センチュリー社のLCD-8000が,このアダプタが組み込まれているかは確証はないですが,おそらくそうだと思います。

そこで,DisplayLink社のアダプタをRaspberry Pi3とかで使用できるようにする方法です。

DisplayLinkのUSBグラフィックアダプタは,最近のRaspbianのカーネルでは最初からモジュールとしてビルドされているようだ。
古いRaspbianのカーネルでは,無効の状態でビルドされているのでそのままでは使用できない。

もしUSBディスプレイを指してカーネルがデバイスを認識しない場合は,RaspbianのカーネルをUSBグラフィックアダプタを有効にして,ビルドし直す必要がある。
この場合は,以下のカーネルをUSBディスプレイを有効にしてビルドする必要がある。
認識していれば,カーネルのビルドする必要はない。

Page Top

カーネルをビルドする場合 anchor.png

Page Top

カーネルのクロスコンパイル環境を用意する anchor.png

Raspberry Pi3とかでセルフビルドすると時間が結構掛かるので,クロス・コンパイルをしてみる。
試しに,Windows10のWSLでのUbuntu 18.0.4上でクロスコンパイルしてみた。

WSLのUbuntuにログイン後,ビルドに必要ないろいろなツールをインストールする。

$ sudo apt install build-essential libncurses5-dev device-tree-compiler trace-cmd git bc gperf bison flex libtool autoconf automake

使わないものも入れておいた。

ARMプロセッサー用のToolchainをインストールする。

$ sudo apt install gcc-arm-linux-gnueabihf
Page Top

Raspbianで使用されているカーネルのソースコードを取得して,カーネルビルドするための設定を行う anchor.png

まず,Raspbianのカーネルソースを取得します。

$ mkdir rpi
$ cd rpi
$ git clone --depth=1 https://github.com/raspberrypi/linux -b rpi-4.9.y

標準のRaspberry Pi3の設定を.configにコピーして,設定メニューを表示してビルド・オプションを編集する。

$ cd linux
$ KERNEL=kernel7
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

設定メニューが表示されたら,

  • Device Driversを選んでリターンを押す
  • Graphics Supportを選択する
  • Support for Framebuffer supportを選択する
  • Displaylink USB Framebuffer supportを選択して,スペースキーで有効化(M)する
    Mで,モジュール化するように設定している。
  • Escキーを数回押して,最後に設定状態をファイルに保存して終了する

設定ファイルは,.configファイルに保存される。

Page Top

カーネルをビルドする anchor.png

カーネルをビルドする。

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

結構時間がかかる。

ビルドが正常に終了すると,arch/arm/boot/zImage(カーネルのイメージファイル)やカーネルモジュールが作成される。

$ ls arch/arm/boot/
Image  Makefile  bootp  compressed  dts  install.sh  zImage;

以下のスクリプトで,カーネルなどが含んだtarボールを作成する。

set -x
export KERNEL_RELEASE=`cat include/config/kernel.release`
export INSTALL_MOD_PATH=../$KERNEL_RELEASE
mkdir -p ../$KERNEL_RELEASE/boot/overlays
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  modules_install
scripts/mkknlimg arch/arm/boot/zImage ../$KERNEL_RELEASE/boot/kernel.img
cp arch/arm/boot/dts/*.dtb ../$KERNEL_RELEASE/boot/
cp arch/arm/boot/dts/overlays/*.dtbo ../$KERNEL_RELEASE/boot/overlays/
cd ..
tar cvjf $KERNEL_RELEASE.tar.bz2 $KERNEL_RELEASE/

上のディレクトリに,4.xx.yy.tar.bz2ファイルが出来る。

Page Top

Raspberry Piに作成したファイルを移す anchor.png

Raspberry Piに作成したファイルをコピーする。

$ scp 4.xx.yy.tar.bz2 xxxxxx@yyyyy.zzzzz:/home/yuji

のようにしてファイルをコピーする。(どんなやり方でもOK)

Raspberry Piにログインして,現在使用しているカーネル・イメージをバックアップしておく。

# cp /boot/kernel7.img /boot/kernel7-backup.img

カーネルモジュールをインストールする。

# tar xvzf 4.xx.yy.tar.bz2
# modules_install 

デバイスツリーオーバーレイのインストール

# cp arch/arm/boot/dts/overlays/*.dtbo /boot/overlays/
# cp arch/arm/boot/dts/overlays/README /boot/overlays/

カーネルのインストール

# cp arch/arm/boot/zImage /boot/kernel7.img

Raspberry Pi3を再起動する。

# reboot
Page Top

USBディスプレイの確認と設定 anchor.png

Raspberry Piが起動したら,次のようにしてUSBディスプレイ(DisplayLink社のアダプタ)を認識しているか確認する。

# dmesg | grep DisplayLink
xxxxxxxxxxxxxxxxx

たぶん,Manufacturer: DisplayLink とか表示されていれば認識している。

USBディスプレイのデバイスファイルは,/dev/fb1になると思う。/dev/f0は,HDMIディスプレイ。
このデバイスに対して表示するようにすればいいと思う。
X WindowでこのUSBディスプレイに表示するには,/usr/share/X11/xorg.conf.d/60-plugable.confファイルを以下のように作成する。

Section "Device"
  Identifier "displaylink" 
  driver "fbdev" 
  Option "fbdev" "/dev/fb1" 
  Option "ShadowFB" "off"
EndSection 
Section "Monitor" 
  Identifier "monitor" 
EndSection
Section "Screen"
  Identifier "screen"
  Device "displaylink"
  Monitor "monitor"
EndSection

Section "ServerLayout" 
  Identifier "default" 
  Screen 0 "screen" 0 0
EndSection

この後,startxしたりリブートしたりすれば,USBディスプレイに画面が表示される。


新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 164, today: 3, yesterday: 0
最終更新: 2023-05-02 (火) 11:45:35 (JST) (357d) by yuji