1. 程式人生 > >u-boot logo全屏顯示

u-boot logo全屏顯示

最近閒來無事逛論壇,看到了有關u-boot全屏顯示logo的帖子,http://bbs.csdn.net/topics/390328046,自己也沒做過,試了下,可行,下面分享給各位。

u-boot版本是:u-boot-2010.06

開發板:AT91SAM9X35

LCD屏:480*272

其實在u-boot中顯示較小的logo還是比較容易的,在/u-boot-2010.06/tools/logos 中預設就有幾個小的圖片,只要include/configs/at91sam9x5ek.h中定義了有關LCD的一些巨集,如:CONFIG_LCD_LOGO,CONFIG_LCD_INFO,CONFIG_LCD_INFO_BELOW_LOGO,u-boot編譯後開機都會有一個較小的logo在螢幕的左上角顯示,我的是ATMEL的logo

現在說說如何做全屏顯示logo!

1.將u-boot預設顯示的文字去掉,去掉CONFIG_LCD_INFO這個巨集

2.獲取一張480*272的圖片,注意圖片格式必須為:xxx.bmp,8位深度


3.將圖片檔案命名為 atmel.bmp,將/u-boot-2010.06/tools/logos/下面原來的atmel.bmp覆蓋掉。

4.編譯u-boot,燒錄

一看,圖片是有顯示了,但只顯示了一半。


奇怪了,這是為何?慢慢看原始碼,發現每次編譯後,u-boot都會在include下面生成一個新的bmp_logo.h檔案,這個是由tools/bmp_logo生成的,開啟bmp_logo.h看看

#define BMP_LOGO_WIDTH480
#define BMP_LOGO_HEIGHT272
#define BMP_LOGO_COLORS240
#define BMP_LOGO_OFFSET16

這是獲取到你剛剛拷貝進去的圖片的資訊,如果是對的,就繼續往下看,下面有2個數組,圖片的資料就在這裡

unsigned short bmp_logo_palette[]={.....}和unsigned char bmp_logo_bitmap[] = {....}

往下看,發現bmp_logo_bitmap陣列中的資料的下半截全部為0x0了,怪不得。為什麼會為0x0?可能就是生成資料的bmp_logo有問題了,開啟bmp_logo.c看看

這就是生成bmp_logo.h的東東,看看生成bmp_logo_bitmap陣列那段:

printf ("unsigned char bmp_logo_bitmap[] = {\n");
for (i=(b->height-1)*b->width; i>=0; i-=b->width) {
for (x = 0; x < b->width; x++) {
b->data[(uint16_t) i + x] = (uint8_t) fgetc (fp) + DEFAULT_CMAP_SIZE;
}
}

width和height都是對的,原來是這個uint16_t(unsigned short型)搞的鬼,改為uint32_t(unsigned int型),再編譯,看bmp_logo.h 

嗯,不錯,這會資料全部都有了,燒錄,重啟,有了我們預設的圖片了!


圖片人物有些地方出現了綠點,這是我用photoshop將原圖jpg編輯後就出現的,如果在初期就把圖片設計好,應該沒多大問題了!