2013年8月15日木曜日

FreeBSD on RaspberryPi で Xorg をビルドする

何かと結構時間かかりましたが、ようやくFreeBSD on RaspberryPi で Xorg が動作しました。やっぱりなんだかんだいっても、グラフィカルな表示をみるとうれしくなりますよね。もっとも、派手なウインドウマネジャが入ってるわけじゃないので、ひたすら地味ですが・・。

xorg のビルドに当たってのハマりどころは、前回の記事の webcamd のビルド でのハマりどころに、更にいくつか追加されるような感じになります。

まずは、手順から。

1: Xorg のビルドインストール

# cd /usr/ports/x11/xorg
# make config-recursive

オプション設定の注意ですが、RPI で使用するビデオドライバは別途入れることになりますので、xorg-drivers のビデオドライバは全部チェックを外すことをおすすめします。多分チェックすると新たなハマりどころが増えるだけかと思います。
あと、libiconv の patches オプションはオンにしておいた方がいいでしょう。
それ以外は基本的になるべく必要ではない設定は組み込まない、もしくはデフォルトで、を心がければそれほどハマらないですむのではないかと思います。

オプション設定が完了したら、次のコマンドを実行することで、xorg 及び依存関係にある ports 全てが自動的にビルドインストールされます。
尚、現時点でデフォルトでビルドされる xorg-server のバージョンは 1.7.7 ですが、WITH_NEW_XORG=yes を make.conf に指定することで xorg-server のバージョンが 1.10.6 になり、それに伴い関連するドライバーなどもバージョンアップした状態でビルドをすることができます。しかし、現時点ではこのオプションを指定した状態ではコンパイルが通らないため、使用は避けた方がよいでしょう。

# make install clean

もし、問題が発生したら、2: の回避方法を試してみて、問題の発生した ports が無事にインストール完了したら、

# cd /usr/ports/x11/xorg
# make install clean

で xorg のビルドを再開してください。

2: 問題が起きた場合の解決方法

多分、しばらくすると、エラーで落ちます。というか、落ちましたよね ?

x11/pixman や devel/glib20 のエラーについては、webcamd のビルドに書いてありますので、そちらを参照してください。ここでは残りのエラーの回避方法を書きます。

(1) x11-fonts/fontconfig

これは結構いやらしくて、デフォルトで make すると、make 自体は問題なく終了するのですが、インストール時に fc-cache が実行されると Segmentation fault (core dumped) を起こすというものです。そして、実際にエラーで止まるのは fontconfig ではなく、font 系の他の ports です。わたしの場合は font-misc-misc でした。そのため発生したら、一旦 fontconfig を deinstall して、入れ直す必要があります。

回避方法: 一旦インストール済みの fontconfig を deinstall し、make 時に、USE_GCC=4.2 を指定して再インストールします

# cd /usr/ports/x11-fonts/fontconfig
# make deinstall
# rm -rf work
# make USE_GCC=4.2 install clean

(2) x11-servers/xorg-server

これが恐らく、一番の山で、デフォルトの状態では決してビルドが通りません。なぜかというと、対応するビデオドライバがないからです・・。

エラーメッセージ:

Making all in fb
gmake[3]: Entering directory `/usr/ports/x11-servers/xorg-server/work/xorg-server-1.7.7/fb'
  CC    fb24_32.o
In file included from fb24_32.c:30:
./fb.h:102:2: error: "GLYPHPADBYTES must be 4"
#error "GLYPHPADBYTES must be 4"
 ^
1 error generated.
gmake[3]: *** [libfb_la-fb24_32.lo] Error 1
gmake[3]: Leaving directory `/usr/ports/x11-servers/xorg-server/work/xorg-server-1.7.7/fb'
gmake[2]: *** [all-recursive] Error 1
gmake[2]: Leaving directory `/usr/ports/x11-servers/xorg-server/work/xorg-server-1.7.7'
*** Error code 1

Stop.
make[1]: stopped in /usr/ports/x11-servers/xorg-server
*** Error code 1

Stop.
make: stopped in /usr/ports/x11-servers/xorg-server

回避方法: しかし、実は、この問題は Ray 氏によって既に解決されていてxorg-server の patch 及び、RPI 向けの移植版ビデオドライバが公開されています。そのため、それを使用すれば問題なく xorg-server をビルドして動作させることができます。

まず、準備として、x11-servers-xorg-server-master.zipx11-drivers-xf86-video-scfb-master.zip を任意の場所にダウンロードします。以下のコマンドはファイルをダウンロードしてビルドインストールするまでになります。

# fetch --no-verify-peer https://github.com/rayddteam/x11-servers-xorg-server/archive/master.zip
# unzip master.zip
# cd x11-servers-xorg-server-master
# cp -rf * /usr/ports/x11-servers/xorg-server/
# rm master.zip

# fetch --no-verify-peer https://github.com/rayddteam/xf86-video-scfb/archive/master.zip
# unzip master.zip
# cd x11-drivers-xf86-video-scfb-master
# cp -rf x11-drivers-xf86-video-scfb-master /usr/ports/x11-drivers/xf86-video-scfb/
# rm master.zip

# cd /usr/ports/x11-servers/xorg-server/
# make install clean

# cd /usr/ports/x11-drivers/xf86-video-scfb/
# make install clean

3: xorg.conf について

xorg が無事最後までインストールできたら、いよいよ xorg の起動の準備になります。
通常であれば、Xorg -configure で設定ファイルを作成するのですが、なんと、RPI ではこれがうまく動作しません・・。困ったものです。
しかし、xorg-server の patch を書かれた Ray 氏が、記事に設定例も書いてくれていますので、これをそのまま使わせていただくことにします。

以下の設定を全て、/etc/X11/xorg.conf にコピペして保存します。


Section "Files"
EndSection

Section "Module"
    Load        "dbe"
    Disable    "dri"
    Disable    "dri2"
    Disable    "glx"
    SubSection  "extmod"
        Option  "omit xfree86-dga"
    EndSubSection
EndSection

Section "ServerFlags"
    Option    "AIGLX"        "false"
    Option    "NoAccel"    "True"
    Option    "NoDRI"        "True"
    Option    "DRI"        "False"
    Option    "DRI2"        "False"
EndSection

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "kbd"
EndSection

Section "InputDevice"
    Identifier  "Mouse1"
    Driver      "mouse"
    Option      "Protocol"      "auto"
    Option      "Device"        "/dev/sysmouse"
EndSection

Section "Monitor"
    Identifier  "Monitor"
    Mode "1024x600"
        DotClock        25.175
        HTimings        1024 1048 1148 1200
        VTimings        600 610 620 700
    EndMode
EndSection

Section "Device"
    Identifier  "Generic FB"
    Driver      "scfb"
    Option    "NoAccel"    "True"
EndSection

Section "Screen"
    Identifier  "Screen"
    Device      "Generic FB"
    Monitor     "Monitor"
    DefaultDepth 16
    SubSection "Display"
        Depth           16
        Modes           "1024x600"
    EndSubsection
EndSection

Section "ServerLayout"
    Identifier  "layout"
    Screen      0 "Screen" 0 0
    InputDevice "Mouse1" "CorePointer"
    InputDevice "Keyboard1" "CoreKeyboard"
EndSection

わくわく、startx する前に、/etc/rc.conf に 設定を追加するのを忘れないようにしましょう。

# echo 'dbus_enable="YES"' >> /etc/rc.conf
# echo 'hald_enable="YES"' >> /etc/rc.conf

dbus と hald を手動で起動します。

# /usr/local/etc/rc.d/dbus start
# /usr/local/etc/rc.d/hald start

ようやく、準備が整いました。うまく動くといいですね~!

% startx

0 件のコメント:

コメントを投稿