當前位置:編程學習大全網 - 源碼下載 - 如何讓uboot啟動時顯示logo

如何讓uboot啟動時顯示logo

讓uboot啟動時顯示logo的方法

我用的u-boot是2009.08版的。想要修改開機logo為自定義的圖片,而不是原來的denx.bmp。

方法其實很簡單,只需替換u-boot的tools/logos目錄中的denx.bmp,再重新編譯(可能需要先執行make clean,再make,新的圖片

才會起作用),圖片大小不要起過妳的屏的大小,色彩深度不能大於256色,即8位色深的圖片。

不過,如果妳不想替換denx.bmp,而要用自已的圖片文件,比如,我用的是rat-linux.bmp文件,也可以。把妳的文件拷貝

到/tools/logos目錄中,再修改/tools目錄下的makefile文件,找到以下代碼段

ifeq ($(LOGO_BMP),)

LOGO_BMP= logos/denx.bmp

endif

ifeq ($(VENDOR),atmel)

LOGO_BMP= logos/atmel.bmp

endif

ifeq ($(VENDOR),ronetix)

LOGO_BMP= logos/ronetix.bmp

endif

將其中的LOGO_BMP= logos/denx.bmp改為 LOGO_BMP= logos/rat-linux.bmp即可。重新編譯,妳的圖片就可以起作用了。

U-boot開機logo的制作方法

在有實現LCD顯示和LCD命令行終端的U-boot中,在左上角都有顯示壹個logo,如果是atmel的芯片,就會有atmel的logo,三星的則是denx的logo。

有的網友發郵件說想改成自己公司的Logo,而且如果是自己玩的話,改成自己喜歡的logo也爽阿。所以今天我做好了實驗,將簡單的修改方法總結如下:

壹、圖片的放置路徑

所有的開機logo都放在了 /tools/logos 之下,妳只需要將妳的班子作對應的logo替換就好了。

對於S3C2440,妳只需要將denx.bmp替換成妳想要的logo就好了。

對於ATMEL的芯片,據說會顯示ATMEL的logo,所以替換那個logo即可。

但是妳所替換的logo必須和原來的大小、格式壹模壹樣,否則會出現u-boot使用過程中宕機重啟的後果。

二、圖片的大小標準

不同的logo對應不同的大小,這裏S3C2440所對應的是160*96分辨率的BMP圖片。

三、圖片的轉換腳本

在制作圖片前,請您現確認您的Linux主機上安裝了Netpbm 工具包。如果是ubuntu,妳可以直接用新立得安裝;如果是別的發行版,可以在 Netpbm主頁 下載源代碼編譯。

將妳想要的圖片裁減成160*96的JPG圖片,然後用以下的腳本處理壹下就好了:

#!/bin/sh

#install Netpbm first

jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2

使用方法: (腳本名) ( 待處理的JPG圖片名) (輸出文件名)

2.6 的Kernel LOGO真容易改試著改了壹下,似乎比2.4容易。2.6的logo數據在/drivers/video/logo裏,ppm文件就是logo圖像了。每 個ppm對應壹個.c文件,內容大概就是圖像尺寸、調色板、位圖數據等信息。.c文件無需自己建立,在make的時候如果不存在某個ppm文件對應的.c 文件,就會自動從ppm生成壹個,然後把它編譯成.o文件。所以看看目錄下哪些.ppm文件有同名的.o文件,就說明那個logo被編譯進了 kernel。標準的224色logo是logo_linux_clut224.ppm,因此修改這個圖片就可以實現修改logo了。

在 windows下,可以用PaintShopProX直接打開ppm進行編輯,編輯完畢後用decrease color depth命令降為224色,然後保存,把logo_linux_clut224.c刪掉,重新make就可以了。這個是我昨晚隨便改的logo :

在 深入壹點點。很容易發現,對於壹般的vga console,logo是由drivers/video/fbmem.c裏的fb_show_logo()函數顯示的,這個函數的調用者是 drivers/video/console/fbcon.c(跟2.4差不多,嗯)。這個函數做的事情不多,就是先把非8位色深的位圖轉換為8位色深, 然後用info->fbops->fb_imageblit(info,& image);把logo顯示出來,有壹個cpu時顯示壹個logo,有2個cpu時顯示2個,以此類推。

略加修改,就可以實現將logo居中顯示,並加入壹個“重復顯示右邊界”,也就是把logo最右邊4個點寬的區域作為背景填充到整個logo bar。diff如下:

--- /gs2e/source/linux26-2edev/drivers/video/fbmem.c2006-08-29 14:07:15.000000000 +0800

+++ ./fbmem.c2006-09-27 20:40:08.000000000 +0800

@@ -375,9 +375,9 @@

int fb_show_logo(struct fb_info *info)

{

u32 *palette = NULL, *saved_pseudo_palette = NULL;

-unsigned char *logo_new = NULL;

-struct fb_image image;

-int x;

+unsigned char *logo_new = NULL, *border = NULL;

+struct fb_image image, imageborder;

+int x, xoffset;

/* Return if the frame buffer is not mapped or suspended */

if (fb_logo.logo == NULL || info->state != FBINFO_STATE_RUNNING)

@@ -421,12 +421,45 @@

image.height = fb_logo.logo->height;

image.dy = 0;

+#ifdef CONFIG_LOGO_REPEAT_RIGHT

+border = kmalloc(4 * fb_logo.logo->height, GFP_KERNEL);

+if (border != NULL){

+ for (x = 0; x < fb_logo.logo->height; x++){ /* use x as y */

+*((u32 *)border + x) = /* will repeat 4 pixels of the right side*/

+*(u32 *)(image.data + (x+1)*fb_logo.logo->width - 4);

+ }

+ imageborder.depth = 8;

+ imageborder.data = border;

+ imageborder.width = 4;

+ imageborder.height = image.height;

+ imageborder.dy = 0;

+ for (x = 0; x < info->var.xres; x+=4){

+imageborder.dx = x;

+info->fbops->fb_imageblit(info, &imageborder);

+ }

+ kfree(border);

+}

+#endif

+#ifndef CONFIG_CENTER_LOGO

+xoffset = 0;

for (x = 0; x < num_online_cpus() * (fb_logo.logo->width + 8) &&

x <= info->var.xres-fb_logo.logo->width; x += (fb_logo.logo->width + 8)) {

image.dx = x;

info->fbops->fb_imageblit(info, &image);

}

-

+#else

+xoffset = (info->var.xres - num_online_cpus() * (fb_logo.logo->width + 8))>>1;

+if (xoffset<0)xoffset = 0;

+ for (x = xoffset; x < num_online_cpus() * (fb_logo.logo->width + 8) + xoffset &&

+ x <= info->var.xres-fb_logo.logo->width+xoffset; x += (fb_logo.logo->width + 8)) {

+ image.dx = x;

+ info->fbops->fb_imageblit(info, &image);

+}

+#endif

kfree(palette);

if (saved_pseudo_palette != NULL)

info->pseudo_palette = saved_pseudo_palette;

我在這裏定義了兩個配置變量,CONFIG_LOGO_REPEAT_RIGHT和CONFIG_CENTER_LOGO,修改/drivers/video/logo/Kconfig,加上:

config CENTER_LOGO

bool "Center logo"

depends on LOGO

default n

config LOGO_REPEAT_RIGHT

bool "Repeat the right border (4 pixels)"

depends on LOGO

default n

這樣就可以在make menuconfig之類的界面中設置是否開啟這兩項功能了。

  • 上一篇:ffmpeg output file 0 does not contain any stream怎麽解決
  • 下一篇:我的獵豹cs102.0t百公裏油耗14個正常嗎?
  • copyright 2024編程學習大全網