Loading...

Linux kernel 開機流程:

一般跟(硬體)平台相關的設定會記錄在一個以平台名稱為檔名的 .c 檔中,我們暫時稱它為 board.c。board.c 的存放路徑說明:linux-kernel / 與 architecture 相關 / 屬於 arm 平台 / 屬於哪個硬體平台系列 / 某平台的 board.c。一般 board.c 主要是用來做硬體的相關設定,包含 DMA、 IRQ、GPIO、各 Register 等硬體相關設定。但是畢竟一個檔案可能無法涵蓋該平台 的所有硬體設定,所以通常有部分與硬體設定相關的程式碼會放在其它相關的檔 案中,這部分視平台而有所不同。

Linux kernel 在執行完系統初始化設定(包含設置記憶體、Scheduler、中斷向 量表、載入驅動程式等等)之後,會將控制權以 kernel thread 的形式轉移給 user space 的第一個程式:init,在 Embedded Linux 的環境下,init 一般包含於 busybox 中。init 執行流程如下圖。當 Linux  kernel 將控制權轉移給 init 時,init 會讀取 /etc 下的相關檔案,一般是讀取 /etc/inittab,再由 /etc/inittab 引入 /etc/init.d/rcS 等相關檔案執行系統環境的設定及初 始化的動作,包含掛載檔案系統、執行相關應用程式及產生 shell 讓使用者可以透過特定指令與作業系統互動;busybox 透過以上的流程來完成系統最後 的相關設定。

init 執行流程:

Loading...