1. 程式人生 > >修改linux核心的開機圖片

修改linux核心的開機圖片

windows中把一張xx.jpg的圖片轉換成xx.bmp的圖片方法:

linux中生成ppm圖片(ppm圖片應該是其他格式的圖片解析成資料序列的檔案)

【方法1】 轉換方法如下:

bmp圖片使用bmptoppm。jpg,png,gif都有相應的topnm工具,但我沒有試過。

 $bmptoppm pic.bmp > temp1.ppm //生成ppm

 $ppmquant 224 temp1.ppm > temp2.ppm //轉換成224顏色

 $pnmnoraw temp2.ppm > logo.ppm //轉換成ascii格式

logo.ppm就是需要的影象了(如果轉換過程中出錯,那麼試著png圖片格式轉換成ppm圖片格式)

【方法2】轉換方法如下:

隨便一款編輯圖片軟體把當前的圖片儲存成png格式,例如linuxlogo.png。然後在Linux下使用下面的命令:

# pngtopnm linuxlogo.png > linuxlogo.pnm 
# pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm 
# pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm

然後用生成的linuxlogo224.ppm替換/usr/src/linux-2.6.8.1/drivers/video/logo/logo_linux_clut224.ppm(最好先做好備份),然後刪除同一目錄下的logo_linux_clut224.c檔案,重新編譯核心,啟動之後就可以在螢幕左上方看到自己的Logo了。

(使用windows下面的gimp軟體, 在百度搜索欄輸入gimp即可下載到該軟體)

【方法3】轉換方法如下:(強烈建議使用該方法lin)

1、安裝windows版下的gimp軟體成功後,開啟該軟體

     開啟任何格式的一張將要轉換的圖片

     選擇:影象--->模式--->索引顏色轉換--->最大顏色數量設定為(224)--->轉換

     還可以通過:影象--->縮放影象--->設定想要的影象大小(如320*240)

     最後:檔案--->另存為--->選擇ppm格式--->儲存格式為ASCII,便可生成xxx.ppm檔案了

2、將轉換好的圖片拷貝到 drivers\video\logo\ 替換 logo_linux_clut224.ppm

     刪除 logo_linux_clut224.c和logo_linux_clut224.o

     重新make zImage

【把生成的ppm檔案放到指定的目錄下】

一、最簡單的方法:把你的圖片替換掉小企鵝圖片重新變異即可。

把製作好的ppm檔案(部落格裡有製作方法)拷貝到kernel原始碼的driver/video/logo中,把舊的logo_linux_clut224.ppm刪除或者重新命名,把剛製作好的ppm圖片重新命名為logo_linux_clut224.ppm,然後放入driver/video/logo中,刪除之前由logo_linux_clut224.ppm檔案生成的logo_linux_clut224.c以及logo_linux_clut224.o檔案!然後make clean;make uImage

【除錯過程中遇到的問題】

1.如果轉換的ppm格式不對,編譯核心時會直接報錯;

2.轉換的ppm格式對了(編譯核心通過沒報錯),啟動核心一直報錯(也就是沒進入到顯示開機logo介面),說明製作成的ppm的圖片大小>LCD螢幕的尺寸了,需要調整製作的ppm檔案的大小了;先調整為80*80,機子啟動能顯示logo後,慢慢往上調大ppm圖片大小

3.如果你的機子是4核的(4張logo一字排開),當前想只顯示一張即可並全屏顯示,那麼可以先設定logo居中,

logo居中:

1、設定logo圖片在螢幕中的位置

vi drivers/video/fbmem.c

找到"fb_show_logo_line"函式,把

image.dx = 0;

image.dy = y;

改為

image.dx = (info->var.xres/2) - (610/2);

image.dy = (info->var.yres/2) - (206/2);

注:

info->var.xres和info->var.yres是解析度大小

610和206是logo圖片的大小

或者如下修改

#ifdef CONFIG_LOGO_LOWERPOWER_WARNING

if(1 == get_battery_status()){
image.dx = (info->var.xres/2)-(logo->width)/2;
image.dy = (info->var.yres/2)-(logo->height)/2;
}else{
image.dx = 0;
image.dy = y;
}
#else
//image.dx = 0;
//image.dy = y;
image.dx = (info->var.xres/2)-(logo->width)/2;
       image.dy = (info->var.yres/2)-(logo->height)/2;

#endif

那麼就只顯示一張圖片了,如果此時的圖片是不全屏的,並且是該圖片與LCD螢幕的方向成90度,可以進行以下的調整:

i:先在製作ppm圖片時把方向調整為和LCD螢幕一致的方向;

ii:如何在製作ppm圖片時通過圖片->縮放功能,把ppm圖片製作成和LCD螢幕尺寸一致大小即可

--------------------------分割線---------------------------------

上面的所有方法主要總結為:

在LINUX中使用命令把畫素為800*480格式為xx.bmp或者 xx.png的圖片變成xx.ppm格式的圖片;(一般使用可牛軟體把一張xx.jpg的圖片裁剪成為畫素為800*480格式為xx.bmp或者xx.png的圖片)

或者在PC的XP作業系統中下載GIMP軟體,把xx.jpg圖片變成xx.ppm格式的圖片(這種方法很麻煩,建議少用,除非上面再Linux中用命令生成的ppm檔案都不能用)

最後修改xx.ppm格式的圖片名字為logo_linux_clut224.ppm

然後用該檔案替換舊的/usr/src/linux-2.6.8.1/drivers/video/logo/logo_linux_clut224.ppm(最好先做好備份)

然後刪除同一目錄下的logo_linux_clut224.c檔案和logo_linux_clut224.o檔案

最後make clean 

make uImage