はじめに
筆者は Ultra96/Ultra96-V2(ZynqMP) 向けに Debian GNU/Linux を提供しています1。提供している Debian GNU/Linux は CUI ベースですが、今回 GUI に対応するために X Window Systemを Ultra96/Ultra96-V2 で動くようにしました。
そこで Ultra96/Ultra96-V2 で X Window System を動かすための手順を幾つかのパートに分けて説明します。
- 概要編
- Video Driver 編
- Mali Driver 編
- LibMali 編
- fbdev 編(この記事)
- glmark2 編
この記事では fbdev(Linux Framebuffer Device) を使って X Window System を構成する場合を説明します。
fbdev(Linux Framebuffer Device) とは
fbdev(Linux Framebuffer Device) はグラフィックカードの違いを吸収し、同じ手段でグラフィックカードへのアクセス方法をソフトウェアに提供する抽象レイヤーです。アプリケーションは fbdev を利用することで特定のグラフィックカードに依存することなく、画面の描画を行うことが出来ます。
一般的にコンソールで利用されることが多い仕組みです。
この時、グラフィックカード側の処理を担当するカーネルモジュールが fbdev ドライバーです。ZynqMP の場合はxlnx_drv が DRM(Direct Rendering Manager) と同時に fbdev も提供します。
fbdev は今のようなモダンなユーザーインターフェースが登場する前の仕組みです。fbdev には 3D アクセラレーションを扱う仕組みがなく、今時のデスクトップ環境には不向きな仕組みです。
X Window System Graphics Stack with fbdev
X Window System には fbdev を使ってレンダリングするためのビデオドライバー(xserver-xorg-video-fbdev) が標準で提供されています。このビデオドライバーを使えば、fbdev さえあれば X Window System を構成できます。ZynqMP の場合はxlnx_drv が fbdev を提供しているので、性能を考えなければ、xserver-xorg-video-fbdev を使って比較的簡単に X Window System を構成できます。
Fig.1 X Window System Graphics Stack with fbdev
xorg.conf の設定
/etc/X11/xorg.conf の Device セクションの Driver プロパティに fbdev を指定する必要があります。
Section "Device"
Identifier "ZynqMP"
Driver "fbdev"
Option "DEBUG" "true"
EndSection
Section "Screen"
Identifier "DefaultScreen"
Device "ZynqMP"
EndSection
fbdev の問題点
このように簡単に利用できる fbdev ですが、X Window System から使う場合、困った点があります。それは、 fbdev が比較的古い仕組みなためか、最近のディスプレイを接続しときに正常に映らない場合があることです。
筆者の場合、普段 PC に繋いでいるごくごく普通のディスプレイに HDMI で繋いだ時は正常に映ったのですが、1024x600 のモバイルディスプレイだと接続するだけでは映らず、試行錯誤して /etc/X11/xorg.conf に色々と書き足さないと映りませんでした。
モダンな環境で動作させたい場合は、fbdev を使わずに xlnx_drv に対応したビデオドライバーを使った方が良いでしょう。ビデオドライバーを使った場合の詳細は、以下の記事を参考にしてください。