修改linux/Android啟動logo/開機畫面
轉載請註明出處:http://blog.csdn.net/drivelinux/article/details/8593788
此處有兩種情況,一種情況是通過uboot提供的logo顯示功能顯示開機logo,另一種情況是通過定製顯示函式來進行logo的顯示。
對於第一種情況,只需要在tools/logos目錄下新增自己的logo圖片xxx_logo.bmp(需要為bmp格式並且位深度為8),並修改tools目錄下的makefile檔案即可。在makefile檔案中的相應位置加入如下程式碼:
ifeq ($(VENDOR),xxx)
LOGO_BMP= logos/xxx_logo.bmp
endif
對於第二種情況,一般需要自己將bmp檔案儲存到陣列中,並在程式中將陣列中的圖片資料寫入到lcd緩衝區進行logo的顯示。
此時,按如下步驟進行操作:
1.製作一張logo,並儲存為uboot_logo.bmp檔案;
2.在linux作業系統中,執行命令:gzip -9 uboot_logo.bmp,對圖片進行壓縮並生成uboot_logo.bmp.gz檔案;
3.執行xxd -i uboot_logo.bmp.gz > uboot_logo.h,壓縮後的圖片資料轉化為陣列並儲存成.h檔案;
4.利用uboot_logo.h檔案裡的陣列進行logo的顯示即可。
此處,需要將圖片進行gzip壓縮,否則可能會出現“Bad gzipped data uboot”的錯誤提示,並且無法顯示logo。
安裝完以後就會生成pngtopnm、pnmquant、pnmtoplainpnm三個工具。
pnmquant 224 mylogo.pnm > mylogo224.pnm
pnmtoplainpnm mylogo224.pnm > logo_linux_clut224.ppm
convert -depth 8 android_logo.png rgb:android_logo.raw
如果當前系統沒有安裝該工具,可以執行下面的命令安裝:
sudo apt-get install imagemagick
rgb2565 -rle < android_logo.raw > initlogo.rle
至此,需要顯示的影象已經做好了,即initlogo.rle。
console_init_action();
-> load_565rle_image(INIT_IMAGE_FILE) ;
-> unlink(fn);
函式中的巨集在對應的標頭檔案android/system/core/init/init.h中定義:
#define INIT_IMAGE_FILE "/initlogo.rle"
對於可讀寫型的檔案系統而言,當第一次開機並顯示logo後,上述unlink(fn)函式會將該logo刪除,第二次開機時就不能再顯示這一logo了。解決辦法有兩個,一是註釋掉unlink(fn)函式,但是儘量不要修改原始碼。二是在out\target\product\xxxx\root目錄下,拷貝initlogo.rle的副本,並命名為initlogo.rle.bak,直接用initlogo.rle.bak檔案替換initlogo.rle也可以,不過原因還不清楚。
用winRAR 開啟android\out\target\product\xxxx\system\framework目錄下的framework-res.apk檔案,用預顯示的圖片替換assets\images下相應的圖片即可。
按上述方法能夠改變開機logo,但是由於修改的是out目錄下生成的檔案,改動對android原始碼並沒有影響,因此,若清除編譯的目標檔案並重新編譯時,修改過的logo又被原始碼中的固有logo覆蓋了。所以要修改原始碼中與logo有關的部分。具體做法是,修改/frameworks/base/core/res/assets/images/目錄下的png圖片,修改後再重新編譯就依然是我們修改後的logo了。
與這一logo顯示相關的原始碼在/frameworks/base/cmds/bootanimation/bootanimation.cp檔案中,具體函式為bool BootAnimation::android()。
一、修改uboot顯示開機logo
此處有兩種情況,一種情況是通過uboot提供的logo顯示功能顯示開機logo,另一種情況是通過定製顯示函式來進行logo的顯示。
對於第一種情況,只需要在tools/logos目錄下新增自己的logo圖片xxx_logo.bmp(需要為bmp格式並且位深度為8),並修改tools目錄下的makefile檔案即可。在makefile檔案中的相應位置加入如下程式碼:
ifeq ($(VENDOR),xxx)
LOGO_BMP= logos/xxx_logo.bmp
endif
對於第二種情況,一般需要自己將bmp檔案儲存到陣列中,並在程式中將陣列中的圖片資料寫入到lcd緩衝區進行logo的顯示。
此時,按如下步驟進行操作:
1.製作一張logo,並儲存為uboot_logo.bmp檔案;
2.在linux作業系統中,執行命令:gzip -9 uboot_logo.bmp,對圖片進行壓縮並生成uboot_logo.bmp.gz檔案;
3.執行xxd -i uboot_logo.bmp.gz > uboot_logo.h,壓縮後的圖片資料轉化為陣列並儲存成.h檔案;
4.利用uboot_logo.h檔案裡的陣列進行logo的顯示即可。
此處,需要將圖片進行gzip壓縮,否則可能會出現“Bad gzipped data uboot”的錯誤提示,並且無法顯示logo。
二、修改由kernel顯示的開機logo
1、安裝pngtopnm
sudo apt-get install netpbm安裝完以後就會生成pngtopnm、pnmquant、pnmtoplainpnm三個工具。
2、製作logo圖片
將logo圖片儲存為mylogo.png,注意副檔名為png。3、製作.ppm格式的圖片
pngtopnm mylogo.png > mylogo.pnmpnmquant 224 mylogo.pnm > mylogo224.pnm
pnmtoplainpnm mylogo224.pnm > logo_linux_clut224.ppm
4.拷貝檔案到相應目錄
用logo_linux_clut224.ppm替換kernel/drivers/video/logo目錄下的同名檔案,刪除對應的.o檔案並重新編譯核心即可。5.核心的配置
核心中除了要選中 Graphics support項下的 Bootup logo配置項外,還要選中 Console display driver support配置項。否則kernel不會顯示logo。三、修改由Android系統顯示的靜態開機畫面
1. 製作要顯示的圖片
使用PS製作一張和當前lcd解析度相同的圖片,儲存時選“儲存為 Web 所用格式”,然後在彈開的視窗上,“預設”項選擇“PNG-24”,儲存為android_logo.png。2. 將圖片轉換為raw格式
使用linux下的ImageMagick自帶的convert命令,進行raw格式轉換,命令為:convert -depth 8 android_logo.png rgb:android_logo.raw
如果當前系統沒有安裝該工具,可以執行下面的命令安裝:
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。
4.將initlogo.rle拷貝到檔案系統中
將initlogo.rle拷貝到out\target\product\pantherboard\root下,並替換同名檔案。然後重新制作檔案系統映像並燒寫即可。5.特別說明
該圖片是在system/core/init/init.c檔案中顯示的,具體函式呼叫過程如下:console_init_action();
-> load_565rle_image(INIT_IMAGE_FILE) ;
-> unlink(fn);
函式中的巨集在對應的標頭檔案android/system/core/init/init.h中定義:
#define INIT_IMAGE_FILE "/initlogo.rle"
對於可讀寫型的檔案系統而言,當第一次開機並顯示logo後,上述unlink(fn)函式會將該logo刪除,第二次開機時就不能再顯示這一logo了。解決辦法有兩個,一是註釋掉unlink(fn)函式,但是儘量不要修改原始碼。二是在out\target\product\xxxx\root目錄下,拷貝initlogo.rle的副本,並命名為initlogo.rle.bak,直接用initlogo.rle.bak檔案替換initlogo.rle也可以,不過原因還不清楚。
四、修改由Android顯示的“android”文字開機動畫
用winRAR 開啟android\out\target\product\xxxx\system\framework目錄下的framework-res.apk檔案,用預顯示的圖片替換assets\images下相應的圖片即可。
按上述方法能夠改變開機logo,但是由於修改的是out目錄下生成的檔案,改動對android原始碼並沒有影響,因此,若清除編譯的目標檔案並重新編譯時,修改過的logo又被原始碼中的固有logo覆蓋了。所以要修改原始碼中與logo有關的部分。具體做法是,修改/frameworks/base/core/res/assets/images/目錄下的png圖片,修改後再重新編譯就依然是我們修改後的logo了。
與這一logo顯示相關的原始碼在/frameworks/base/cmds/bootanimation/bootanimation.cp檔案中,具體函式為bool BootAnimation::android()。
相關文章
- win10怎麼修改開機畫面_win10開機畫面怎麼換Win10
- 修改yocto系統啟動logoGo
- 小白自制Linux開發板 九. 修改開機LogoLinuxGo
- win10如何更改啟動頁面_win10要怎樣修改開機啟動畫面Win10動畫
- vmware開啟虛擬機器就藍色畫面重啟 vmware虛擬機器藍色畫面解決方法虛擬機
- Win10系統怎麼修改開機logo win10系統修改開機logo的方法Win10Go
- android APP開機自動啟動AndroidAPP
- win10開機logo怎麼修改_win10自定義開機logo如何操作Win10Go
- Linux開機啟動(bootstrap)Linuxboot
- Android開機自啟動程式Android
- 開機自動啟動ORACLE ON LinuxOracleLinux
- 如何更改window10開機啟動程式_win10如何修改開機啟動程式Win10
- 電腦藍色畫面怎麼解決開不了機 電腦藍色畫面無法正常啟動的解決辦法
- Linux開機自啟動配置Linux
- linux設定開機啟動Linux
- Linux 新增開機自啟動Linux
- Linux下開機自動啟動OracleLinuxOracle
- linux開機自動啟動指令碼Linux指令碼
- linux下開機自動開啟單機oracleLinuxOracle
- AHCI開啟藍色畫面解決方法
- 【Linux】建立linux開機啟動檔案Linux
- Linux 開機引導和啟動Linux
- 簡述Linux開機啟動流程Linux
- Linux tomcat 新增開機啟動LinuxTomcat
- 開機自動啟動應用程式 ON LinuxLinux
- uboot開機logobootGo
- win10自動重啟藍色畫面怎麼辦_win10藍色畫面自動重啟解決方法Win10
- win10藍色畫面無法啟動怎麼解決 win10開機藍色畫面無法進入系統修復方法Win10
- Linux 新增指令碼開機自啟動Linux指令碼
- Linux 下軟體開機自啟動Linux
- linux7 開機自啟動oracleLinuxOracle
- Linux 系統開機啟動項清理Linux
- linux 中oracle開機啟動設定LinuxOracle
- 【OEM】Oracle oem取消開機自動啟動(linux)OracleLinux
- Android如何獲取開機啟動項列表Android
- win10開機藍色畫面0xc000021a的解救方法_win10啟動藍色畫面0xc000021a如何修復Win10
- 如何修改 Linux 的 GRUB 啟動背景Linux
- win10怎麼新增啟動項_win10如何修改開機啟動項Win10