1. 程式人生 > >U-boot開機logo的製作方法

U-boot開機logo的製作方法

http://blog.csdn.net/hanmengaidudu/article/details/16983255

如果在uboot中實現了LCD等顯示裝置的驅動,uboot在啟動的時候會在螢幕的左上角顯示一個logo,如下圖:

       這個logo預設情況(只定義了 CONFIG_VIDEO_LOGO 是如上圖所示的企鵝(如果還定義了 CONFIG_VIDEO_BMP_LOGO 會是denx的標誌),這個是存在於uboot程式碼中的一個頭檔案(
include/video_logo.h或 bmp_logo.h ),如果大家看了這個標頭檔案,發現這個是一個巨大的結構體,其中儲存著圖片每個畫素點的色彩資料。        這樣如果要更換這個預設的logo豈不是自己要生成這樣一個數據結構體才行?答案是肯定的。        但是這樣一個結構體要怎麼生成呢?這個uboot原始碼早就為我們想好了,方法其實很簡單:
一、準備一張jpeg圖片,通過命令列處理為8bit  BMP圖片。
       處理指令碼如下:
  1. #!/bin/sh
  2. #install Netpbm first
  3. jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2
     使用方法: (指令碼名)  ( 待處理的JPG圖片名)  (輸出檔名)
     之所以用jpeg轉bmp的辦法,是通過實驗證明這種方面可行且簡便。
     圖片的大小不一定要和原來一樣,你覺得合適就好。
二、將bmp檔案放入/tools/logos中,並修改/tools/下的Makefile

  1. # Generated LCD/video logo
  2. LOGO_H = $(OBJTREE)/include/bmp_logo.h
  3. LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_H)
  4. LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_H)

  5. ifeq ($(LOGO_BMP),)
  6. LOGO_BMP= logos/denx.bmp
  7. endif
  8. ifeq ($(VENDOR),atmel)
  9. LOGO_BMP= logos/atmel.bmp
  10. endif
  11. ifeq ($(VENDOR),esd)
  12. LOGO_BMP= logos/esd.bmp
  13. endif
  14. ifeq ($(VENDOR),freescale)
  15. LOGO_BMP= logos/freescale.bmp
  16. endif
  17. ifeq ($(VENDOR),ronetix)
  18. LOGO_BMP= logos/ronetix.bmp
  19. endif
  20. ifeq ($(VENDOR),syteco)
  21. LOGO_BMP= logos/syteco.bmp
  22. endif
紅色字型,替換為你製作的bmp檔名。
三、確認配置檔案     一定要定義
  1. #define CONFIG_VIDEO_LOGO
  2. #define CONFIG_VIDEO_BMP_LOGO
     編譯的時候,你的bmp檔案會被tools/bmp_logo.c編譯出的工具bmp_logo 製作成include/bmp_logo.h,並編譯進uboot中。

四、重新編譯u-boot即可得到顯示新logo的u-boot。
效果如下圖所示: 由於是8bit色深,顏色就有點怪~
如果你看了drivers/video/cfb_console.c原始碼,你可能會發現還有一個splashimage的東東可以顯示。是的,如果你有張非壓縮的BMP圖片放在了Nor Flash,你可以在ENV中設定splashimage和splashpos告訴uboot讀取和顯示的位置。啟動的時候,uboot就會顯示這個bmp圖片。 但是,原生的uboot是隻支援Nor Flash和核心的讀取的,如果你的圖片放在nand flash、SD卡或者SPI、I2C 介面flash中,你可以自己實現將圖片檔案讀取到記憶體中,然後再顯示splash。實現起來並不複雜,關鍵是使用相關的API函式來讀取資料。