Android系統的開機畫面顯示過程分析(3)

2021-09-05 03:38:16 字數 2637 閱讀 9485

函式fb_find_logo實現在檔案kernel/goldfish/drivers/video/logo/logo.c檔案中,如下所示:

extern

const

struct

linux_logo logo_linux_mono;  

extern

const

struct

linux_logo logo_linux_vga16;  

extern

const

struct

linux_logo logo_linux_clut224;  

extern

const

struct

linux_logo logo_blackfin_vga16;  

extern

const

struct

linux_logo logo_blackfin_clut224;  

extern

const

struct

linux_logo logo_dec_clut224;  

extern

const

struct

linux_logo logo_mac_clut224;  

extern

const

struct

linux_logo logo_parisc_clut224;  

extern

const

struct

linux_logo logo_sgi_clut224;  

extern

const

struct

linux_logo logo_sun_clut224;  

extern

const

struct

linux_logo logo_superh_mono;  

extern

const

struct

linux_logo logo_superh_vga16;  

extern

const

struct

linux_logo logo_superh_clut224;  

extern

const

struct

linux_logo logo_m32r_clut224;  

static

intnologo;  

module_param(nologo, bool

, 0);  

module_parm_desc(nologo, "disables startup logo"

);  

/* logo's are marked __initdata. use __init_refok to tell

* modpost that it is intended that this function uses data

* marked __initdata.

*/const

struct

linux_logo * __init_refok fb_find_logo(

intdepth)  

if(depth >= 4)   

if(depth >= 8)   

return

logo;  

}  export_symbol_gpl(fb_find_logo);  

檔案開始宣告的一系列linux_logo結構體變數分別用來儲存kernel/goldfish/drivers/video/logo目錄下的一系列ppm或者pbm檔案的內容的。這些ppm或者pbm檔案都是用來描述第乙個開機畫面的。

全域性變數nologo是乙個型別為布林變數的模組引數,它的預設值等於0,表示要顯示第乙個開機畫面。在這種情況下,函式fb_find_logo就會根據引數depth的值以及不同的編譯選項來選擇第乙個開機畫面的內容,並且儲存在變數logo中返回給呼叫者。

這一步執行完成之後,第乙個開機畫面的內容就儲存在模組fbmem的全域性變數fb_logo的成員變數logo中了。這時候控制台的初始化過程也結束了,接下來系統就會執行切換控制台的操作。前面提到,當系統執行切換控制台的操作的時候,模組fbcon中的函式fbcon_switch就會被呼叫。在呼叫的過程中,就會執行顯示第乙個開機畫面的操作。

static

intfbcon_switch(

struct

vc_data *vc)  

return

1;  

}  

由於前面在準備第乙個開機畫面的內容的時候,全域性變數logo_show的值被設定為fbcon_logo_draw,因此,接下來就會呼叫函式fb_show_logo來顯示第乙個開機畫面。在顯示之前,這個函式會將全域性變數logo_shown的值設定為fg_console,後者表示系統當前可見的控制台的編號。

函式fb_show_logo實現在檔案kernel/goldfish/drivers/video/fbmem.c中,如下所示:

intfb_show_logo(

struct

fb_info *info, 

introtate)     

這個函式呼叫另外乙個函式fb_show_logo_line來進一步執行渲染第乙個開機畫面的操作。

修改Android開機畫面

android系統開機動畫包括兩部分 開機顯示的 android 文字 android發光動畫。這篇文章說的開機動畫是第一種,下面開始正文!1.製作當前螢幕畫素的 模擬器預設為320 480 使用ps製作一張320 480的,儲存時選 儲存為 web 所用格式 然後在彈開的視窗上,預設 項選擇 pn...

Android開機畫面修改

第一屏 1.將大小為480 800的png轉換為mbn格式 ffmpeg i image.png f rawvideo pix fmt rgb565 oemlogo.mbn 2把生成的oemlogo.mbn檔案放到手機的指定資料夾,覆蓋原來的 資料夾的位置我們可以通過檢視 init.rc得到 cat...

Android系統的開機畫面顯示過程分析(2)

接下來我們主要關注函式fbcon init和fbcon switch的實現,系統就是通過它來初始化和切換控制台的。在初始化的過程中,會決定是否需要準備第乙個開機畫面的內容,而在切換控制台的過程中,會決定是否需要顯示第乙個開機畫面的內容。函式fbcon init的實現如下所示 static void ...