1.方案分析
ARM-Linux啟動時會先在LCD左上方顯示一個ARMLINUX的小企鵝圖案,也就是我們所說的bootlogo。
首先分析一下Logo的顯示代碼:
不難發現Logo顯示是在載入顯示驅動fb後由kernel/drivers/video/fbcon.c中的fbcon_show_logo函數來完成的。
fbcon_show_logo函數中有很多相容性代碼,不是都會用到的!我們用的是SHARP(夏普)的TFT真彩屏.
再仔細看一下,這裡用到的顯示資料均來自kernel/include/linux/linux_logo.h。這裡同樣也有一些相容性的資料,其中對我們有用的是:
linux_logo_red[] —— 調色盤中的紅色分量
linux_logo_green[] —— 調色盤中的綠色分量
linux_logo_blue[] —— 調色盤中的藍色分量
linux_logo[] —— Logo圖案的點陣
以上資料都是不需要你修改的 在fbcon_show_logo裡只做了256色的顯示,所以要先設定一個RGB調色盤。這裡的調色盤是從0x20色開始編的,所以實際好象只有最多224色的顯示。linux_logo.h裡預設是做了一個214級的灰階調色盤,如果想要更多色彩的話可以自已修改(注意調色盤的顏色不能超過224種)
再看linux_logo[],這是Logo圖案的點陣。因為是256色的圖,所以每點為一個Byte。Logo圖案是80*80大小,所以這裡總共有6400 Byte。一共是800行,每行8 Byte即8 Point,每10行資料對應Logo圖案中一行。可以先自己試試放一些簡單圖形進去顯示看看。(同樣注意顏色要從0x20開始,0-0x1f的32種顏色是不確定的)。
以上分析是針對系統原版核心256色80x80的啟動表徵圖的說明。而我們要通過修改或替代原核心檔案,來實現我們製做公司的的啟動表徵圖,要求如下:
1.開發板起動以後以全螢幕顯示即240x320模式顯示
2.映像以224色彩顯示
2.方案設計
當然你不會只想顯示一些簡單圖形,而是希望能把自已做的圖片放上去。建議使用PhotoShop8.0這裡提供三個方法加工圖片:
1)先搞一個256色調色盤,前面32個顏色空著,把後面224種顏色設一下吧。注意要盡量把顏色選全一些,要能覆蓋到整個顏色地區上。這樣就有一個通用的調色盤,可適用所有圖片,但顏色的真實性稍差。然後把自己的圖片開啟,先將顏色設定到RGB空間裡,然後裁剪/縮放到240x320象數的尺寸,再將顏色最佳化到先前定義好的調色盤裡,圖片就加工好了。
2)不用通用調色盤,開啟自己的圖片,先將顏色設定到RGB空間,裁剪/縮放到240x320象素的尺寸,然後指定最佳化為224色圖象。這樣圖片就加工好了,但其調色盤就是專用的,不適合用到其他圖片裡。
3)GIMP+FBLOGO GIMP為LINUX下一個繪圖程式,我們使用它開啟圖片後在功能表列先擇: 圖片->模式->索引顏色,然後通過工具選項將圖片大小調整到240x320象數大小,儲存為.png格式。在使FBLOGO工具將其轉換成linux_logo.h檔案。
使用前兩種方法加工圖片,還需要把資料放到我們的linux_logo.h裡。調色盤可以直接儲存為檔案,然後可以通過自製的小程式讀出來就可以了。圖片的點陣比較難取,當然也可以自己做個程式去取螢幕上的點,不過比較困難。而後一種方法使用fblogo工具將用GIMP轉換的圖片檔案自動產生linux_logo.h檔案。
3.最終實施方案
通過以上內容分析,我們確定使用第三種方法GIMP加fblogo工具的方案進行實施,以下我們製做的流程及其方法:
軟體環境:linux虛擬機器、fblogo工具、linux下的影像編輯工具GIMP
硬體環境:X86PC機一台、優龍ST2410開發板一個、交叉網線一條。
1.調試並編譯開發板所相對應的核心包,調試通過後保留.config配製檔案,準備編譯bootlogo時使用。
2.在linux上解壓fblogo_0.52.tgz包,並進行軟體安裝,產生fblogo二進位可執行檔。
3.進入linux的kde圖形介面,在終端下使用gimp命令運行gimp工具。
4.開啟公司的logo.jpg影像檔,依次選擇 映像->模式->索引顏色、並將其圖片大小調至240x320象素,最後將檔案儲存為logo.png格式。
5.將上述檔案儲存到fblogo工具所在檔案夾,首先在命令列下執行convert –colors 223 logo.png logo.png 將檔案儲存為224色素(目前fblogo工具僅支援到224色),接著再使用fblogo logo.png linux_logo.h 產生linux_logo.h核心啟動代碼中的映像緩衝區檔案格式。
6.將linux_logo.h檔案拷貝到kernel的include/linux目錄即可。
7.重新編譯linux系統核心,將產生的zImage核心鏡像拷貝到windows下,準備對目標板進行燒寫。
8.用串口將目標板與PC主機相連,接通電源,使用bnw工具進入目標板的bios程式並將產生的zImage核心鏡像拷燒寫到板子上,重起目標板,你會發現目標板上已經出現了美麗的logo圖片。如果沒有,請核對以上的步驟,並重新測試直到成功為止。
4 方案總結
4.1 方案實施過程中的關鍵問題
1.確保核心能夠正常運行,編譯時間對開發板各硬體的驅動支援及其相關的配製,啟動後能夠自動負載檔案系統。
2.安裝fblogo工具,fblogo工具的編譯需要使用到第三方的庫檔案libpng.so庫以及zliba.a庫的支援,編譯成功後,在命令列試運行fblogo 如果安裝成功將出現其使用的協助資訊。
3.fblogo工具對圖片的要求是僅支援PNG格式的224色圖片。
4.最後針對不同的開發板的LCD顯示屏應使用與其相適應的圖片大小,否則可能使系統無法正常工作。
4.2 方案實施後的遺留問題
由於使用到了logo的製做工具fblogo 所以圖片在色彩上最大僅能支援到224色圖片,在bootlogo開機檔案linux_logo.h中有映像的色彩域點陣代碼(即圖片的16位進位的代碼),如有需要可以自行修改,但其難度可想而知,建議可以將圖片儲存為TIF之類的非壓縮格式,然後自已編寫小程式將其從圖象檔案中的固定位置取點陣資料。
5 2.6核心啟動Logo
在配置核心的時候選中了啟動Logo的支援。
使用下面的方法可以將企鵝的Logo換成自己喜歡的任意圖片。
首先準備一幅自己喜歡的圖片,然後將背景塗成黑色。然後將該圖片儲存成png格式,例如linuxlogo.png。在Linux下使用下面的命令:
# sudo apt-get install netpbm
# pngtopnm linuxlogo.png > linuxlogo.pnm
# pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm
# pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm
然.ppm替換/usr/src/linux-2.6.8.1/drivers/後用產生的linuxlogo224video/logo/logo_linux_clut224.ppm(最好先做好備份),然後刪除同一目錄下的logo_linux_clut224.c檔案,重新編譯核心,啟動之後就可以在螢幕左上方看到自己的Logo了。