高通平臺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 鏡像,重新開機,看到鳴人和佐助,我們可以安心的下班了啊。