1. 程式人生 > >高通平臺msm8916修改開機logo 高通平臺修改LK(bootloader)開機logo

高通平臺msm8916修改開機logo 高通平臺修改LK(bootloader)開機logo

經過兩天的奮戰終於把開機logo給搞定了啊。

首先修改開機logo要從哪裡入手呢?先分析一下原始碼看看. --->

複製程式碼
 1 void display_image_on_screen()
 2 {
 3     struct fbimage default_fbimg, *fbimg;
 4     bool flag = true;
 5 
 6     fbcon_clear();
 7     fbimg = fetch_image_from_partition();      //從splash映象分割槽抓取圖片
 8     if(fbimg){
 9         dprintf(CRITICAL, "
zbzhuang### ->fetch_image_from_partition\n"); 10 } 11 12 if(!fbimg) { //如果splash.img分割槽的內容不存在或者被擦除則從splash.h標頭檔案從獲取要顯示影象的陣列 13 dprintf(CRITICAL, "zbzhuang### ->not fetch_image_from_partition\n"); 14 flag = false; 15 fbimg = &default_fbimg;
16 fbimg->header.width = SPLASH_IMAGE_HEIGHT; 17 fbimg->header.height = SPLASH_IMAGE_WIDTH; 18 #if DISPLAY_TYPE_MIPI 19 fbimg->image = (unsigned char *)imageBuffer_rgb888; 20 #else 21 fbimg->image = (unsigned char *)imageBuffer; 22 #endif 23 } 24 25 fbcon_putImage(fbimg, flag);
26 }
複製程式碼

粗略的看了一下原始碼,大概可以知道要修改開機logo有兩種方式一種是通過。經過本人的驗證,對於大圖片強烈建議使用方法一,當然小圖片也可以使用方法一。方法二隻適合解析度不超過320*200的圖片,之前本人測試了無數次,驗證了很久才總結出來的啊,解析度超過320*200的一定不要使用方法二。

方法一:利用工具根據影象生成splash.img映象之後,使用fastboot重新刷splash.img分割槽。

方法二:利用工具將圖片重新生成splash.h標頭檔案的資料,替換相應的標頭檔案就OK。

方法一:利用工具根據影象生成splash.img映象之後,使用fastboot重新刷splash.img分割槽。

首先準備一張800*1280的圖片(png格式),和生成splash.img映象的指令碼工具--->logo_gen.py。

將圖片和工具都扔到伺服器上面去,並且執行下面的程式碼,就會生成splash.img的映象檔案,之後使用fastboot 命令就可以刷開機logo的圖片了啊,看到強悍的路飛我們的任務完成了啊。

1  python ./logo_gen.py lufi.png 
1 adb reboot bootloader         //進入bootloader模式
2 fastboot flash splash         //將映象刷入
3 fastboot reboot               //重啟平板電腦

方法二:利用工具將圖片重新生成splash.h標頭檔案的資料,替換相應的標頭檔案就OK。

在ubuntu下敲如下三行命令,要事先安裝好conver xxd等工具 。fire_296137.png 圖片

1 convert fire_296137.png -recolor "0 0 1,0 1 0,1 0 0" fire_296137_re.png    //將圖片重新著色BRG轉C成rgb
2 convert -depth 8 fire_296137_re.png rgb:fire_296137_raw.raw                //將png格式轉成raw圖片格式
3 xxd -i fire_296137_raw.raw > splash.h                                      //生成對於的splash.h標頭檔案的陣列

至於生成的陣列要替換Splash.h (z:\bootable\bootloader\lk\platform\msm_shared\include)  那個陣列呢?我的平板電腦是採用MIPI介面股修改第二個陣列:imageBuffer_rgb888[]陣列的內容。同時修改解析度

1 #define SPLASH_IMAGE_WIDTH     320         
2 #define SPLASH_IMAGE_HEIGHT    200 

從我剛開始貼的程式碼的第7行和第12號可知,如果splash分割槽的有圖片的映象,那麼在顯示logo的時候就優先從splash分割槽當中載入,否則從splash[]陣列中載入圖片。

因此我們要從splas[]陣列當中載入圖片一定要擦除splash分割槽:之後才可以成功的從splash.h標頭檔案的陣列中顯示圖片,或者註釋第7行程式碼強制跳過從splash分割槽載入映象,修改了原始碼之後只需要重新編譯原始碼,之後重新燒錄aboot映象就可啦。

1 rm out/target/product/msm8916_64/emmc_appsboot.mbn    //編譯之前一定要先刪除,避免沒有重新編譯改動過的檔案
2 make aboot -j8                                        //單獨編譯lk映象

使用fastboot命令重新燒錄aboot 映象,重新開機,看到鳴人和佐助,我們可以安心的下班了啊。

轉載自:http://blog.csdn.net/u011006622/article/details/62227231

一,怎麼更改bootloader裡的logo圖片:

1 首先得拿到圖片,格式要求是png, 色深8bit, 且不帶alpha(透明色)通道的

2 將 png檔案轉換成raw檔案

convert Android.png -depth 8 rgb:Android.raw

3 對於某些屏(只支援RGB565才需要此步驟),將raw檔案轉換成565格式的raw檔案, android 自帶了一個這樣的工具,在out/host/Linux-x86/bin

./rgb2565 android.raw android.raw565

4 將android.raw或android.raw565轉換成原始陣列

xxd -i android.raw565 > android_logo.h 
xxd -i android.raw > android_logo.h

複製android_logo.h中的陣列,替換bootable\bootloader\lk\platform\msm_shared\include\Splash.h中相應的imageBuffer_rgb888[]陣列;
注意:splash.h檔案中,有imageBuffer[]imageBuffer_rgb888[] 兩個陣列。利用一個預編譯進行判斷
  1. #if (!DISPLAY_TYPE_MIPI)
根據自己的實際情況修改對應的陣列 
修改巨集的值:
  1. #define SPLASH_IMAGE_WIDTH     124    
  2. #define SPLASH_IMAGE_HEIGHT    113    
SPLASH_IMAGE_WIDTH對應logo.png的高度
SPLASH_IMAGE_HEIGHT對應logo.png的寬度
編譯lk燒寫驗證。 二,企鵝介面對應splash.img的生成

device\qcom\common\display\logo\logo_gen.py,生成splash.img的步驟:

(1) sudo apt-get install Python-imaging

(2) Python ./logo_gen.py snapdragon.png

這樣就可在當前目錄下生成splash.img,圖片要求png格式,且且色深為8-bit的RGB或者RGBA格式。