標籤:系統原理
轉載請註明出處:http://blog.csdn.net/droyon/article/details/38022887
Linux啟動流程大體分三歩:1、開機啟動bootloader。2、作業系統核心初始化。3、執行第一個應用程式。
1、開機就是給硬體裝置上電,在上電過程中cpu的作用是執行執行,故而,只有其他硬體裝置初始化ok,cpu執行指令才有意義,故而cpu最後上電。
cpu複位完畢就開始執行固定記憶體的程式指令,此時的執行所在的程式稱作“bootloader”引導程式。用於裝載使用者程式。裝載需要應用程式地址。
2、核心初始化。除bootloader以為的程式,在cpu看來都是使用者程式。故而此時的核心程式就是上一步中的應用程式。從軟體的角度來說,又可分為“核心程式”,應用程式。
核心程式的作用是初始化各種硬體,包括記憶體、網路介面,顯示器,輸入裝置等。執行完這些核心程式就開始執行應用程式了。
3、第一個應用程式就是Home程式。就是Launcher,用於管理各種App。Launcher提供一種入口進而啟動其他應用程式。
Android所使用的Linux架構:
1、處理器複位完畢,執行唯讀ROM區的程式,此程式就是bootloader。這段程式會從處理器的引腳高低電平狀態裝載應用程式。比如:usb口,串口,sd卡,並口flash等。
多數會從NAND Flash晶片中的0X00000000地址開始裝載程式。對於小型嵌入式系統,此段程式就是最終要執行的程式。但對android而言,該地址中的程式還不是android應用程式,只是uboot或者fastboot程式,其作用是初始化硬體裝置。比如網口。同時提供刷機(核心燒寫、升級)也就是向NAND Flash中寫入新的資料。
uboot執行時,會檢測一些特定按鍵,這些按鍵是uboot在編譯時間預先約定好的,用於進入偵錯模式。例如:電源鍵 + 音量下鍵。 如果使用者沒有按這些按鍵,則uboot會跳過載入偵錯模式,進入NADN Flash中裝載核心程式。裝載地址由uboot指定。
2、Linux核心裝載完畢後,開始執行核心初始化。
android核心會載入init.rc檔案,根據此指令檔初始化應用程式。
言歸正傳,上述為android核心啟動流程,對於Linux來說,Android系統僅僅是其一個應用程式。應用程式套件組合含很多進程,android系統第一個應用進程就是zygote,這個進程就是LInux進程根據上述init.rc中配置資訊啟動的。zygote是一個中心進程,他會孵化其他應用進程,包含我們每一個apk所在的進程。
zygote進程主要包括兩個模組。1、socket服務端:用於接受並啟動新Dalvik進程的命令。每一個apk進程都是一個新的dalvik虛擬機器進程,我們可以直接使用dalvik虛擬機器識別的java程式開發android應用程式。2、Framework共用類和資源。載入preload-classes,preload-resources定義的類和資源。
zygote是android第一個進程,其應用程式名稱為:app_process,位於system/bin下。zygote是第一個應用程式,其孵化的第一個應用程式叫做system server,也運行在app_process中。
framework啟動流程之android應用程式