去掉linux游標和製作linux Logo

2021-07-08 22:19:50 字數 3612 閱讀 8987

一、去除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...