試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Gentoo Linuxにおけるグラフィカルな起動画面とuvesafbについて(Linux 2.6.23以降)

起動時にグラフィカルな起動画面を表示するための仕組みは幾つかあるのだが、Gentoo Linuxでは、その中で、fbsplashというものが比較的簡単に使える。
fbsplashは、Linuxカーネルフレームバッファバイス(グラフィックデバイスを抽象化したデバイス)と、その上で動作する端末「fbcon」を使用する。更に、その上で、fbcon上でグラフィカルな(画像などの)表示を行うことができるようにする「fbcondecor」とスプラッシュ実装の「splashutils」が使用される。
カーネルフレームバッファには、グラフィックボードごとのドライバが用意されているが、これらを使用する必要はなく、「uvesafb」という汎用ドライバを使用することを推奨。

カーネルパッチについて

fbconは標準カーネルに含まれるが、fbcondecorとuvesafbは、Linux 2.6.23の時点では独自のパッチのため、

のパッチをダウンロードして、カーネルソースに当てる。
Gentoo LinuxPortageツリーに存在する、バージョン2.6.23以降の「gentoo-sources」には、上記パッチが含まれている。更に、uvesafbについては
[引用] uvesafbの本家ページより

(uvesafb) is scheduled for inclusion into the 2.6.24 mainline kernel.

という話もあるようだ。
(2008/1/29)実際に、(kernel.orgの)Linux 2.6.24からは標準でuvesafbが含まれている。

カーネル設定

Device Drivers  --->
 Graphics support  --->
  <*> Support for frame buffer devices                            [CONFIG_FB]
  [ ] Enable Tile Blitting Support                   [CONFIG_FB_TILEBLITTING]
  <*> Userspace VESA VGA graphics support                   [CONFIG_FB_UVESA]
  Console display driver support  --->
   <*> Framebuffer Console support               [CONFIG_FRAMEBUFFER_CONSOLE]
   [*] Support for the Framebuffer Console Decorations  [CONFIG_FB_CON_DECOR]

「CONFIG_FB_TILEBLITTING」は外し、他は組み込みにする必要がある点に注意*1
vesafb(CONFIG_FB_VESA)や、ビデオモード選択(CONFIG_VIDEO_SELECT)は使用しない。x86(32bit)専用の拡張版vesafb「vesafb-tng」は廃止され、x86アーキテクチャに依存しない「uvesafb」となった(x86_64上で動作していることを確認)。
上の設定に加え、スプラッシュのsilentモード(進行状況バーとアイコンが表示されて、メッセージは表示されない)からverboseモード(メッセージが表示される)へ切り替えることができるようにするため

Device Drivers  --->
 Input device support  --->
  <*> Event interface  [CONFIG_INPUT_EVDEV]

上の設定もしておくとよい(カーネル組み込みにする)。

カーネルビルドとuvesafbの準備の流れ

パッチの当たった状態で、/usr/src/linuxの中で上の設定を行う。

# make HOSTCXX="ccache g++" CC="ccache gcc" (menuconfig もしくは gconfig もしくは xconfig)

次に、カーネルビルドをする。事情により、モジュールのインストールには進まない。

# make HOSTCXX="ccache g++" CC="ccache gcc"

新しいカーネルに合わせたCライブラリ「klibc」をビルドする。これは、uvesafb(が使用するv86d)とsplashutilsから使用される。
(2008/5/20)バージョン1.5系からのebuildでは使用しているカーネルのソースは使用されないため、ここでビルドする必要はない。

# emerge -av klibc

uvesafbが使用するユーザ空間ヘルパーである「v86d」*2と、スプラッシュ表示に使用する「splashutils」をビルドし、インストール。
splashutilsのバージョンは、1.5系を使用する。/etc/portage/package.keywordsの指定もしておく。

# emerge -av v86d splashutils

ここで、x86dをカーネルに組み込むために

General setup  --->
 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support  [CONFIG_BLK_DEV_INITRD]
 (/usr/share/v86d/initramfs) Initramfs source file(s)              [CONFIG_INITRAMFS_SOURCE]

カーネルの設定を再び実行し、上の項目を設定して

# make HOSTCXX="ccache g++" CC="ccache gcc" (menuconfig もしくは gconfig もしくは xconfig)

ビルドからインストールまでを行う。

# make HOSTCXX="ccache g++" CC="ccache gcc"
(/lib/modules/ 以下に同一バージョンのカーネルのモジュールが残っていればこの時点で削除)
# make HOSTCXX="ccache g++" CC="ccache gcc" modules_install
# make HOSTCXX="ccache g++" CC="ccache gcc" install

(2008/1/29)参考として、/usr/share/v86d/initramfsには、組み込みinitramfsのファイル一覧が下のように書かれている(バージョン0.1.3現在)。

dir /dev 0755 0 0
nod /dev/console 0600 0 0 c 5 1
nod /dev/tty1 0600 0 0 c 4 1
nod /dev/zero 0600 0 0 c 1 5
nod /dev/mem 0600 0 0 c 1 1
dir /root 0700 0 0
dir /sbin 0755 0 0
file /sbin/v86d /sbin/v86d 0755 0 0

fbcondecorの自動起動登録

一度だけ行う。登録解除は「add」の代わりに「del」。

# rc-update add fbcondecor boot

fbsplashのテーマから初期RAMディスクイメージ(initrd)を作成

まず、fbsplash用のテーマファイルが無い場合は入れておく。

# emerge -av splash-themes-livecd

splash_geninitramfsコマンドで、使用する画面解像度に合わせてinitrdファイルを作成する。-rオプションで画面解像度を指定しないと、initrdファイルが無駄に大きくなってしまう。下は「livecd-2007.0」というテーマの1280x1024のみを使用する例。

# splash_geninitramfs livecd-2007.0 -r 1280x1024 -g /boot/initrd-splash.gz -v

ブートローダgrubの設定例

などは環境によって変える。

ファイル名: /boot/grub/menu.lst

timeout 5
default 0
fallback 1

title Gentoo Linux
root (hd0,4)
kernel /vmlinuz quiet root=/dev/hda6 video=uvesafb:1280x1024-32,mtrr:3,ywrap splash=silent,theme:livecd-2007.0 console=tty1
initrd /initrd-splash.gz
boot

title Power Off
halt

その他メモ

  • fbcondecorの設定ファイルは/etc/conf.d/fbcondecor
  • splashutilsの設定ファイルは/etc/conf.d/splash
  • fbsplashテーマは/etc/splash/以下にテーマ名のディレクトリが置かれる形で配置される

参考URL:

関連記事:

使用したバージョン:

  • gentoo-sources-2.6.23
  • x86d 0.1_rc5
  • splashutils 1.5.2.1

*1:モジュールにしてよいものもあるが、起動スプラッシュを表示するには組み込みにしたほうがよい

*2:ebuildの説明部分には「A daemon to run x86 code in an emulated environment.」とある