日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 系统开发】 Android 系统启动流程简介

發布時間:2025/6/17 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 系统开发】 Android 系统启动流程简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 : 萬境絕塵?(octopus_truth@163.com)

轉載請注明出處 :?http://blog.csdn.net/shulianghan/article/details/38895481


Android 系統啟動總結 : Android 系統啟動分底層 Linux 內核啟動 和 應用系統啟動;

-- 底層系統啟動 : 系統上電, bootloader 啟動, linux kernel 啟動, init 進程啟動;

-- 應用系統啟動 : init 進程啟動關鍵的進程如 Zygote 進程System Server 等系統服務, 之后進入 Home 界面;



一. Android 底層系統啟動流程(Bootloader Kernel init)



1. 系統上電 執行 ROM 引導代碼



(1) Android 系統執行的操作


Android 底層上電流程 : CPU 上電 --> PC 指向 ROM 啟動代碼零地址 --> 直接執行啟動代碼 / 將啟動代碼載入 RAM 后執行

-- CPU 上電 : 首先 Android 系統的 CPU 上電復位;?

-- 程序指針指向?: 復位時 PC 指針指向 ROM 的零地址, 即 Android 系統的啟動代碼的地址;

-- 直接執行代碼 : 從 零地址 讀取可執行代碼直接運行;

-- 轉載代碼到RAM再執行 : 將執行代碼載入到 CPU 的 RAM 中執行;


啟動代碼介紹 :?啟動代碼?固化在 ROM 中, CPU 復位上電后, PC 指向 ROM 中代碼的初始地址 即 零地址, 并執行該代碼;



(2) PC 啟動與 Android 啟動比較


PC 啟動系統機制 : ROM 分類BIOS 作用 (初始化硬件設備, 載入硬盤運行);

-- 啟動 ROM 分類 : 包括 PROM, EPROM, EEPROM三種;

-- ROM 中的啟動程序 BIOS : BIOS 是 PC 的啟動代碼, 其作用是初始化硬件設備, BIOS 被載入到硬盤的扇區 MBR 之后運行并開始引導操作系統;


Android 系統機制 : ROM 分類 和 Bootloader 啟動程序;

-- 啟動 ROM 分類 : Android 中的 啟動 ROM 分為 NOR FlashNAND Flash 兩種;

-- ROM 中的啟動程序 Bootloader : Bootloader 地址是 CPU 復位后指向的地址, 即零地址;


(3) Bootloader 啟動方式簡介


Bootloader 啟動位置 : Bootloader 在 ROM 中直接啟動 還是 裝載到 RAM 中啟動取決與 ROM 是否可以按字節尋址;

-- 按字節尋址的 ROM : NOR Flash 可以按字節尋址, Bootloader 可以直接在 ROM 中執行;

-- 不可字節尋址 ROM : NAND Flash 不支持按字節尋址, Bootloader 需要先載入到 CPU 的 RAM 中, 然后在執行;



(4) NOR Flash 啟動過程


啟動方式總結 : 直接執行 Bootloader -> 寫寄存器 -> 配置模塊 -> 復制代碼到內存中 -> PC 指向零地址 -> 地址映射 -> 執行映射的啟動代碼;


注意 : 這種情況是將 Bootloader 燒寫入 NOR Flash 中的情況, 與現在最新的 CPU 內置 ROM 方式不同;


NOR Flash 啟動過程 : 這種 ROM 支持字節尋址, 固化在其中的啟動代碼(Bootloader)可以按照順序執行;

-- 開始啟動 : Bootloader 存放在 NOR Flash 零地址, CPU 復位后 PC 指向零地址, 開始執行 Bootloader;

-- 寫寄存器 : 配置 EMI 寄存器, 該寄存器存儲設置好的各存儲器地址 和 存取規則;

-- 模塊配置 : 配置電源管理模塊, 使各個模塊上電;

-- 復制代碼 : 為了提高執行效率, 將 NOR Flash 中的代碼復制到內存中;

-- PC指針 : PC 指針指向 NOR Flash 零地址, 開始執行啟動代碼;

-- 地址映射 : 啟動代碼執行后, 會將啟動代碼所在的 零地址 映射到 內存 RAM 空間;

-- RAM執行 : PC 指針指向 RAM 中映射的地址, 開始執行啟動代碼;



(5) NAND Flash 啟動過程


注意 : 這種情況是將 Bootloader 燒寫入 NAND Flash 中啟動代碼執行流程;


NAND Flash 啟動過程 :?

-- 搬運代碼到內部 RAM : CPU 上電復位之后, DMA 將 NAND Flash 中的 Bootloader 啟動代碼搬運到 CPU 內部的 RAM 中, 設置 PC 到 RAM 代碼地址, 開始執行 Bootloader;

-- 設置配置 向量 : Bootloader 會執行 設置中斷向量, 設置硬件配置 操作;

-- 搬運代碼到外部 RAM : 計算出 Bootloader 所占大小, 預留出 Bootloader 空間大小, 將執行代碼搬運到 SDRAM 或 DD-RAM 外部 RAM 中;

-- 搬運 Bootloader : 將 Bootloader 代碼搬運到 SDRAM 或 DDR-RAM 中的首地址;

-- 地址映射 : 設置 Remap, 映射 0 地址到 SDRAM 或者 DDR-RAM 首地址;

-- 執行Bootloader : 設置 PC 指針到 零地址, 執行 Bootloader;



(6) Bootloader 燒錄工藝


MASK 燒錄 : 早期的?ROM PROM 通過 MASK 植入啟動代碼;


燒錄器 : EPROM EEPROM 通過燒錄器燒入啟動代碼, 之后貼片焊接;


JTAG 調試器 : NOR FlashNAND Flash 通過 JTAG 調試器連接 CPU 的 JTAG 調試接口PC 機, 將編譯好的 Bootloader 燒入 NOR Flash 和 NAND Flash 指定地址;


CPU 內置 ROM :?

-- 固化代碼 : CPU 再內置的 ROM 中固化一段代碼, 這段代碼不是 Bootloader;

-- 代碼作用 : 這段代碼啟動后可以與 PC 連接, 直接使用網絡接口 或 USB 接口便可以連接 PC, 不再依賴 JTAG 調試器燒錄, 速度和效率也提高了;



2. Bootloader 引導程序簡介



(1) Bootloader 作用


Bootloader 作用 : 初始化硬件設備, 建立內存空間映射圖, 為內核啟動準備好軟件, 硬件環境;

-- 類似 BIOS : Bootloader 本質與 PC 上的 BIOS 相同, 都是為 操作系統 初始化 軟件, 硬件環境;



(2) Bootloader 加密


加密簡介 :?

-- 加鎖原因 : 手機廠商為了實現 系統價值, 穩定運行, 用戶信息安全 等功能, 會對 Bootloader 進行加鎖;

-- 加鎖局限 : Bootloader 加鎖后只能引導指定手機廠商的 硬件, 內核, 和操作系統, 不能識別其他廠商硬件;?

-- 解鎖隱患 : Bootloader 一旦解鎖, 對用戶來說 : 存在潛在的穩定性系統安全問題; 對廠商來說 : 手機可以隨意刷寫 淪為硬件平臺;?



3. Linux 內核



(1) Linux 內核鏡像


Linux 內核鏡像 : Linux 內核有兩種鏡像 Image 和 zImage;

-- Image (非壓縮內核) : 沒有經過壓縮的內核鏡像, 占用空間大, 執行速度快;

-- zImage (壓縮內核) : Image 經過壓縮后的內核鏡像, 占用空間小, 但是執行的時候需要解壓縮, 執行效率慢;

-- 嵌入式選擇 : 嵌入式系統中空間比較小, 通常采用 zImage 壓縮鏡像, 犧牲一點執行效率換取較少的存儲空間;



(2) 內核啟動流程


Kernel 啟動流程 : 內核初始化 -> 設備驅動初始化 -> 內核啟動 -> 掛載文件系統 -> 啟動用戶空間進程;



(3) 內核初始化


內核初始化 : 主要對硬件進行配置;

-- 向量表 : 創建異常向量表 和 初始化中斷處理函數;

-- 進程調度器 : 初始化系統核心進程調度器時鐘中斷處理機制;

-- 串口 : 初始化串口控制臺;

-- 緩存 : 創建和初始化系統, 為內存調用提供緩存;

-- 內存管理 : 初始化內存管理, 檢測內存大小及碑內核占用的內存情況;

-- 進程通信 : 初始化系統進程通信機制;



(4) 設備初始化


設備初始化 : 加載設備驅動, 主要有 靜態加載 和 動態加載兩種方式;

-- 靜態加載 : 將驅動模塊加載到內核中, 設備驅動會在內核啟動的時候自動加載, 這種驅動是無法卸載的;

-- 動態加載 : 在系統中使用 modprobe 或者 insmod 進行設備驅動模塊的加載, 使用 rmmod 進行設備驅動模塊卸載;



(5) 掛載文件系統


掛載文件系統 :?

-- 創建并掛載根設備 :?kernel 初始化 和 設備初始化之后會創建 根設備, 根設備文件系統以只讀方式掛載;

-- 釋放內存到根設備 : 根設備創建成功之后, 根設備是只讀的, 這時釋放未使用的內存到 根設備上;



(6) 啟動 init 程序


啟動應用程序 :?根文件掛載成功后, 啟動 /sbin/init 程序, 這是 linux 系統第一個應用程序, 啟動成功后 init 進程會獲得 linux 系統的控制權;

-- 硬件初始化 : 初始化 Android 設備硬件;

-- 掛載根文件 : 根據命令行參數掛載根文件系統;

-- 跑啟動腳本 : 執行用戶自定義的 init 啟動腳本;



4. init 初始化系統服務



(1) init 初始化系統服務


Linux 中 init 進程簡介 :

-- 系統父進程 : init 進程是 Linux 系統所有進程的 父進程, id 為 1;

-- init 進程作用 : 初始化 和 啟動 系統, 創建其它進程 如 shell login 等進程;


Android 中 init 進程簡介 :?

-- 系統父進程 : init 在 Android 中也是第一個進程, id 為 1;

-- 創建其它進程 : 創建 zygote 進程, 該進程可以提供 屬性服務 用于管理系統屬性;



(2) init 完成操作


init 操作 : 系統初始化操作, 解析 init.rc 配置文件等操作;

-- 初始化 : 初始化 log 系統;

-- 解析配置 : 解析 init.rc 配置文件 和 /init.硬件平臺名稱.rc 配置文件, 執行 early-init, 解析 init 動作, eartly-boot 動作, boot 動作, Execute property 動作;

-- 初始化2 : 設備初始化, 屬性服務初始化, 開啟屬性服務;?

-- 無限循環 : 進入無限循環狀態, 等待屬性設置 或 子進程退出事件;



(3) init.rc 配置文件解析


init.rc 組成 : 該配置文件由 命令類, 動作類, 服務類, 選項類 聲明組成;

-- 對應語法 : 命令, 動作, 觸發條件, 服務, 選項屬性;


命令示例 : init.rc 中的命令在 init 程序中解析, 之后調用相關函數實現;

# Create cgroup mount point for memorymount tmpfs none /sys/fs/cgroup mode=0750,uid=0,gid=1000mkdir /sys/fs/cgroup/memory 0750 root systemmount cgroup none /sys/fs/cgroup/memory memorywrite /sys/fs/cgroup/memory/memory.move_charge_at_immigrate 1chown root system /sys/fs/cgroup/memory/taskschmod 0660 /sys/fs/cgroup/memory/tasksmkdir /sys/fs/cgroup/memory/sw 0750 root systemwrite /sys/fs/cgroup/memory/sw/memory.swappiness 100write /sys/fs/cgroup/memory/sw/memory.move_charge_at_immigrate 1chown root system /sys/fs/cgroup/memory/sw/taskschmod 0660 /sys/fs/cgroup/memory/sw/tasks
動作 觸發條件 示例 :?

on nonencryptedclass_start late_starton chargerclass_start chargeron property:vold.decrypt=trigger_reset_mainclass_reset main
服務 選項 示例 : 服務表示啟動一個可執行程序, 服務一般都附加 選項, 用于配合服務使用

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-serverclass mainsocket zygote stream 660 root systemonrestart write /sys/android_power/request_state wakeonrestart write /sys/power/state ononrestart restart mediaonrestart restart netd -- 示例解析 : 啟動 zygote 服務, 通過?/system/bin/app_process 啟動, "--start-system-server" 表示啟動的同時啟動該服務, "socket zygote stream 660 root system" 表示啟動后建立 zygote 通信 socket, "onrestart?" 表示 zygote 服務重啟時需要執行的命令;


屬性 示例 : 系統中設置的屬性值, 可設置 或者 讀寫;

# Define TCP buffer sizes for various networks # ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208setprop net.tcp.buffersize.wifi 524288,1048576,2097152,262144,524288,1048576setprop net.tcp.buffersize.lte 524288,1048576,2097152,262144,524288,1048576setprop net.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208setprop net.tcp.buffersize.hspa 4094,87380,262144,4096,16384,262144-- 示例解析 : "setprop" 用于設置屬性;



二. Android 上層系統啟動流程



1. Android 上層系統啟動簡介


啟動流程 : init 進程啟動 -> 啟動 Android 系統本地服務(Native Service) -> Zygote進程 -> Android 系統服務(System Service) -> HomeActivity 啟動;



2. 啟動 Native Service (本地服務)


Native Service 簡介 :?

-- 啟動進程 : 由 init 啟動, 是 C/C++ 實現的;

-- 主要作用 : 本地服務 是 Android 內核Android 應用?通信?的通道, 兩層之間通過 socket 進行通信;


Native Service 提供的服務 : 其啟動項定義在 init.rc 中;

-- Console : shell console 服務;

-- Service Manager : Binder 服務管理器, 管理所有的 Android 系統服務;

-- Vold : 支持外設熱插拔服務;

-- Mountd : 設備安裝 狀態通知服務;

-- Debuggerd : 處理調試進程請求服務;

-- Rild : 無線接口層服務;

-- Zygote : 啟動 Dalvik 并創建其它進程服務;

-- MediaServer : 多媒體相關服務;



3. Zygote 進程啟動


Zygote 進程簡介 : Zygote 由 init 進程創建, init.rc 中配置了 Zygote 的創建參數;

-- init.rc 中配置 : Zygote 原始名稱是 "app_process", 啟動中改名為 Zygote;

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

Zygote 作用 :?

-- 本質 : Zygote 進程是一個虛擬的進程, 是虛擬實例(Dalvik虛擬機)的孵化器;

-- 操作 : Zygote 負責 Dalvik 虛擬機初始化, 預置類庫加載等操作;

-- 應用啟動處理 :?每個 Android 應用啟動時, Zygote 會創建一個子進程(Dalvik虛擬機)執行它;

-- 節省內存策略 : Android 中有些系統庫是只讀的, 所有的 Dalvik 虛擬機都可以共享這些只讀系統庫;



4. Android System Service 啟動


Android 系統服務 :?

-- 啟動 : Android System Service 是 Zygote 進程第一個子進程, 由 Zygote 進程孵化而來;

-- 作用 : System Service 是 Android 框架核心, 負責 Android 系統初始化?啟動其它服務;

-- 其它服務 : System Service 孵化的其它服務運行在對應 Dalvik 虛擬機進程的空間里;

-- init.rc 配置 : 在 Zygote 配置中 "--start-system-server" 參數用來實現 System Service 的啟動;



5. 啟動 HomeActivity 主界面


Launcher 應用程序 : 該應用程序就是 HomeActivity 所在的程序;

-- 啟動 : Launcher 由 Activity Manager Service 啟動, 啟動流程 System Service -> Activity Manager Service -> Launcher;

-- 展示圖標 : Launcher 啟動后就會將已經安裝的 app 程序的快捷圖標展示到桌面;




作者?: 萬境絕塵?(octopus_truth@163.com)

轉載請注明出處?:?http://blog.csdn.net/shulianghan/article/details/38895481


總結

以上是生活随笔為你收集整理的【Android 系统开发】 Android 系统启动流程简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。