接下來我們主要關注函式fbcon_init和fbcon_switch的實現,系統就是通過它來初始化和切換控制台的。在初始化的過程中,會決定是否需要準備第乙個開機畫面的內容,而在切換控制台的過程中,會決定是否需要顯示第乙個開機畫面的內容。
函式fbcon_init的實現如下所示:
static
void
fbcon_init(
struct
vc_data *vc,
intinit)
當前正在初始化的控制台使用引數vc來描述,而它的成員變數vc_num用來描述當前正在初始化的控制台的編號。通過這個編號之後,就可以在全域性陣列con2fb_map中找到對應的幀緩衝區硬體裝置編號。有了幀緩衝區硬體裝置編號之後,就可以在另外乙個全域性陣列中registered_fb中找到乙個fb_info結構體info,用來描述與當前正在初始化的控制台所對應的幀緩衝區硬體裝置。
引數vc的成員變數vc_display_fg用來描述系統當前可見的控制台,它是乙個型別為vc_data**的指標。從這裡就可以看出,最終得到的vc_data結構體svc就是用來描述系統當前可見的控制台的。
變數logo開始的時候被設定為1,表示需要顯示第乙個開機畫面,但是在以下三種情況下,它的值會被設定為0,表示不需要顯示開機畫面:
a. 引數vc和變數svc指向的不是同乙個vc_data結構體,即當前正在初始化的控制台不是系統當前可見的控制台。
b. 全域性變數logo_shown的值等於fbcon_logo_dontshow,即系統不需要顯示第乙個開機畫面。
c. 與當前正在初始化的控制台所對應的幀緩衝區硬體裝置的顯示方式被設定為文字方式,即info->fix.type的值等於fb_type_text。
當最終得到的變數logo的值等於1的時候,接下來就會呼叫函式fbcon_prepare_logo來準備要顯示的第乙個開機畫面的內容。
在函式fbcon_prepare_logo中,第乙個開機畫面的內容是通過呼叫函式fb_prepare_logo來準備的,如下所示:
static
void
fbcon_prepare_logo(
struct
vc_data *vc,
struct
fb_info *info,
intcols,
introws,
intnew_cols,
intnew_rows)
else
if(logo_shown != fbcon_logo_dontshow)
}
從函式fb_prepare_logo返回來之後,如果要顯示的第乙個開機畫面所占用的控制台行數小於等於引數vc所描述的控制台的最大行數,並且全域性變數logo_show的值不等於fbcon_logo_draw,那麼就說明前面所提到的第乙個開機畫面可以顯示在控制台中。這時候全域性變數logo_show的值就會被設定為fbcon_logo_draw,表示第乙個開機畫面處於等待渲染的狀態。
函式fb_prepare_logo實現在檔案kernel/goldfish/drivers/video/fbmem.c中,如下所示:
intfb_prepare_logo(
struct
fb_info *info,
introtate)
if(info->fix.visual == fb_visual_static_pseudocolor && depth > 4)
/* return if no suitable logo was found */
fb_logo.logo = fb_find_logo(depth);
......
return
fb_prepare_extra_logos(info, fb_logo.logo->height, yres);
} 這個函式首先得到引數info所描述的幀緩衝區硬體裝置的顏色深度depth,接著再呼叫函式fb_find_logo來獲得要顯示的第乙個開機畫面的內容,並且儲存在全域性變數fb_logo的成員變數logo中。
修改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 ...