核心啟動流程

2021-08-26 23:31:53 字數 1301 閱讀 1140

核心的初始化過程由start_kernel函式開始,至第乙個使用者程序init結束,呼叫了一系列的初始化函式對所有的核心元件進行初始化。其中,start_kernel、rest_init、kernel_init、init_post等4個函式構成了整個初始化過程的主線。

start_kernel函式

從start_kernel函式開始,核心即進入了c語言部分,它完成了核心的大部分初始化工作。實際上,可以將start_kernel函式看做核心的main函式。

asmlinkage void __init start_kernel(void)

rest_init函式

在start_kernel函式的最後呼叫了rest_init函式進行後續的初始化。

(1)rest_init中呼叫kernel_thread函式啟動了2個核心執行緒,分別是:kernel_init和kthreadd

(2)呼叫schedule函式開啟了核心的排程系統,從此linux系統開始轉起來了。

rest_init最終呼叫cpu_idle函式結束了整個核心的啟動。

程序0 idle程序, 叫空閒程序,也就是死迴圈。

程序1 kernel_init 函式就是程序1,這個程序被稱為init程序。

程序2 kthreadd 函式就是程序2,這個程序是linux核心的守護程序。

kernel_init函式

kernel_init函式將完成裝置驅動程式的初始化,並呼叫init_post函式啟動使用者空間的init程序。

init_post函式

到init_post函式為止,核心的初始化已經進入尾聲,第乙個使用者空間程序init將姍姍來遲

如果核心命令列中給出了到init程序的直接路徑(或者別的可替代的程式),這裡就試圖執行init。

init 程序

init:開始是核心態,後來轉變為使用者態】

init程序完成了從核心態向使用者態的轉變

init程序在核心態下面時,通過乙個函式kernel_execve來執行乙個使用者空間編譯連線的應用程式就跳躍到使用者態了。

在init/main.c中最後會通過kernel_execve()來呼叫使用者空間的init程序(如/sbin/init, /etc/init, /bin/init等

根檔案系統在**?根檔案系統的檔案系統型別是什麼?

uboot通過傳參來告訴核心這些資訊。

uboot傳參中的root=/dev/mmcblk0p2 rw 這一句就是告訴核心根檔案系統在**

uboot傳參中的rootfstype=ext3這一句就是告訴核心rootfs的型別。

linux 核心 核心啟動流程

cs是 段暫存器,ip是指令指標暫存器 相當於偏移位址 儲存的是 指令的位址。cs ip共同作用生成了 位址,具體演算法是cs左移4位 ip即是 位址。例如cs 0xf000,ip 0xfff0,則 位址為0xffff0.global globl 命令 global symbol global 使得...

linux核心啟動流程

linux核心啟動流程 計算機在啟動時都是先加電,然後進行硬體檢測並引導作業系統的初始化程式,然後作業系統的初始化程式程負責讀入系統核心並建產系統的執行環境.一這過程相對來說比較復而且與cpu體系結構相關,這裡我們通過linux並以i386的體系結構對這一過程進行較為詳細的說明.1 硬體檢測 當機器...

核心的啟動流程

前言本文基於linux 4.0核心的啟動流程非常複雜.大概分為三個過程 這個流程不是必須的 如果核心映象沒有壓縮 vmlinux 就不需要解壓縮 但如果壓縮了,可以讓bootloader解壓,然後也可以讓核心解壓,一般是核心自解壓 1.發生條件 核心為壓縮檔案,且bootloader 沒有解壓核心 ...