天天看點

android init 程序學習

前言

    小生是做android系統的,結合自己的工作與看的相關資料,留下如下感悟。願與諸君分享交流,以求共同進步。不當之處望各位看官在留言中指正。

init程序總體說明

    首先我們帶着兩個問題來看本節:init程序是個什麼玩意兒?它的主要作用是什麼?

    android系統中的init程序是從原生linux系統中的init程序中繼承過來的。絕大部份功能保持一緻,但也有些許差異,它們之前的差異會在下面的内容中詳細叙述。如果非要給android系統的init程序一個類似定義的東西的話,我的了解是:   

    init程序是由linux核心啟動的第一個使用者空間的程式,主要負責系統運作環境初始化與子程序管理等相關工作。

    android系統中的init程序主要負責以下五種任務:

    1、讀取分析執行init.rc和init.{hardversion}.rc等相關初始化腳本。(與linux中init程序的主要差別點)

    2、生成裝置驅動節點。

    3、處理子程序相關消息。

    4、初始化屬性服務。

    5、顯示開機logo

各功能詳細說明

    待續。。。

工作修改執行個體

    工作中修改init程序代碼主要是為了增加以下功能:

    因為我在做android盒子,是以需要增加一個自适應螢幕分辯率大小與logo大小并讓logo居中顯示的小功能。

    實作思路如下:

        1、修改字尾名為rle的logo檔案格式,在其開頭處加上描述該檔案高度與寬度的8位元組資料。

        2、修改init源碼中的logo.c檔案,讀取rle檔案時探測是否為自定義格式。如果不是則按照以前的流程,如果是則讀取logo圖檔的高寬用做後續使用。

        3、讀取目前顯示fb的大小,并與logo圖檔的高寬一起計算得出圖檔繪制的起始位置與結束位置,其他的像素點則用宏定義的顔色進行繪制。