uboot開機logo
轉載地址:http://blog.chinaunix.net/uid-9688646-id-1998453.html
參考資料:
【1】U-boot開機logo的製作方法(Tekkaman Ninja):http://blog.chinaunix.net/u1/34474/showart_2085233.html
【2】U-Boot中的Splash Screen(Charlie Chen):http://blog.chinaunix.net/u1/51797/showart.php?id=2070554
【3】UBOOT LCD驅動流程(牛蹄印章):http://blog.chinaunix.net/u3/90973/showart_2303809.html
在有實現LCD顯示和LCD命令列終端的U-boot中,預設情況下在左上角都有顯示一個logo,如果是atmel的晶片,就會有atmel的logo,三星的則是denx的logo。如果想把它改成自己喜歡的或者公司的logo,則只要作簡單的修改便可以實現。
一、圖片的放置路徑
所 有的開機logo都放在了 /tools/logos 之下,所以,把你需要顯示的logo圖片(bmp格式)也放置到該目錄下。根據你所設定的顯示幀快取的大小,圖片大小有所限制。使用這種方法還有一個限制 是:圖片只能是8bpp的bmp圖(參考uboot原始碼)。Tekkman文章中所說的“所替換的logo必須和原來的大小、格式一模一樣,否則會出現 u-boot使用過程中當機重啟的後果”,我自己親測中並未遇到,當然,我也並沒有做足夠的測試,只是這並不需要和原圖的大小一模一樣。
二、修改Makefile檔案
修改/tools目錄下的Makefile檔案,大約是44~46行
ifeq ($(LOGO_BMP),)
LOGO_BMP= logos/denx.bmp
endif
把 denx.bmp 替換為你需要顯示的logo圖片的檔名,儲存退出,重新編譯uboot。
三、圖片的轉換指令碼
在製作圖片前,請您現確認您的Linux主機上安裝了Netpbm 工具包。如果是ubuntu,你可以直接用新立得安裝;如果是別的發行版,可以在 Netpbm主頁 下載原始碼編譯。然後用以下的指令碼處理一下就好了:
#!/bin/sh
#install Netpbm first
jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2
使用方法: (指令碼名) ( 待處理的JPG圖片名) (輸出檔名)
關於uboot的lcd驅動的編寫,可參考資料【3】和Tekkaman的uboot移植原始碼以及相應的晶片資料手冊。參考資料【2】中的BMP命令不是必須的,不過實現了這個命令可以方便除錯。
U-Boot中的Splash Screen
U-Boot配置
在U-Boot中使用Splash Screen,可以實現U-Boot啟動後,在LCD上顯示自定義圖片,起到友好的介面顯示作用。使用Splash Screen需要在配置檔案中使能BMP圖片功能和SPLASH功能:
#define CONFIG_CMD_BMP
#define CONFIG_SPLASH_SCREEN
例項
並且要定義splashimage變數以及在splash變數所定義的地址存放bmp圖片。以2MB的SST30VF1601為例,工32個扇區,規劃如下:
專案 |
地址範圍 |
扇區 |
大小 |
說明 |
U-Boot |
0x0000 0000 ~ 0x0010 0000 |
0~15 |
1M |
|
引數 |
0x0010 0000 ~ 0x0018 0000 |
16~23 |
512K |
|
splashimage |
0x0018 0000 ~ 0x0020 0000 |
24~31 |
512K |
|
操作
現在要實現splash screen,需要進行操作,先下載一個圖片到記憶體中,然後擦除FLASH的splashimage區域,接著將圖片寫入splashimage區域,最後設定並儲存splashimage環境變數即可。
U-Boot> tftp a0008000 logo.bmp ;下載檔案到記憶體
U-Boot> erase 1:23-31 ;擦除Flash的splashimage區域
U-Boot> cp.b a0008000 00180000 $filesize ;將logo寫到Flash的splashimage區域
U-Boot> setenv splashimage 00180000 ;設定splashimage環境變數
U-Boot> saveenv ;儲存環境變數
u-boot啟動後,輸入bmp d $splashimage即可在LCD上顯示logo圖片。為了實現開機就顯示logo,可以修改common/lcd.c檔案,在其中加入實現 bmp d $splashimage的程式碼即可。
#############################################3
自定義u-boot的開機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之類的介面中設定是否開啟這兩項功能了。
更多關於logo hack的資訊,可以參考:
http://gentoo-wiki.com/HOWTO_Linux_Logo_Hack
GMT+8, 2011-3-2 16:59, Processed in 0.600615 second(s), 5 queries.
相關文章
- uboot顯示logo的方式bootGo
- win10開機logo怎麼修改_win10自定義開機logo如何操作Win10Go
- 更改微星主機板開機logo圖示Go
- 2.12.uboot的移植2-從uboot官方標準uboot開始移植boot
- 小白自制Linux開發板 九. 修改開機LogoLinuxGo
- win10開機logo不見了怎麼辦 win10開機不顯示logo處理方法Win10Go
- win10開機卡logo不轉圈如何解決_win10重灌開機卡logo不轉圈修復方法Win10Go
- Uboot功能boot
- uboot-uboot介紹-學習筆記boot筆記
- 手機上怎麼設計logo,電腦上怎麼設計logoGo
- 500套精美Logo樣機模板可直接套用、輕鬆製作炫酷logoGo
- 全民logo:logo製作軟體Go
- Uboot基本知識boot
- uboot如何啟動核心boot
- 海思 uboot 編譯boot編譯
- U-boot顯示LOGO之LOGO篇bootGo
- 3、將uboot,kernel,rootfs下載到開發板上boot
- win10開機logo後黑屏安全模式也進不去最佳解決方法Win10Go模式
- uboot-學習筆記boot筆記
- rockchip uboot 應用dts overlaysboot
- Linux:uboot啟動流程分析Linuxboot
- 嵌入式開發丨瞭解系統中的Uboot功能boot
- uboot常用命令及其使用boot
- iMX8M mini開發板UBOOT新增新的顯示支援boot
- 系統移植——uboot常用命令boot
- uboot中start.s原始碼指令boot原始碼
- 若依如何修改logoGo
- RK3568開發筆記(五):在虛擬機器上使用SDK編譯製作uboot、kernel和ubuntu映象筆記虛擬機編譯bootUbuntu
- RK3568開發筆記(四):在虛擬機器上使用SDK編譯製作uboot、kernel和buildroot映象筆記虛擬機編譯bootUI
- 帝國CMS修改網站logo,帝國CMS Logo更換步驟網站Go
- 線上製作logo!手把手教你線上快速製作logoGo
- ubuntu顯示卡更新導致開機後停留在ubuntu logo介面,進入不到登陸介面UbuntuGo
- Hi3516開發筆記(四):Hi3516虛擬機器編譯uboot、kernel、roofts和userdata以及分割槽表筆記虛擬機編譯boot
- Logo如何設計製作?線上製作logo一分鐘完成!Go
- uboot-2012.04.01移植編譯前準備boot編譯
- Uboot連結指令碼與啟動流程boot指令碼
- uboot1: 啟動流程和移植框架boot框架
- 如何使用python設計logoPythonGo