修改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