Android 啟動流程

一 Bootloader 階段

在嵌入式系統中,Bootloader的引導過程與傳統的PC環境有所不同,主要是因為嵌入式系統的硬件配置和應用場景更加多樣化。以下是嵌入式系統中Bootloader被引導的一般流程:

1. 硬件復位

當嵌入式設備上電或復位時,處理器會執行一個預定義的啟動序列。通常,這包括設置CPU寄存器到默認狀態,并開始從一個固定的內存地址(通常是ROM或者Flash)讀取指令。

2. 初始Bootloader階段

  • 直接固件加載:某些嵌入式處理器設計為直接從特定位置(如內部ROM)運行代碼。這段代碼非常小且簡單,其主要任務是初始化一些關鍵的硬件組件(如內存控制器),以便后續可以從外部存儲器(如NOR Flash、NAND Flash、SD卡等)加載更復雜的Bootloader程序。
  • Boot ROM:許多現代嵌入式處理器包含一個小型的Boot ROM,它知道如何處理不同類型的啟動介質(比如SPI Flash、eMMC、USB等)。這個Boot ROM負責定位并加載第一個真正的Bootloader映像到內存中。

3. 主Bootloader階段

  • 硬件初始化始化
  • 環境變量設置
  • 加載操作系統內核和文件系統
  • 傳遞控制給操作系統

第一階段:
1、硬件設備初始化:
關閉看門狗、關中斷、啟動ICACHE、關閉DCACHE和TLB,關閉MMU、設置時鐘頻率、RAM初始化等。
2、為加載BootLoader的第二階段準備RAM空間
3、復制BootLoader的第二階段代碼到RAM空間中
4、設置好棧
5、跳轉到第二階段代碼的C入口處

第二階段:
1、初始化本階段要使用的硬件設備
2、檢查系統內存映射(memory map):就是確定板子使用了多少內存,他們的地址空間是什么。
3、將內核映象和根文件映象從flash上讀到RAM空間中
4、為內核映象設置啟動參數
5、調用內核

二 kernel 階段

1. 內核啟動

當內核映像被加載到內存后,內核開始執行:
初始化硬件:例如內存管理、中斷、定時器等。
加載 init 進程:這是 Linux 系統中的第一個用戶空間進程,通常在 Android 中是 init 進程。

2. init 進程啟動

init 進程是 Android 系統中非常重要的一個組件,它負責:
掛載文件系統:例如 /system 和 /data。
啟動關鍵服務:如 zygote、SurfaceFlinger、InputManager 等。
執行 rc 文件:這些文件定義了系統啟動時需要運行的腳本和服務。

3. Zygote 進程

在 init 進程中,會啟動 Zygote 進程,這是 Java 虛擬機(JVM)的一個實例,用于孵化其他 Java 應用進程。Zygote 負責:
預加載類:減少后續應用啟動時間。
孵化應用進程:如 Android 應用和系統服務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67618.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67618.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67618.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據結構與算法】AVL樹的插入與刪除實現詳解

文章目錄 前言Ⅰ. AVL樹的定義Ⅱ. AVL樹節點的定義Ⅲ. AVL樹的插入Insert一、節點的插入二、插入的旋轉① 新節點插入較高左子樹的左側(左左):右單旋② 新節點插入較高右子樹的右側(右右):左單旋③ 新節點插…

SCRM開發為企業提供全面客戶管理解決方案與創新實踐分享

內容概要 在當今的商業環境中,客戶關系管理(CRM)變得越來越重要。而SCRM(社交客戶關系管理)作為一種新興的解決方案,正在幫助企業徹底改變與客戶的互動方式。快鯨SCRM是一個引人注目的工具,它通…

AI應用部署——streamlit

如何把項目部署到一個具有公網ip地址的服務器上,讓他人看到? 可以利用 streamlit 的社區云免費部署 1、生成requirements.txt文件 終端輸入pip freeze > requirements.txt即可 requirements.txt里既包括自己安裝過的庫,也包括這些庫的…

【C/C++】區分0、NULL和nullptr

🦄個人主頁:小米里的大麥-CSDN博客 🎏所屬專欄:C_小米里的大麥的博客-CSDN博客 🎁代碼托管:C: 探索C編程精髓,打造高效代碼倉庫 (gitee.com) ??操作環境:Visual Studio 2022 目錄 1. 0 和空指針 2. NULL 3. nullptr 總結 …

【Numpy核心編程攻略:Python數據處理、分析詳解與科學計算】2.1 NumPy高級索引:布爾型與花式索引的底層原理

2.1 NumPy高級索引:布爾型與花式索引的底層原理 目錄 #mermaid-svg-NpcC75NxxU2mkB3V {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NpcC75NxxU2mkB3V .error-icon{fill:#552222;}#mermaid-svg-NpcC75…

云原生(五十二) | DataGrip軟件使用

文章目錄 DataGrip軟件使用 一、DataGrip基本使用 二、軟件界面介紹 三、附件文件夾到項目中 四、DataGrip設置 五、SQL執行快捷鍵 DataGrip軟件使用 一、DataGrip基本使用 1. 軟件界面介紹 2. 附加文件夾到項目中【重要】 3. DataGrip配置 快捷鍵使用:C…

【Elasticsearch】match_bool_prefix 查詢 vs match_phrase_prefix 查詢

Match Bool Prefix Query vs. Match Phrase Prefix Query 在 Elasticsearch 中,match_bool_prefix 查詢和 match_phrase_prefix 查詢雖然都支持前綴匹配,但它們的行為和用途有所不同。以下是它們之間的主要區別: 1. match_bool_prefix 查詢…

算法基礎——存儲

引入 基礎理論的進步,是推動技術實現重大突破,促使相關領域的技術達成跨越式發展的核心。 在發展日新月異的大數據領域,基礎理論的核心無疑是算法。不管是技術設計,還是工程實踐,都必須仰仗相關算法的支持&#xff0…

正則表達式入門

入門 1、提取文章中所有的英文單詞 //1.先創建一個Pattern對象,模式對象,可以理解成就是一個正則表達式對象 Pattern pattern Pattern.compile("[a-zA-Z]"); //2.創建一個匹配器對象 //理解:就是 matcher匹配器按照p…

分布式架構中的事務管理:需要了解的常見解決方案

前言 在現代互聯網應用中,分布式架構越來越常見。隨著系統規模的擴大,越來越多的業務和數據被分布到不同的服務和數據庫中。雖然分布式架構帶來了諸多優勢,但也引入了一個新的問題:分布式事務。 一、什么是分布式事務&#xff1…

《TCP 網絡編程實戰:開發流程、緩沖區原理、三次握手與四次揮手》

一、 TCP 網絡應用程序開發流程 學習目標 能夠知道TCP客戶端程序的開發流程1. TCP 網絡應用程序開發流程的介紹 TCP 網絡應用程序開發分為: TCP 客戶端程序開發TCP 服務端程序開發說明: 客戶端程序是指運行在用戶設備上的程序 服務端程序是指運行在服務器設備上的程序,專門…

新年新挑戰:如何用LabVIEW開發跨平臺應用

新的一年往往伴隨著各種新的項目需求,而跨平臺應用開發無疑是當前備受矚目的發展趨勢。在眾多開發工具中,LabVIEW 以其獨特的圖形化編程方式和強大的功能,為開發跨平臺應用提供了有效的途徑。本文將深入探討如何運用 LabVIEW 開發能夠在不同操…

C 語言實現計算一年中指定日期是第幾天?題】

引言 在編程的世界里,處理日期和時間相關的問題是非常常見的。比如在日歷應用、任務管理系統、數據分析等場景中,經常需要計算某個日期在一年中是第幾天。本文將詳細介紹如何使用 C 語言來實現這一功能,通過分析代碼的結構、邏輯以及可能存在…

rsync安裝與使用-linux015

使用 rsync 可以非常高效地將文件或目錄從一個服務器傳輸到另一個服務器。 能力: 支持 64 位文件、64 位 inode、64 位時間戳、64 位長整型支持套接字對、符號鏈接、符號鏈接時間、硬鏈接、硬鏈接特殊文件、硬鏈接符號鏈接支持 IPv6、訪問時間(atimes&…

UE5.3 C++ CDO的初步理解

一.UObject UObject是所有對象的基類,往上還有UObjectBaseUtility。 注釋:所有虛幻引擎對象的基類。對象的類型由基于 UClass 類來定義。 這為創建和使用UObject的對象提供了 函數,并且提供了應在子類中重寫的虛函數。 /** * The base cla…

Pandas基礎06(異常值的檢測與過濾/抽樣/常用聚合函數/數據聚合)

Pandas基礎06 異常值的檢測與過濾 在數據分析中,異常值(Outliers)是指與其他數據點顯著不同的值。這些值可能由于數據錄入錯誤、設備故障或極端情況而產生,因此在進行數據分析之前,需要對其進行檢測與過濾。本文將介紹…

【PyTorch】4.張量拼接操作

個人主頁:Icomi 在深度學習蓬勃發展的當下,PyTorch 是不可或缺的工具。它作為強大的深度學習框架,為構建和訓練神經網絡提供了高效且靈活的平臺。神經網絡作為人工智能的核心技術,能夠處理復雜的數據模式。通過 PyTorch&#xff0…

jstat命令詳解

jstat 用于監視虛擬機運行時狀態信息的命令,它可以顯示出虛擬機進程中的類裝載、內存、垃圾收集、JIT 編譯等運行數據。 命令的使用格式如下。 jstat [option] LVMID [interval] [count]各個參數詳解: option:操作參數LVMID:本…

App.Current.Services.GetService<UserView>()無限循環

代碼無線循環 public partial class UserView : UserControl{public UserView(){InitializeComponent();InitData();}private void InitData(){DataContext App.Current.Services.GetService<UserView>();}} } DataContext App.Current.Services.GetService<User…

(動態規劃路徑基礎 最小路徑和)leetcode 64

視頻教程 1.初始化dp數組&#xff0c;初始化邊界 2、從[1行到n-1行][1列到m-1列]依次賦值 #include<vector> #include<algorithm> #include <iostream>using namespace std; int main() {vector<vector<int>> grid { {1,3,1},{1,5,1},{4,2,1}…