精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

kernel到android核心啟動過程

麥辣雞腿堡 ? 來源:TrustZone ? 作者:Hcoco ? 2023-12-04 16:59 ? 次閱讀

總結一個圖:kernel 到android核心啟動過程

圖片kernel鏡像執行跳轉到start_kernel開始執行,在rest_init會創建兩個kernel 進程(線程),其分別是為kernel_init 與kthreadd,創建完后系統通過init_idle_bootup_task蛻化為idle進程(cpu_idle)。

圖片調用kernel_thread()創建1號內核線程, 該線程隨后轉向用戶空間, 演變為init進程

調用kernel_thread()創建kthreadd內核線程。

  • init_idle_bootup_task():當前0號進程init_task最終會退化成idle進程,所以這里調用init_idle_bootup_task()函數,讓init_task進程隸屬到idle調度類中。即選擇idle的調度相關函數。
  • 調用cpu_idle(),0號線程進入idle函數的循環,在該循環中會周期性地檢查
  • kernel_init 中會執行/init(ramdisk_execute_command的值為"/init")

圖片
在這里插入圖片描述

/init 啟動后執行/system/core/init/main.cpp 中main 方法,這里執行FirstStageMain()

圖片

(看看這到了哪里?這到了咱們的的AVB那個地方啊)

FirstStageMain()中通過execv 執行/system/bin/init,參數為selinux_setup。這里init 跟/init 一樣,因此再次執行init 鏡像。

這里如果是重啟到bootloader,會執行InstallRebootSignalHandlers

圖片SetupSelinux 中再次執行init,這里會注冊信號處理函數

從而參數second_stage,執行SecondStageMain ,在這里解析.rc ,啟動ueventd,并等待其啟動完成。

圖片init 鏡像通過execv會執行兩次,分別通過FirstStageMain和SecondStageMain執行。

圖片圖片Zygote是Android系統創建新進程的核心進程

  • 負責啟動Dalvik虛擬機,
  • 加載一些必要的系統資源和系統類,
  • 啟動system_server進程,
  • 隨后進入等待處理app應用請求。

到這里我們就暫時停下,別走遠了。

芯片上電到Android

總結一下整個流程

  • 第一步:手機開機后,引導芯片啟動,引導芯片開始從固化在ROM里的預設代碼執行,加載引導程序到到RAM,bootloader檢查RAM,初始化硬件參數等功能;
  • 第二步:硬件等參數初始化完成后,進入到Kernel層,Kernel層主要加載一些硬件設備驅動,初始化進程管理等操作。在Kernel中首先啟動swapper進程(pid=0),用于初始化進程管理、內管管理、加載Driver等操作,再啟動kthread進程(pid=2),這些linux系統的內核進程,kthread是所有內核進程的鼻祖;
  • 第三步:Kernel層加載完畢后,硬件設備驅動與HAL層進行交互。初始化進程管理等操作會啟動INIT進程 ,這些在Native層中;
  • 第四步:init進程(pid=1,init進程是所有進程的鼻祖,第一個啟動)啟動后,會啟動adbd,logd等用戶守護進程,并且會啟動servicemanager(binder服務管家)等重要服務,同時孵化出zygote進程,這里屬于C++ Framework,代碼為C++程序;
  • 第五步:zygote進程是由init進程解析init.rc文件后fork生成,它會加載虛擬機,啟動System Server(zygote孵化的第一個進程);System Server負責啟動和管理整個Java Framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服務;
  • 第六步:zygote同時會啟動相關的APP進程,它啟動的第一個APP進程為Launcher,然后啟動Email,SMS等進程,所有的APP進程都由zygote fork生成。

那么到這里我們就把整個系統的啟動串聯起來了從bootrom-bootloader-kernel。

當然真實的系統為了安全,比如說 基于TrustZone框架的啟動流程 ,那肯定不止這些步驟,但是大體上也是穿插在這個流程之中的增刪改。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3923

    瀏覽量

    127137
  • 內核
    +關注

    關注

    3

    文章

    1363

    瀏覽量

    40228
  • Linux
    +關注

    關注

    87

    文章

    11229

    瀏覽量

    208927
  • Kernel
    +關注

    關注

    0

    文章

    48

    瀏覽量

    11138
收藏 人收藏

    評論

    相關推薦

    STM32H7的啟動過程分析

    本章教程主要跟大家講STM32H7的啟動過程,這里的啟動過程是指從CPU上電復位執行第1條指令開始(匯編文件)進入C程序main()函數入口之間的部分。
    的頭像 發表于 10-17 14:42 ?2253次閱讀

    詳解STM32啟動過程

    本章教程主要跟大家講STM32H7的啟動過程,這里的啟動過程是指從CPU上電復位執行第1條指令開始(匯編文件)進入C程序main()函數入口之間的部分。
    發表于 11-14 11:24 ?1829次閱讀

    專家揭秘:STM32啟動過程全解

    電子發燒友網核心提示: 本文主要闡述了STM32啟動過程全面解析,包括啟動過程的介紹、啟動代碼的陳列以及深入解析。 相對于ARM上一代的主流ARM7/ARM9內核架構,新一代Corte
    發表于 09-10 08:50 ?5.3w次閱讀
    專家揭秘:STM32<b class='flag-5'>啟動過程</b>全解

    Linux內核啟動過程和Bootloader(總述)

    3.Linux啟動過程 在Bootloader將 Linux 內核映像拷貝 RAM 以后,可以通過下例代碼啟動 Linux 內核: call_linux(0
    發表于 08-18 17:35

    android--系統啟動--init進程啟動過程如何

    android--系統啟動--init進程啟動過程
    發表于 05-29 10:35

    請問6ul核心啟動過程,有需要什么必須的外設嗎?

    6ul核心啟動過程,有需要什么必須的外設嗎
    發表于 01-10 06:39

    系統啟動過程

    系統啟動過程系統啟動過程主要由一下幾步組成(以硬盤啟動為例):1. 開機2. BIOS 加電自檢 ( Power On Self Test -- POST ),內存地址為 0ffff:00003. 將硬盤第一個
    發表于 10-11 12:17 ?2250次閱讀

    嵌入式uCLinux內核啟動過程分析

    分析uCLinux的啟動過程,可以加快系統啟動速度、正確建立應用環境。本文要研究的就是uCLinux操作系統內核的啟動過程
    發表于 08-15 16:51 ?782次閱讀

    IC啟動過程及Vcc電壓波形的認知

    IC啟動過程及Vcc電壓波形的認知IC啟動過程及Vcc電壓波形的認知IC啟動過程及Vcc電壓波形的認知IC啟動過程及Vcc電壓波形的認知
    發表于 12-22 14:46 ?10次下載

    STM32上電后啟動過程

    STM32上電后啟動過程
    發表于 11-15 18:21 ?16次下載
    STM32上電后<b class='flag-5'>啟動過程</b>

    stm32啟動過程

    一次性搞定stm32啟動模式與啟動過程一、stm32啟動模式二、從flash啟動過程2.1 數據在堆棧中存儲方式2.2 stm32的正常啟動過程
    發表于 12-16 16:57 ?8次下載
    stm32<b class='flag-5'>啟動過程</b>

    linux內核啟動過程會執行用戶空間的init進程

    linux內核啟動過程的后期,在kernel_init()函數代表的init線程中,會嘗試執行用戶空間的init進程
    的頭像 發表于 10-14 09:12 ?1126次閱讀

    RL78啟動過程詳解

    RL78啟動過程詳解
    的頭像 發表于 09-28 16:39 ?1381次閱讀
    RL78<b class='flag-5'>啟動過程</b>詳解

    logd的啟動過程和內容

    logd作為native service,系統啟動過程通過讀取rc文件來啟動,相關的屬性定義在如下logd.rc文件中。 2.2.1 logd啟動過程 logd啟動后會存在三個用來服務
    的頭像 發表于 11-23 16:54 ?801次閱讀
    logd的<b class='flag-5'>啟動過程</b>和內容

    stm32啟動過程詳解

    STM32啟動過程詳解 近年來,STM32微控制器在嵌入式系統中的應用越來越廣泛。STM32微控制器具有高性能、低功耗、易擴展和豐富的外設接口等優勢。而要讓STM32微控制器正常工作,首先要了解它
    的頭像 發表于 12-08 15:47 ?1524次閱讀