linux kernel 啟動流程簡單分析

2021-06-29 07:02:23 字數 828 閱讀 6113

ping +  

linux 核心啟動的時候,總是從start_kernel()這個函式作為入口。start_kernel完成了對各種資源的初始化。隨後,呼叫了rest_init(),完成對init程序的啟動。

我們用gdb跟蹤linux kernel 核心啟動可以看到。

1. 我們把斷點置於start_kernel()的入口,當程式執行停止在該函式處時, 根據其堆疊情況,我們可以看到i386_start_kernel()呼叫了start_kernel().

2. 隨後我們將斷點置於rest_init()的開始。當程式執行到該斷點的時候。我們跟蹤進入該函式。可以看到這個函式實現了對init process的啟動。

kernel_thread(kernel_init, null, clone_fs);

kernel_thread() 呼叫do_fork() fork出乙個新的程序。kernel_init()中完成了對init process的呼叫。kernel_init()中會依次啟動sbin/init, etc/init,bin/init, bin/sh這些程序。kernel_init的程序編號的是#1.

3. 在rest_init()中還會啟動#2 程序。kthreadd

4. 在rest_init()的最後還會啟動乙個idle task.這個task就是乙個while(1)的死迴圈。它可以由cpu的中斷來打破這個迴圈。

linux kernel中的中斷處理流程

2 linux kernel arm64的中斷函式處理流程 1 linux kernel arm32的中斷函式處理流程 我們從irq handler巨集函式看起 1 irq handler巨集 注意config multi irq handler巨集表示 允許每台機器在執行時指定它自己的irq處理程...

Linux Kernel啟動中引數的處理

1.在bootloader中會以taglist的形式儲存板子mem cmdline cmdline中也可以定義mem資訊 等相關資訊,cmdline通過getenv從環境變數取得 該環境變數是之前使用setenv以字串形式配置 addr和size。跳轉到kernel前,r0 0,r1 proc ty...

uboot啟動流程概述 uboot啟動流程

u boot系統啟動流程 大多數bootloader都分為stage1和stage2兩大部分,u boot也不例外。依賴於cpu體系結構的 如裝置初始化 等 通常都放在stage1,且可以用組合語言來實現,而stage2則通常用c語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。2.1...