1. 程式人生 > >修改linux核心kernel開機logo(小企鵝)

修改linux核心kernel開機logo(小企鵝)

修改linux核心kernel的開機圖片(原為小企鵝圖片)。

轉載請註明出處:http://blog.csdn.net/wang_zheng_kai   

導航制導與控制實驗室 2014年12月10日

本文主要是介紹三部分內容:

1》如何製作linux核心所需要的開機圖片(ppm格式);

2》修改開機圖片的兩種方法;

3》除錯過程中的問題與技巧;

一、如何製作linux核心所需要的開機圖片(ppm格式)

1》在ubuntu系統上安裝netpdm,命令如下:

# sudo apt-get install netpdm

2》準備所需要的logo圖片,圖片的大小請參考開發板所使用的解析度;

3》將我們準備好的logo(mylogo.png)轉換成我們需要的圖片格式:

# pngtopnm mylogo.png > my_linux_logo.pnm //將png轉換成pnm
# pnmquant 224 my_linux_logo.pnm > my_linux_logo_224.pnm//將pnm圖片的顏色數限制在224
# pnmtoplainpnm my_linux_logo_224.pnm > my_linux_logo_224.ppm//將pnm圖片轉換成最終的ppm

注:我除錯的這個過程是基於png格式圖片的轉換過程,如果是其他格式的請轉換成png或者是使用其他的命令進行轉換。

二、修改開機圖片的兩種方法:

 1、方法一:替換原有圖片

直接替換linux_kernel/driver/video/logo/下的圖片***,並確保替換的檔名前後一致。然後確保核心配置如下所示:

Device Drivers-->

Graphics Support-->

Bootop logo-->

[*]   Standard 224-color Linux logo

重新編譯並燒錄到開發板中,重啟即可顯示。

 2、方法二:新增新的圖片

1》將得到的my_linux_logo_224.ppm圖片檔案直接複製到linux_kernel/driver/video/logo目錄下;

2》修改linux_kernel目錄下的如下檔案:

在include/linux/linux_logo.h新增

extern const struct linux_logo my_linux_logo_224;
在drivers/video/logo.c新增
#ifdef CONFIG_LOGO_MY
/*MY LINUX LOGO*/
logo = &my_linux_logo_224;
#endif

3、修改Makefile:

新增obj-$(CONFIG_LOGO_MY) += my_linux_logo_224.o
4、修改Kconfig:

config LOGO_MY
bool "224-color my Linux logo"
default y

5、修改核心配置

Device Drivers-->

Graphics Support-->

Bootop logo-->

224-color my Linux logo

並取消[*] Standard 224-color Linux logo選項。

重新編譯並燒錄到開發板中,重啟即可顯示。

三、除錯過程中的問題與技巧

我在除錯過程中一直出現黑屏現象,主要是我的圖片畫素不正確,可以先找一個畫素較小的圖片來測試下圖片是否成功,在製作與螢幕相對應畫素的圖片。

想對現實的圖片進行居中顯示、拉伸顯示請修改driver/video/fbmem.c中的fb_show_logo_line函式和driver/video/console/fbcon.c中的fbcon_prepare_logo()函式。下面以居中顯示為例子進行講解:

例子:居中顯示

(1)修改原始碼/driver/video/fbmem.c中的fb_show_logo_line函式。

//image.dx=0;
//image.dy=y;
image.width=logo->width;
image.height=logo->height;

增加
+image.dx = (info->var.xres / 2) - (image.width / 2);
+image.dy = (info->var.yres / 2) - (image.height / 2);

(2)修改原始碼/driver/video/console/fbcon.c中的fbcon_prepare_logo()函式

在logo_height = fb_prepare_logo(info, ops->rotate);後增加下面一行程式碼

+logo_height += (info->var.yres / 2) - (logo_height / 2);

經過以上方式重新編譯核心啟動就會看到修改的核心logo能夠居中全屏顯示了。

以後可能還會繼續完善,謝謝。