1. 程式人生 > >修改和製作Android開機Logo(最終版)

修改和製作Android開機Logo(最終版)

以下在Telechips tcc8900上,用Android 2.3的原始碼編譯通過

1.bootloader圖片修改
     bootable\bootloader\lk\platform\tcc_shared\include\lcd\logo.h替換就行了

     logo.h的製作:準備一張圖片,然後用Img2Lcd工具把圖片轉成C語言陣列

注意:在使用Img2Lcd工具轉換的圖片最左邊會有一條白邊,把陣列中前8個數值刪除就不會有這樣的情況。

2.kernel圖片(linux logo)原來是沒有的,需要先在menuconfig中加入配置Device Driver---Graphic support---Bootup Logo中選中224 color
然後把自己的LOGO(png-8格式)轉換成ppm格式,替換這個檔案,同時刪除logo_linux_clut224.c logo_linux_clut224.o檔案,重新編譯。(/drivers/video/logo/logo_linux_clut224.ppm 是預設的啟動LOGO圖片格式為ppm)

ppm圖片的生成:
# pngtopnm logo_linux_clut224.png > logo_linux_clut224.pnm
# pnmquant 224 logo_linux_clut224.pnm > logo_linux_clut224.pnm(如果執行出錯,可以省略)
# pnmtoplainpnm logo_linux_clut224.pnm > logo_linux_clut224.ppm

注意:使用pngtopnm ,pnmquant ,pnmtoplainpnm 工具前要先安裝,在虛擬機器下sudo apt-get install netpbm 這三個工具會安裝好。

設定圖片居中顯示:
修改drivers/video/fbmem.c
/*modified by creatory*/
// image.dx=0;
// image.dy=y;
 image.dx=(info->var.xres/2)-(logo->width/2);
 image.dy=(info->var.yres/2)-(logo->height/2);
在drivers/video/console/fbcon.c檔案中的
logo_height=fb_prepare_logo(info,ops->rotate);
下面加入
logo_height += (info->var.yres/2)-(logo_height/2);

3.device\telechips\common\initlogo800x480.rle替換,同時刪除out\target\product\tcc8900\ramdisk.img,ramdisk-recovery.img,再重新編譯。

這張圖片是telechips加入的logo圖片,製作和修改方法如下:

1). 製作當前螢幕畫素的圖片(模擬器預設為320*480)
 使用PS製作一張800*480的圖片,儲存時選“儲存為 Web 所用格式”,然後在彈開的視窗上,“預設”項選擇“PNG-24”,儲存為android_logo.png(

注:好像只支援png-24,其他格式生成的rle檔案顯示不正常,有興趣大家可以再驗證一下。

2). 將圖片轉換為raw格式
 使用linux下的ImageMagick自帶的convert命令,進行raw格式轉換,命令為:
  convert -depth 8 android_logo.png rgb:android_logo.raw

 注:ubuntu 10.04 預設已經安裝ImgageMagick工具,如果當前系統沒有安裝,可以執行下面的命令安裝:
  sudo apt-get install imagemagick

3. 將raw格式轉化為rle檔案
 需要用到android編譯後的rgb2565工具,在android/out/host/linux-x86/bin目錄下(android為當前原始碼所在目錄),轉換命令如下:
 rgb2565 -rle < android_logo.raw > initlogo.rle

到目前為止,啟動需要顯示的影象已經做好了,就是initlogo.rle,注意檔名必須是這個,如果想改檔名,需要修改

android/system/core/init/init.h中的巨集:
 #define INIT_IMAGE_FILE "/initlogo.rle"

============================================================================================

下面需要將initlogo.rle加入的android檔案系統中
以下的4,5,6,7,需要先進行如下設定,把initlogo.rle放入device\telechips\common\,刪除ramdisk.img之類的相關的檔案重新make即可。

4). 找到ramdisk.img檔案(android/out/target/product/generic/ramdisk.img),將檔名改為ramdisk.img.gz,然後使用下面的命令解壓:
 gunzip ramdisk.img.gz
 解壓後得到ramdisk.img,可能有人要問,怎麼檔名又改回去了?其實不然,使用file ramdisk.img檢視一下就知道了:
 解壓前:ramdisk.img: gzip compressed data, from Unix
 解壓後:ramdisk.img: ASCII cpio archive (SVR4 with no CRC)
 跑題了,還是說正事兒。

5). 使用cpio提取檔案:
 新建一個temp目錄:
 mkdir temp
 cd temp
 cpio -i -F ../ramdisk.img

6). 匯出檔案列表:
 cpio -i -t -F ../ramdisk.img > list      

 注:list是一個文字檔案,裡面儲存了ramdisk.img的檔案結構,我們需要在這個檔案中加入initlogo.rle這一行,修改後的檔案如下:
 data

 default.prop

 dev

 init

 init.goldfish.rc

 init.rc

 initlogo.rle

 proc

 sbin

 sbin/adbd

 sys

 system
7). 生成ramdisk.img
 cpio -o -H newc -O ramdisk.img < list

 注:根據list檔案的描述,生成ramdisk.img檔案

8). 用ramdisk.img覆蓋sdk目錄下的ramdisk.img(android-sdk-windows/platforms/android-2.1/images/ramdisk.img),最好先備份一下。