高通平臺 開機logo 替換

高通平臺msm8916修改開機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的生成

腳本路徑device\qcom\common\display\logo\logo_gen.py

生成splash.img的步驟:

(1) sudo apt-get install python-imaging

安裝python成功後運行如下腳本:

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

這樣就可在當前目錄下生成splash.img。

燒寫 splash.img

1  
1 adb reboot bootloader         //進入bootloader模式
2 fastboot flash splas         //將鏡像刷入
3 fastboot reboot               //重啓平板電腦

 


重啓後發現還是沒有替換,需要更改一個配置:

arch/arm64/boot/dts/qcom/msm8976-mdss.dtsi

 mdss_fb0: qcom,mdss_fb_primary {
160                         cell-index = <0>;
161                         compatible = "qcom,mdss-fb";
162                         /* qcom,mdss-fb-splash-logo-enabled;*/   
163                         qcom,cont-splash-memory {
164                                 linux,contiguous-region = <&cont_splash_mem>;
165                         };
166                 };

需要註釋掉 qcom,mdss-fb-splash-logo-enabled

編寫 make bootimage

燒寫 bootimage ,重新啓動就可以了。



 


 

方法二:利用工具將圖片重新生成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 鏡像,重新開機,看到鳴人和佐助,我們可以安心的下班了啊。

發佈了52 篇原創文章 · 獲贊 19 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章