當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > LINUX 啟動(dòng)logo 總結(jié)
LINUX 啟動(dòng)logo 總結(jié)
近在imx6上需要調(diào)試linux下啟動(dòng)logo。其實(shí)linux啟動(dòng)logo 以前沒(méi)少調(diào),但這次弄了好久,也發(fā)現(xiàn)以前調(diào)過(guò)的沒(méi)有積累。
之所以這次logo弄了很久是因?yàn)閒sl bsp 實(shí)現(xiàn)keep uboot logo to kernel ,但又在我使用的BSP上沒(méi)有完全弄好。話說(shuō)那個(gè)還是
有很牛逼,簡(jiǎn)單來(lái)說(shuō)就是uboot實(shí)現(xiàn)好logo,然后kernel 中不需要對(duì)相應(yīng)的顯示時(shí)鐘進(jìn)行重新初始化,還有很多其他的類似一樣
的道理,就是相信uboot中已經(jīng)弄好了。廢話到此。說(shuō)說(shuō)一般的linux 啟動(dòng)logo。
一,企鵝法(224級(jí),或者224色)
企鵝圖片的文件名logo_linux_clut224.ppm,在driver/video/logo目錄下。采用netpbm 工具生成想要替換的logo,這里要注
意一下圖片的尺寸大小 。
例如將PNG格式的圖片轉(zhuǎn)換成logo_linux_clut224.ppm:
# pngtopnm my.png > my.pnm
# pnmquant 224 my.pnm > logo224.pnm
# pnmtoplainpnm logo224.pnm > logo_linux_clut224.ppm
Note: 可能會(huì)出現(xiàn)如下錯(cuò)誤提示
drivers/video/logo/logo_linux_clut224.ppm: Binary PNM is not supported
Use pnmnoraw(1) to convert it to ASCII PNM
這個(gè)可能是因?yàn)槟愕膒pm 圖片是bin格式,需要轉(zhuǎn)換成ascii 格式。方法如下:
pnmnoraw logo_linux_clut224.ppm > logo_linux_clut224_ascii.ppm
替換目錄中的文件重新編譯就OK了。當(dāng)然這時(shí)候你會(huì)發(fā)現(xiàn)顯示位置需要調(diào)整。默認(rèn)是左上角對(duì)齊。產(chǎn)品中可能更多是中心對(duì)齊。
中心對(duì)齊的方法。
1,修改drivers/video/fbmem.c fb_show_logo_line函數(shù)中,修改如下
//image.dx = 0; //左上角 x起點(diǎn)
//image.dy = y; //調(diào)用時(shí)指定的參數(shù) y起點(diǎn)
image.dx = (info->var.xres / 2) - (image.width / 2); //中心
image.dy = (info->var.yres / 2) - (image.height / 2); //中心
image.width = logo->width;
image.height = logo->height;
Note:info->var.xres和info->var.yres是分辨率大小,image.width,image.height是logo圖片的大小。
起點(diǎn)位置的修改
2,修改drivers/video/console/fbcon.c fbcon_prepare_logo函數(shù)里,修改如下
logo_height = fb_prepare_logo(info, ops->rotate);
logo_height += (info->var.yres / 2) - (logo_height / 2);
結(jié)束位置的修改
這里需要補(bǔ)充一點(diǎn),就是關(guān)于boot logo 的配置與光標(biāo) cursor的問(wèn)題(第二種方法里面說(shuō)吧)。
Device Drivers ---> Graphics support --->
[*]Boot logo --->
[*] Standard 224-color Linux logo
支持 kernel console,不選看不到 logo:
Device Drivers ---> Graphics support --->
Console display driver support --->
<*> Framebuffer Console support
二,真彩色TFT LINUX LOGO (使用此方法比較簡(jiǎn)單,更能滿足客戶的需求)
顯示圖片可以是rgb565 ,不局限于原來(lái)的224色 ,方法相當(dāng)于直接將要顯示的圖片輸出到Framebuffer。記錄一下方法吧。
1, 生成貍貓----增加三個(gè)文件。
true_lanrry_logo.h //LCD顯示信息,深度及聲明
lanrry_logo_data.h //定義的圖片的數(shù)據(jù),我采用ImageLCD工具取模
framebuffer_logo.c //實(shí)現(xiàn)打印數(shù)據(jù)到framebuffer
均放在drivers/video目錄下,并且修改Makefile ,添加framebuffer_logo.c。
2,貍貓換太子----修改drivers/video/fbmem.c里的代碼
a,添加 #define TRUE_COLOR
b,修改如下:
+#ifdef TRUE_COLOR
+#include "truecolor_logo.h"
+#endif
c,修改函數(shù)int fb_show_logo(struct fb_info *info, int rotate)
{
//貍貓換太子
+#ifdef TRUE_COLOR
+fb_show_truecolor_logo(info);
+return 1;
#else
int y;
y = fb_show_logo_line(info, rotate, fb_logo.logo, 0,
num_online_cpus());
num_online_cpus cpu 數(shù)量,linux logo 企鵝數(shù)量。
d,修改fb_prepare_logo函數(shù)以改變高度,該函數(shù)的后return處改為
#ifdef TRUE_COLOR
return fb_prepare_extra_logos(info, YRES, YRES);
#else
return fb_prepare_extra_logos(info, fb_logo.logo->height, yres);
#endif
重新編譯完之后,就能全部顯示
這種方法是采用替換boot logo 。全屏顯示的時(shí)候,也是會(huì)發(fā)現(xiàn)有光標(biāo)問(wèn)題。解決方法如下:
修改drivers/video/console/bitblit.c文件的bit_cursor函數(shù),在該函數(shù)結(jié)尾處的 。
if (err)
soft_cursor(info, &cursor);
改為
if (0)
soft_cursor(info, &cursor);