基於bootsplash的嵌入式linux啟動畫面定製
摘 要:在基於linux的嵌入式模擬平臺研發中,利用開源工具bootsplash能夠定製啟動logo、設定控制檯背景和顯隱啟動時的字元資訊,甚至能夠支援開機進度條的動畫顯示。本文介紹利用bootsplash打造啟動畫面的解決方案,涉及核心補丁、使用者空間配置等方面的具體工作。
關鍵字:嵌入式; 啟動;模擬環境
在基於linux的嵌入式模擬平臺研發中,終端的美觀和可定製是個重要的問題。開機時滾動在螢幕上的字串和單調的penguin圖示,使嵌入式裝置仍然脫離不了pc的痕跡,linux控制檯上單調的“白紙黑字”型表現方式可謂大煞風景。改造linux控制檯使之美觀可定製地展示開機資訊和logo成為基於嵌入式linux應用的一項重要工作。
開源專案bootsplash(
http://www.bootsplash.org/
)為解決這個問題提供了一個完美的解決方案。Boot-
splash通過對核心打補丁來改變linux framebuffer控制檯對影像顯示的支援。通過使用者空間程式來定製啟動logo、設定控制檯背景和顯隱啟動時的字元資訊,甚至能夠支援開機畫面的動畫顯示。本文介紹利用splashboot打造啟動畫面的解決方案,涉及核心補丁、使用者空間配置等方面的具體工作。
1 核心補丁和控制工具
1.1 支援bootsplash的核心補丁
針對不同的核心版本,bootsplash站點上給出了相應的核心補丁。我們所使用的核心版本為2.4.23,下載並給核心打上補丁:
cd /usr/src/linux
make mrproper
patch -Np1 -i ../bootsplash-3.0.7-2.4.23.diff
重新編譯核心:
make menuconfig
選上如下的幾個引數:
Code maturity level options —>
Prompt for development and/or incomplete code/drivers
Block devices —> RAM disk support
Block devices —> Initial RAM disk (initrd) support
Console drivers —> Video mode selection support
Console drivers —> Frame-buffer support —>
Support for frame buffer devices
VESA VGA graphics console
Use splash screen instead of boot logo
然後編譯核心:
make dep && make bzImage
再把生成的核心拷貝到/boot下:
cp arch/i386/boot/bzImage /boot/linux-bootsplash
這樣我們得到的新核心bzImage就是支援bootsplash的核心了,剩下的工作就是對bootsplash的定製了。
1.2 安裝使用者空間程式
下載bootsplash工具,解壓安裝:
tar ?zxf bootsplash-3.0.7.tar.gz
cd bootsplash-3.0.7/Utilities
make
cp fbresolution fbmngplay fbtruetype splash /sbin/
這樣完成了對使用者空間工具的安裝,其實bootsplash分別利用如下的四個程式:splash程式是將需要在framebuffer下顯示的圖片資源製作成啟動ram盤的工具;fbmngplay讀mng文件,播放動畫;fbtruetype顯示truetype字型;fbresolution檢查解析度。後面提到的指令碼,只是以不同引數來讀取配置文件,呼叫上面的這幾個程式。
2 開機LOGO的定製
2.1 配置splash螢幕的主題
前面安裝好的splash使用者空間程式中有一個程式splash,他需要一個配置文件來指明使用哪個圖片、要不要隱藏文字資訊的輸出等。能夠看出“theme”就是splash工具需要的配置文件、圖片和其他所需要的文件的集合。有很多已準備好的theme可供挑選,我們也能夠定製theme。為了方便起見,我們下載theme-Linux.tar.bz2並以他為theme。
建立目錄/etc/bootsplash/themes,解壓Theme- Linux.tar.bz2到這個目錄下,現在的目錄結構應該是:
/etc/bootsplash/themes/Linux
讀者朋友能夠看看該目錄下的bootsplash-1024×768.cfg來觀察配置文件的格式。這個簡單的文件包含的選項不多,事實上他只是清楚地表明應該顯示哪幅圖片、控制檯顯示文字的顏色和背景色連同文字資訊輸出的位置區域。另外,不要忘了他還能夠分別指定verbose和silent模式下顯示文件的位置。Silent模式禁止顯示啟動資訊,代之以一個可選的進度條(這需要關於A外包指令碼的更多配置)。基於這個配置文件,您能夠自己修改以顯示自己喜歡的圖片和採用自己喜歡的模式。
2.2 利用splash小工具安裝splash主題到initrd
在系統啟動的早期階段,核心還不能讀寫硬碟。這個階段要顯示圖片,那麼圖片放在什麼地方那?答案是把圖片寫到ramdisk裡,這樣在啟動的時候才能讀到,因為這時候還沒有載入分割槽呢。當然不用擔心initrd的製作,splash小工具能輕鬆搞定。Splash小工具能根據基於您選擇的配置文件(theme)來自動產生一個initrd。所要做的就是執行如下命令:
splash -s -f /etc/bootsplash/themes/arch/config /arch-1024-boot.cfg /boot/initrd.splash
生成的initrd.splash就是個新的initrd。在GRUB或LILO中加入他就能夠了。
按如下的方法修改GRUB或LILO:
在GRUB中加入或修改下面的行:
kernel (hd0,3)/boot/vmlinuz−2.4.21−melenas root=/dev/hda4 vga=791 splash=silent
initrd (hd0,3)/boot/initrd.splash
在LILO中加入或修改下面的行:
vga=791
initrd=/boot/initrd.splash
append=”splash=silent”
來看看這幾行的意義:
vga=791: boot splash 將在1024×768 解析度和65000 色 (16 位色)下顯示。Framebuffer的設定要根據我們所使用的theme的解析度和顏色深度來選擇。
splash=silent: 在silent模式下顯示boot splash. 假如您希望用vebose模式,只需刪除此行即可。Verbose模式是預設模式。
initrd=/boot/initrd.splash: 這行將initrd.splash調入啟動ram盤(圖片存於其中)。
更新LILO或GRUB後,就能夠看到精美的啟動畫面。
3 啟動進度條的顯示
首先我們要弄清楚小工具程式progress(他是和splash程式一起拷到/sbin目錄下的)。progress能夠在framebuffer 裝置(預設情況下是/dev/fb0)上畫四邊形。不帶任何引數執行progress,我們能夠看到該程式的可選引數列表,我們感興趣的幾個引數是:
x: 四邊形起始點的x座標
y: 四邊形起始點的y座標
dx: 四邊形的寬度
dy: 四邊形的高度
color: 四邊形的顏色。這是個16進位制數,於web頁上表示顏色的一致。
舉例說明之:
progress 0 0 512 384 FFFFFF
將會在螢幕左上角畫一個白色的四邊形,這個四邊形佔據四分之一螢幕。
progress 256 192 521 384 FCD192
將會在螢幕正中間位置畫一個黃色的四邊形。
看這些例子的效果應該在tty終端上執行,不要在Konsole 或xterm window上看效果。
搞清楚progress的用法後,我們來看怎麼把他和系統啟動聯絡起來。通過分析Debian的啟動程式碼,我們能夠看出:他的啟動指令碼在每次啟動完一個服務程式(xfs, cron, samba 或其他服務程式)後使用progress程式來在指定位置畫指定大小的四邊形。在Debian中啟動指令碼有兩個:先執行/etc/init.d/rcS然後執行 /etc/init.d/rc。下面研究一下/etc/init.d/rcS程式碼,注意這個指令碼一次呼叫各個rulevel下的指令碼。我們在其中加入畫四邊形的程式碼,加入的程式碼用加黑表示:
# 初始化變數j
# j 為進度條的寬度
j=20
for i in /etc/rcS.d/S??*
do
[ ! −f “$i” ] &continue
# 進度條開始
#
# 確保進度條寬度不超出範圍
if ((j /tmp/boots
mv /tmp/boots /etc/init.d/rc
chmod 755 /etc/init.d/rc
上面的程式碼很清楚,獲得j的值,在第二個指令碼文件rc中尋找字串“danger_var=…”並把他修改為 “danger_var=結束時的j值”,把修改後的文件另存為/tmp/boots,然後重新命名為/etc/init.d/rc並改變執行許可權。
假如選用danger_var作為變數名來傳遞位置值,那麼注意在其他啟動指令碼中不能出現名字衝突。
現在,重啟電腦,能夠享受美麗的開機進度條了。
4 結論
通過開源專案bootsplash提供的核心補丁和各種使用者空間工具,能夠實現對FrameBuffer下的控制檯美化和定製。這對於嵌入式模擬環境平臺的研發有著重要的意義,使得嵌入式模擬環境平臺從一定程度上減少PC的痕跡,成為個性化和高度可定製的平臺。
參考文獻:
[1] Dennis Herbrich,Arch Linux BootSplash-HowTo. http://www.archlinux.org
[2] Pedro Jurado Maqueda, BULMA: Graphic boot with bootsplash and progress bar in Debian. http://bulma.net/
[3] 輕鬆拿下Bootsplash. http://www.linuxsir.org/bbs/
相關文章
- SpringBoot彩蛋之定製啟動畫面Spring Boot動畫
- 製作基於debian的linux live啟動u盤(UEFI)Linux
- 嵌入式Linux中的LED驅動控制(基於misc)Linux
- win10如何設定藍色畫面後自動重啟_win10藍色畫面後自動重啟的設定步驟Win10
- 基於canvas的骨骼動畫Canvas動畫
- Win10 2004怎麼設定藍色畫面自動重啟_Win10 2004電腦藍色畫面自動重啟設定Win10
- linux設定開機啟動Linux
- Spring Boot定製啟動圖案Spring Boot
- Linux 上製作多啟動 U 盤Linux
- Spark UI (基於Yarn) 分析與定製SparkUIYarn
- 嵌入式linux系統的開發——基於JFSS2檔案系統的分割槽及映象製作Linux
- 在Linux下製作Linux&windows啟動盤LinuxWindows
- 定製多系統啟動選單
- windows10系統怎麼設定藍色畫面後不自動重啟Windows
- 基於 Canvas 的 HTML5 文字動畫特效CanvasHTML動畫特效
- 製作Linux系統SD啟動卡Linux
- Linux U盤啟動盤製作工具Linux
- 一款可定製的波紋進度(waveProgress)動畫動畫
- JPWaveAnimation(一句程式碼呼叫的可定製的波浪動畫)動畫
- Activity 的 "啟動流程"(基於 Android 9.0)Android
- 基於react-transition-group的react過渡動畫React動畫
- 嵌入式系統開發:基於Linux學習筆記整理Linux筆記
- canvas繪製動畫的技巧Canvas動畫
- 基於Html對父頁面開啟子頁面Dialog()的使用HTML
- Linux配置JavaEE環境 Linux中安裝JDK、Tomcat、mysql 設定Tomcat自啟動、設定mysql自啟動LinuxJavaJDKTomcatMySql
- win10自動重啟藍色畫面怎麼辦_win10藍色畫面自動重啟解決方法Win10
- win10如何更改啟動頁面_win10要怎樣修改開機啟動畫面Win10動畫
- Linux伺服器---設定服務啟動Linux伺服器
- CustomTkinter:基於Tkinter的現代且可定製的Python UI庫PythonUI
- Yoshino: 一個基於React的可定製化的PC元件庫React元件
- java實現Excel定製匯出(基於POI的工具類)JavaExcel
- 基於 HTML5 Canvas 實現的文字動畫特效HTMLCanvas動畫特效
- 動畫函式的繪製及自定義動畫函式動畫函式
- linux設定開機自啟動指令碼的最佳方式Linux指令碼
- 關於linux的一點好奇心(一):linux啟動過程Linux
- 使用 ConstraintLayout 製作漂亮的動畫AI動畫
- 基於 Linux 的智慧手機 Librem 5 開啟預售LinuxREM
- Laravel/Lumen 動態匹配所有 (任意) 路由 - 基於資料庫 / 快取定製路由Laravel路由資料庫快取