bootsplash

Seed環境にbootsplashをセットアップしてみる。まず、initrdを作るために、カーネルパラメータにvga=0x305とかつけて、フレームバッファを有効にしてブート。menu.lstはこんな感じ。

title VineSeed (Current kernel)
    root (hd0,8)
    kernel /boot/vmlinuz ro root=/dev/hda9 splash=silent vga=0x305
    initrd /boot/initrd.img
    savedefault 0

この時点ではまだinitrd.imgにbootsplashが含まれていないので、ただフレームバッファで立ち上がるだけ。
立ち上がったらmkinitrd。

# mv /boot/initrd-2.6.16-0vl37.img /boot/initrd-2.6.16-0vl37.img.ori
# /sbin/mkinitrd -v /boot/initrd-2.6.16-0vl37.img 2.6.16-0vl37
Creating initramfs
Looking for deps of module ide-disk
Looking for deps of module ext3
Using modules:
/sbin/nash -> /tmp/initrd.ZU2961/bin/nash
/sbin/insmod.static -> /tmp/initrd.ZU2961/bin/insmod
Adding bootsplash image into initramfs.

ふむ、bootsplashが入ったっぽい。/boot/initrd.imgは/boot/initrd-2.6.16-0vl37.imgへのシンボリックリンクなので、このままリブートすればbootsplashになるはず…だがならなかった。
"Welcome to Vine Linux"の直前に/etc/rc.d/rc.sysinitから/sbin/splash.shを呼んで、そこからbootsplashになるはずなのだが…

# assertions
test -r /proc/splash || exit 0

この時点でなぜか/proc/splashがないので、/sbin/splash.shがbootsplashを立ち上げずに終了してしまう。ということらしい。だめじゃん。
なぜ/proc/splashが存在しないのかは不明。rc.sysinitの中では/procをマウントしているのは/sbin/splash.shを呼ぶより後なのだが、ブート後に見ても/proc/splashなんてファイルはないので、マウントが後とか先とかいう問題ではない模様。
というわけで、よくわからんので今日は挫折。

640x480で動いたが

vga=0x311(640x480, True Color)なら表示できた。どうもPseudocolorではダメな気配。あとでそのへん、ドキュメントを読んでみよう。
ところでsplash=silentにしているのにsilentにならない。なんでかなと思ってdmesg見てると、以下のようなメッセージが。

vesafb: framebuffer at 0xe8000000, mapped to 0xd0880000, using 832k, total 832k
vesafb: mode is 640x480x16, linelength=1280, pages=0
vesafb: protected mode interface info at 00ff:44f0
vesafb: scrolling: redraw
vesafb: Truecolor: size=0:5:6:5, shift=0:11:5:0
bootsplash 3.1.6-2004/03/31: looking for picture...<6> silentjpeg size 17037 bytes,<6> does not fit into framebuffer.
...found (640x480, 16720 bytes, v3).
Console: switching to colour frame buffer device 78x25
fb0: VESA VGA frame buffer device

なんでdoes not fitなのか不明。今日はここまでで時間切れ。