平台資訊:
核心:linux2.6/linux3.0
系統:android/android
平台:s5pv310(samsungexynos4210/4412)
作者:xubin341719(歡迎轉載,請注明作者)
android開logo,這一塊在工作改動的也是比較多的,也比較簡單,不同的公司,不同型号的産品,開機的辨別不一樣。
我們平時目測的開機logo一般是兩種:靜态的和動畫的。其實在實作logo的過程中,有四幅圖檔:(1)、uboot顯示;(2)、kernel顯示logo_linux_clut244.ppm;(3)、android第一幅intilogo.rle;(4)、android第二幅,bootanimation。前三幅一般我們做成相同的,(4)為動畫顯示。啟動過程如下所示。
這篇重點說一下要用到的檔案怎麼生成,程式方面的就不再去深入,這一塊的代碼量也不小,一般不需要額什麼改動。uboot的logo會影響開機的速度,我們也沒有做這一塊,uboot啟動還是比較快,幾秒鐘的黑屏大家還是可以接受。下面從核心logo說起。
一、核心logo
** 1、核心目錄中 make menuconfig ** device drivers ---->graphics support
---->bootup logo ----> standard 224-color linux logo
把開機logo圖檔儲存為bmp或者png格式:如linux.png;linux.bmp通過linux工具把圖檔轉化為:ppm格式。替換:driver/video/logo/logo_linux_clut244.ppm
下面指令需要安裝netpbm的工具包 如果沒有:sudo apt-get install netpbm
我做的實驗,包括腳本可以在這裡下載下傳:
(1)、png格式圖檔,執行下面指令
可以把上面指令寫成一個腳本,這樣使用更友善:
kernellogo_png.sh
如下圖:①cat ./kenrellogo_png.sh 檢視腳本内容,如下面所解釋
②./kenrellogo_png.sh 執行腳本
③ls檢視到生成的logo_linux_clut224.ppm
(1)、bmp格式的圖檔
腳本為kenrellogo_bmp.sh
把logo_linux_clut224.ppm拷貝到制作好的logo檔案到 /drivers/video/logo 檔案夾替換
logo_linux_clut224.ppm 檔案,删除該檔案夾下的logo_linux_clut224.o,編譯燒錄,就可以看到你所更改的圖檔。
二、android logo
1、android第一張logo
(1)找一張.png格式的圖檔,使用linux下的imagemagick自帶的convert指令,進行raw格式轉換,指令為:
(2)、需要用到android編譯後的rgb2565工具,在android/out/host/linux-x86/bin目錄下(android為目前源碼所在目錄),轉換指令如下:
注:ubuntu10.04 預設已經安裝imgagemagick工具,如果目前系統沒有安裝,可以執行下面的指令安裝:
sudo apt-getinstall imagemagick
為了友善,我們把rgb2565這個bin檔案,拷貝到我們做動畫的檔案夾中。同上面也寫一個腳本出來:
android_rle.sh
啟動需要顯示的圖像已經做好了,就是initlogo.rle,注意檔案名必須是這個,如果想改檔案名,需要修改android/system/core/init/init.h中的宏:
放到相的目錄下就行了.
1、**android第二張圖檔(動畫)
**(1)、開機動畫檔案為:/system/media/bootanimation.zip是一個标準的zip檔案,不過設定壓縮率時選擇存儲。
(2)、linux下用指令打包:
zip -r -x -zstore ../bootanimation part*/*.png desc.txt
(3)、壓縮包的結構:
①part 這個檔案夾中為我們所顯示的png圖檔
②desc.txt中的内容我們要分析下,圖檔美工去做,我們要讓正常顯示就要在這裡面寫一些值。看下裡面的内容
補充:initlogo.rle相關資訊:
androidinitlogo.rle
關鍵詞:androidinitlogo.rle 開機畫面
系統:android/android4.0.3
平台:samsung
exynos 4210、exynos 4412 、exynos 5250
相應代碼下載下傳連結:
平台比較極品,initlogo.rle這個圖檔都顯示不正常,要改一些代碼,你說急這點事,他們做bsp的時候為什麼不完善??牢騷歸牢騷,事情還是要做的。
我們的現象是:在加載initlogo.rle時,顯示兩個小圖檔(本來設計的是一個),下面我們從代碼分析是怎麼實作的。
一、initlogo.rle在console_init_action這個函數中實作
路徑android/system/core/init/init.c
1、顯示第二張logo;
load_565rle_image(init_image_file):
(1)、init_image_file
在android/system/core/init/init.h中定義,就是指定我們生成圖檔的路徑;
(2)、load_565rle_image這個函數的實作,這個裡面牽扯到一個資料格式的問題,16bpp,32bpp……如果不對照,顯示的是花屏。
2、如果不行,顯示“android”字樣;
如果load_565rle_image失敗,則隻顯示android字樣;
二、下面我們重點分析load_565rle_image這個函數
android/system/core/init/logo.c
1、這部分對fb的操作,這裡就不詳細說了;
2、得到螢幕最大的緩存空間;
擷取螢幕的參數;
3、16bpp;
4、32bpp;
5、顯示完成,釋放記憶體;
聲明:eoe文章著作權屬于作者,受法律保護,轉載時請務必以超連結形式附帶如下資訊
原文作者:
原文位址: