歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

linux的嵌入式仿真平台啟動畫面定制攻略


   在基於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-1024x768.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 將在1024x768 分辨率和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

Copyright © Linux教程網 All Rights Reserved