喜愛用 console mode 的朋友有福了, 最近在朋友那裡看到他將 linux 的 console 畫面弄得漂漂亮亮的, 可放背景圖, 不禁手癢起來, 因此產生了本篇。
首先得知道要那些準備動作。如果是 SuSE Linux 7.2 以上的話, 本身就已經有加進去了, 其他的 Linux 好像都還沒有, 所以要自己 patch kernel 是免不了的。另外要將 initrd 和 frame buffer 的支援編入核心中, 在 debian 中當然還要將 cramfs 編入核心(為了使用 initrd), 注意 bootsplash 目前只支援 16 bit frame buffer 的模式。而且小弟試過, 好像只能用 vesa 模式的 frame buffer, 如果用小弟的 Matrox G200 的 matroxfb 則無法正常顯示。
到 http://www.bootsplash.org 下載需要的核心 patch 連結:
或直接到 SuSE 的 ftp 抓
ftp://ftp.suse.com/pub/people/stepan/bootsplash/kernel/
patch 核心:
cd /usr/src/your_kernel_tree
for 2.4.23
bzip2 -dc /path/to/bootsplash-3.0.7-2.4.23.diff.bz2 | patch -p1
for 2.6.0-test9 以上
patch -p0 < /path/to/bootsplash-3.1.3-2.6.0-test9.diff
在編譯核心選項時, 2.4 的核心要打開以下選項: (要編入核心, 不能用 module 的方式)
Block devices --->
<*> RAM disk support # initrd 選項
(4096) Default RAM disk size
[*] Initial RAM disk (initrd) support
File systems --->
<*> Compressed ROM file system support # debian 的 initrd 要用到
Console drivers ---> Frame-buffer support --->
[*] VGA text console
[*] Video mode selection support
[*] Support for frame buffer devices (EXPERIMENTAL) # frame buffer 選項
<*> VESA VGA graphics console
[*] Use splash screen instead of boot logo # bootsplash 選項
在編譯核心選項時, 2.6 的核心要打開以下選項: (要編入核心, 不能用 module 的方式)
Device Drivers ---> Block devices --->
<*> RAM disk support # initrd 選項
(4096) Default RAM disk size
[*] Initial RAM disk (initrd) support
Device Drivers ---> Graphics support --->
[*] Support for frame buffer devices
[*] VESA VGA graphics support
Bootsplash configuration --->
[*] Bootup splash screen # bootsplash 選項
File systems ---> Miscellaneous filesystems --->
<*> Compressed ROM file system support # debian 的 initrd 要用到
在編譯核心的同時, 可一邊製作所需要的 initrd, 請下載:
ftp://ftp.suse.com/pub/people/stepan/bo ... .7.tar.bz2
解開編譯好後安裝可得到以下工具, 複製到 /usr/local/bin 下即可:
spalsh: 可用來將圖檔加入 initrd 中, 或在系統已啟動時, 修改背景圖。還可以在到達指定的runlevel 時, 觸發某個指令的執行(用來秀出開機時的動畫)
fbresolution: 顯示目前的解析度。
fbmngplay: 用 libmng 在 framebuffer console 下秀出 mng 動畫檔的工具。
fbtruetype: 在 framebuffer console 下採用 truetype 字型來顯示文字的工具。
使用 ATI rage128 的朋友如果發現顏色不對, 需要再做另一個 patch
ftp://ftp.suse.com/pub/people/stepan/bo ... plash.diff
下載預先製做好的 theme:
http://www.bootsplash.org/themes.html
以 Linux theme 為範例:
wget -c ftp://ftp.suse.com/pub/people/stepan/bo ... ux.tar.bz2
tar jxvf /path/to/Theme-Linux.tar.bz2
splash -s -f Linux/config/bootsplash-1024x768.cfg > initrd.img-bootsplash
即產生一個 initrd.img-bootsplash
mv initrd.img-bootsplash /boot
以下表為 lilo or grub 中加入 vga=xxx 的參數值(其值為 vesa 模式 + 0x200)
| 640x480 800x600 1024x768 1280x1024
----+-------------------------------------
256 | 0x301 0x303 0x305 0x307 -> 8 bit
32k | 0x310 0x313 0x316 0x319 -> 15 bit
64k | 0x311 0x314 0x317 0x31A -> 16 bit
16M | 0x312 0x315 0x318 0x31B -> 24 bit
編譯好核心後, 在開機管理員中加入開機參數:
lilo: (注意, 較舊版的 lilo 沒有支援 16 進制的 0x317 的數值, 請改用 10 進制 791)
vga=0x317(or vga=791) -> 1024x768 16bit
append="ramdisk_size=8192 splash=silent"
image=/vmlinuz
initrd=/boot/initrd.img-bootsplash
label = Linux
grub:
kernel /vmlinuz root=/dev/hda2 ro ramdisk_size=8192 vga=0x317 splash=silent
initrd /boot/initrd.img-bootsplash
由於 Linux theme 的圖檔為 1024x768 所以 vga= 選 0x317, 請依照圖檔大小來選擇。
bootsplash 有二種模式, 一是和原來模式一樣, 開機時會跑出許多的開機文字訊息, 背後有半
透明的底圖, 為 verbose 模式(預設值)。
二為 silent 模式, 開機時有一張全螢幕的圖(或動畫), 看不到開機的文字訊息。
可在 lilo 或 grub 中設定 splash=silent 即可
還可以在進入系統後, 手動修改背景的圖片。
splash -s -u 0 Linux/config/bootsplash-1024x768.cfg
-u 0 為第一個虛擬終端機(tty1), 其他的終端機自行修改。
另外有一點要注要的是, 如果原來就有使用 debian 的 initrd, 那麼 bootsplash 就不會動作了, 因為 debian 的 initrd 有做 cramfs 的 patch, 而 bootsplash 好像不支援, 無法從 initrd.img 中取得圖檔。
如果以上的 theme 都不合你意, 當然也可自己 DIY 了, 請參考:
http://www.bootsplash.org/themeinfo.html
如果 bootsplash 有成功的動起來, 會在 /proc 產生一個檔案, 直接 cat 即可得到目前的狀況。
各位可能會覺得, 為什麼那個使用 silent 模式時, 底下的那個開機進度都沒有增加, 那是因為需要動到起動的 script 去顯示目前開機進度, 而 bootsplash-3.0.7.tar.bz2 中只有附 SuSE 專用的 script, 搞了半天, 實在搞不出來, 所以只好放棄, 不過這樣子的畫面小弟就很滿意了。