一、去除llinux 的開機游標
在核心的當前目錄進入到drivers/video/console/fbcon.c 檔案
將static void fb_flashcursor(void *private)
和 static void fbcon_cursor(struct vc_data *vc, int mode) 裡的內容注釋掉,使之變成空函式。
二、設定linux核心啟動logo
(1)讓核心支援啟動logo
在核心目錄中 make menuconfig
device drivers ----> graphics support ---->
選中 bootup logo ----> standard 224-color linux logo
(2)製作一張啟動logo的png格式的logo_linux_clut224.png
(3)sudo apt-get install netpbm
#pngtopnm logo_linux_clut224.png > logo_linux.pnm
#pnmquant 224 logo_linux.pnm > logo_linux_224.pnm
#pnmtoplainpnm logo_linux_224.pnm > logo_linux_clut224.ppm
(4)將logo檔案放入核心中
拷貝到製作好的logo檔案到 /drivers/video/logo 資料夾
替換 logo_linux_clut224.ppm 檔案
(5)重新編譯核心
三、居中顯示
linux 核心啟動 logo 居中顯示需要修改下列兩個原始檔:
1.)drivers/video/console/fbcon.c
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 10c0b74..cdb3b6c 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -589,6 +589,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
if (fb_get_color_depth(&info->var, &info->fix) == 1)
erase &= ~0x400;
logo_height = fb_prepare_logo(info, ops->rotate);
+ logo_height += (info->var.yres/2)-(logo->height/2);
logo_lines = div_round_up(logo_height, vc->vc_font.height);
q = (unsigned short *) (vc->vc_origin +
vc->vc_size_row * rows);
2.)drivers/video/fbmem.c
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index b066475..c8e7fc0 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -468,8 +468,8 @@ static int fb_show_logo_line(struct fb_info *info, int rotate,
fb_set_logo(info, logo, logo_new, fb_logo.depth);
}- image.dx = 0;
- image.dy = y;
+ image.dx = (info->var.xres/2)-(logo->width/2);
+ image.dy = (info->var.yres/2)-(logo->height/2);
image.width = logo->width;
image.height = logo->height;
四 除錯
關聯軟體 軟體
/kernel/drivers/video/fbmem.c
/kernel/drivers/video/logo/logo.c
/kernel/drivers/video/logo/kconfig
/kernel/include/linux/linux_logo.h
一、首先說明logo顯示相關程式。
(1)在driver/video/console/fbcon.c檔案中,函式fncon_init(),為虛擬裝置結構體vc賦值,並呼叫本檔案中的fbcon_prepare_logo()函式,為顯示logo做準備。
(2)fbcon_prepare_logo(),呼叫了fb_prepare_logo()函式(此函式在driver/video/fbmem.c中)。
(3)fb_prepare_logo()中呼叫了fb_find_logo()函式(此函式在driver/video/logo/logo.c中),這個函式會根據配置檔案找到相應的logo資料,這個資料就是logo資料夾下logo_***_***.ppm生成的,我的linux就是logo_linux_clut224.ppm。
(4)fb_prepare_logo()函式獲取了**資訊後進行一次判斷,看高度是否超過螢幕高度,否則,不顯示。
(5)fbcon_prepare_logo()函式獲取資料後,又進一步處理判斷,用**的高度除以字模高度後,於屏高度除以字模高度的值相比較,判斷可否顯示。若過大,則列印顯示「fbcon_init:disable boot-logo(boot-logo bigger than screen)」
列印列印顯示「fbcon_init:disable boot-logo(boot-logo bigger than screen)」分析
if (logo_lines > vc->vc_bottom)
可以發現是因為logo_lines > vc->vc_bottom引起的
其中logo_lines = div_round_up(logo_height, vc->vc_font.height); //(div_round_up是向上取整的意思
而vc->vc_bottom**讀下來為vc->vc_bottom = info->var.yres/ vc->vc_font.height;
其關鍵就是vc->vc_font.height了,linux下vc->vc_font.height預設為16,
所以當液晶屏和logo的解析度都為800*600時,
600/16無法整除,故取整logo_lines =38; vc->vc_bottom = 37;
提示錯誤無法顯示。
只要把logo的改小一下,改為592,則logo_lines = 592/16=37; vc->vc_bottom = 600/16=37;就可以正常顯示了。
linux下游標定位和清屏函式
printf 033 47 31mhello world 033 5m 47是字背景顏色,31是字型的顏色,hello world是字串.後面的 033 5m是控制碼.顏色 quote 字背景顏色範圍 40 49 字顏色 30 39 40 黑 30 黑 41 紅 31 紅 42 綠 32 綠 43 ...
linux下游標定位和清屏函式
printf 033 47 31mhello world 033 5m 47是字背景顏色,31是字型的顏色,hello world是字串.後面的 033 5m是控制碼.顏色 quote 字背景顏色範圍 40 49 字顏色 30 39 40 黑 30 黑 41 紅 31 紅 42 綠 32 綠 43 ...
Linux下使用diff和patch製作及打補丁
diff 是對兩個集合的差運算 patch 是對兩個集合的和運算 diff a b c表達了c a b a 表達了原始檔案,b 表示修改後的檔案。c 表示補丁檔案 由於歷史原因,diff有三種格式 正常格式 normal diff 上下文格式 context diff 合併格式 unified di...