導航:首頁 > 操作系統 > android應用啟動畫面

android應用啟動畫面

發布時間:2025-09-22 17:45:45

① 怎麼修改android 啟動過程中的第二個開機畫面

第一個開機畫面是在內核啟動的過程中出現的,它是一個靜態的畫面。第二個開機畫面是在init進程啟動的過程中出現的,它也是一個靜態的畫面。第三個開機畫面是在系統服務啟動的過程中出現的,它是一個動態的畫面。無論是哪一個畫面,它們都是在一個稱為幀緩沖區(frame buffer,簡稱fb)的硬體設備上進行渲染的。接下來,我們就分別分析這三個畫面是如何在fb上顯示的。
1. 第一個開機畫面的顯示過程
Android系統的第一個開機畫面其實是Linux內核的啟動畫面。在默認情況下,這個畫面是不會出現的,除非我們在編譯內核的時候,啟用以下兩個編譯選項:
CONFIG_FRAMEBUFFER_CONSOLE
CONFIG_LOGO
第一個編譯選項表示內核支持幀緩沖區控制台,它對應的配置菜單項為:Device Drivers ---> Graphics support ---> Console display driver support ---> Framebuffer Console support。第二個編譯選項表示內核在啟動的過程中,需要顯示LOGO,它對應的配置菜單項為:Device Drivers ---> Graphics support ---> Bootup logo。配置Android內核編譯選項可以參考在Ubuntu上下載、編譯和安裝Android最新內核源代碼(Linux Kernel)一文。
幀緩沖區硬體設備在內核中有一個對應的驅動程序模塊fbmem,它實現在文件kernel/goldfish/drivers/video/fbmem.c中,它的初始化函數如下所示:

/**
* fbmem_init - init frame buffer subsystem
*
* Initialize the frame buffer subsystem.
*
* NOTE: This function is _only_ to be called by drivers/char/mem.c.
*
*/

static int __init
fbmem_init(void)
{
proc_create("fb", 0, NULL, &fb_proc_fops);

if (register_chrdev(FB_MAJOR,"fb",&fb_fops))
printk("unable to get major %d for fb devs\n", FB_MAJOR);

fb_class = class_create(THIS_MODULE, "graphics");
if (IS_ERR(fb_class)) {
printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
fb_class = NULL;
}
return 0;
}
這個函數首先調用函數proc_create在/proc目錄下創建了一個fb文件,接著又調用函數register_chrdev來注冊了一個名稱為fb的字元設備,最後調用函數class_create在/sys/class目錄下創建了一個graphics目錄,用來描述內核的圖形系統。

模塊fbmem除了會執行上述初始化工作之外,還會導出一個函數register_framebuffer:

EXPORT_SYMBOL(register_framebuffer);
這個函數在內核的啟動過程會被調用,以便用來執行注冊幀緩沖區硬體設備的操作,它的實現如下所示:

/**
* register_framebuffer - registers a frame buffer device
* @fb_info: frame buffer info structure
*
* Registers a frame buffer device @fb_info.
*
* Returns negative errno on error, or zero for success.
*
*/

int
register_framebuffer(struct fb_info *fb_info)
{
int i;
struct fb_event event;
......

if (num_registered_fb == FB_MAX)
return -ENXIO;

......

num_registered_fb++;
for (i = 0 ; i < FB_MAX; i++)
if (!registered_fb[i])
break;
fb_info->node = i;
mutex_init(&fb_info->lock);
fb_info->dev = device_create(fb_class, fb_info->device,
MKDEV(FB_MAJOR, i), NULL, "fb%d", i);
if (IS_ERR(fb_info->dev)) {
/* Not fatal */
printk(KERN_WARNING "Unable to create device for framebuffer %d; errno = %ld\n", i, PTR_ERR(fb_info->dev));
fb_info->dev = NULL;
} else
fb_init_device(fb_info);

......

registered_fb[i] = fb_info;

event.info = fb_info;
fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
return 0;
}
由於系統中可能會存在多個幀緩沖區硬體設備,因此,fbmem模塊使用一個數組registered_fb保存所有已經注冊了的幀緩沖區硬體設備,其中,每一個幀緩沖區硬體都是使用一個結構體fb_info來描述的。

閱讀全文

與android應用啟動畫面相關的資料

熱點內容
三菱PLC上傳未編譯 瀏覽:843
51單片機按鍵干擾數碼管 瀏覽:594
安卓9x怎麼設置白名單 瀏覽:425
單機游戲阿里雲伺服器 瀏覽:209
初級程序員必讀物品 瀏覽:901
職教雲題庫伺服器 瀏覽:118
解壓軟體視頻打不開 瀏覽:195
雞兔同籠python編程題 瀏覽:819
51單片機的vss 瀏覽:657
怎樣強制進入加密的電腦d盤 瀏覽:487
卡點安卓畫質怎麼調才清晰 瀏覽:738
android應用啟動畫面 瀏覽:417
horner演算法 瀏覽:427
高爾夫程序員 瀏覽:877
體檢程序員 瀏覽:658
功能測試算程序員嗎 瀏覽:608
張馳百度北京程序員 瀏覽:236
python無限遞歸 瀏覽:605
單片機中的r0和r1 瀏覽:603
程序與演算法的區別與聯系 瀏覽:467