Linux起動画面のカスタマイズ

1. ペンギンの差し替え

Linuxカーネル起動直後に表示されるおなじみのペンギンの絵を差し替える方法をメモ。きちんと作法に則ってコンフィグメニューに選択肢を追加するなら下記URLに詳しく書いてある。ここでは、ちょっと横着してペンギンの絵を置き換えてやる。くだんのペンギンの絵は、カーネルソースの drivers/video/logo/logo_linux_clut224.ppm だ。

(参考URL) http://www.si-linux.co.jp/wiki/silinux/index.php?%A5%AB%A1%BC%A5%CD%A5%EB%B5%AF%C6%B0%A5%ED%A5%B4%A4%CE%CA%D1%B9%B9

(1) ペンギンにかわる画像を用意する。べつに全画面サイズでも可。

(2) その画像を ppm形式に変換する。GIMPとかirfanviewとかで。

(3) 224色に減色する。

ppmquant 224 hoge.ppm | pnmnoraw > logo_linux_clut224.ppm

(4) drivers/video/logo/logo_linux_clut224.ppm を置き換える。

(5) カーネルをビルドする。

2. psplash

psplashは、Angstrom/OpenEmbeddedなどで使われているスプラッシュ画面のプログラムで、初期化処理の進捗に合わせてプログレスバーがニョキニョキと伸びるやつだ。これの背景画像などを変更する方法をメモ。

(1) ソースの入手
OpenEmbeddedでビルドする場合の説明は割愛(というかよく知らない。)手動でビルドするなら下記URLからソースを拾ってくる。
http://downloads.yoctoproject.org/releases/psplash/

(2) 背景画像データをCヘッダファイルに変換
上記のtarボールを解凍したフォルダにあるスクリプトを使う。下記の例では、logo.pngからlogo-img.hが出来る。これで、psplash-hand-img.hを置き換える。ちなみに、背景画像のサイズが画面サイズより小さい場合は、中央に配置されるようになる。

./make-image-header.sh logo.png HAND

(3) プログレスバーの枠画像をCヘッダファイルに変換
同様にして、下記を実行して出来たbar-img.hで、psplash-bar-img.hを置き換える。

./make-image-header.sh bar.png BAR

(4) 背景色、プログレスバーの色を変更
RGB値が、psplash.c に直値で書かれているので、適宜変更する。

(5) ビルド
ARMボード用にビルドするなら例によって下記のように。(もちろん、arm-none-linux-gnueabiなgccがあること前提です。)

./configure --host=arm-none-linux-gnueabi --prefix=/usr
make

できた psplash とpsplash-write を、ターゲットの /usr/bin/ に置く。

(6) 初期化スクリプトでpsplashを使用
Angstromであれば、/etc/inittabで指定されている/etc/init.d/rcが初期化スクリプトの根っこで、ここでpsplash-writeを使ってプログレスバーを進めている。psplash自体の起動は、/etc/init.d/psplash でしている。他のシステムの起動スクリプトでpsplashを使うために、ごく簡単な使い方を示す。

# psplashの起動 (2分でタイムアウトして終了)
export TMPDIR=/mnt/.psplash
mount tmpfs -t tmpfs $TMPDIR -o,size=40k
/usr/bin/psplash &
(sleep 120; psplash-write "QUIT") &
# プログレスバーを10%進める
pcnt=0
...(中略)...
pcnt=$($pcnt+10)
psplash-write "PROGRESS $pcnt"