經過兩天的學習,了解了linux啟動的兩種模式,在這裡總結一下。
第一種為傳統的system v initialization,起源於unix,大部分的linux系統都是以這個方式啟動(例如:centos,redhat)。
第二種為近幾年提出的upstart方式,其特點是基於事件機制,所有的服務和任務都是由事件驅動,部分linux系統是以此啟動(例如:ubuntu,fedora,debian)
首先,介紹第一種,也是最為常見的linux啟動過程:
1、硬體讀取bios載入硬體資訊以及進行開機自檢。
2、根據設定讀取並第乙個可啟動的裝置內所儲存的mbr的boot loader(即grub)
3、不同的boot loader的設定不同,載入不同的kernel,之後kernel會進行硬體檢測和驅動程式的載入。
4、呼叫init程序。實質上就是執行/etc/inittab檔案,從中獲取run level的資訊。
5、執行/etc/rc.d/rc.sysinit檔案(系統初始化程序)配置初始化系統。 (如果可以讀懂shell指令碼的可以vim出來看看,檔案內有詳細的啟動過程和主要工作)
6、根據run level的不同執行不同的/etc/rc.d/rc(0~6)檔案和/etc/sysconfig。
其中/etc/rc.d/rc(0~6)檔案中包含兩大類檔案:k開頭的和s開頭的分別表示start和stop,所有檔案都是鏈結到/etc/init.d/資料夾下的,這些都是啟動系統的必要服務
而/etc/sysconfig檔案中為配置檔案
7、最後執行/etc/rc.d/rc.local檔案(此檔案為使用者自定義檔案,自己寫的開機指令碼可以放在此處)
8、執行模擬程式mingetty啟動login程序,等待登入。
接下來說一下第二種啟動方式:
首先,upstart啟動方式和傳統方式的不同點在於,所有的服務和任務都是由事件驅動的。因此,ubuntu的init程序不會直接去呼叫相對應的檔案,而是去/etc/init下面尋找對應的配置檔案,通過對配置檔案的呼叫,來呼叫相對應的檔案。
其次相比較傳統的啟動方式,/etc目錄下的檔案發生了變化。但是,在第三種啟動方式之前的步驟是一樣的,這裡就不再說了,直接從第四步開始。
4、呼叫init程序,實質上執行/etc/init/rc-sysinit.conf檔案,設定預設的run level。
5、由於run level的改變觸發/etc/init/rc.conf檔案。
開啟/etc/init/rc.conf檔案,最後一行就寫著:/etc/init.d/rc $runlevel。也就是說,直接觸發了/etc/init.d/rc檔案。
開啟rc檔案我們可以看見根據這個檔案系統會觸發相對應的/etc/rc.(0~6)檔案
由此觸發已經配置好的系統指令碼(這些指令碼都是鏈結到/etc/init.d/目錄下,也就是說最終還是要呼叫該目錄下的指令碼)。
同樣的,指令碼的名字和第一種啟動方式的命名規則一樣,只不過沒有了k開頭的檔案,用s表示呼叫開始
6、同樣最後觸發/etc/rc.local檔案(此檔案為使用者自定義檔案,自己寫的開機指令碼可以放在此處)
到此為止,系統啟動完畢,等待使用者登入。
兩種啟動方式,總的來說都是在呼叫/etc/init.d下面的指令碼檔案,不過不同的方式呼叫的方法不一樣而已。本文只是簡單的記錄了我對呼叫init程序之後,檔案讀寫呼叫的一些理解,關於硬體讀取bios到核心的呼叫並沒有詳細的記錄,有興趣的讀者可以自己下來看看。
Linux啟動過程分析
boot loader 當cpu一上電,此時cpu必須從nor flash或者nand flash中取指令 直接從 nand flash取指令的ap為支援nand 啟動 nand boot 其實原理就是ap 內部的rom裡有一小段 包括nand flash驅動,它啟動從nand flash中讀取一段...
Linux 啟動過程分析
runlevel 命令 可以檢視當前的執行級別 linux 系統啟動過程如下 1 bios自檢 2 啟動grub lilo 3 執行linux 核心並檢測硬體 4 執行系統的第乙個程序init 5 init 讀取到系統引導配置檔案 etc inittab中的資訊進行初始化 6 etc rc.d rc...
Linux核心啟動過程分析
本文永久更新鏈結位址 日期 2014 10 14 字型 大中小 下面給出核心映像完整的啟動過程 注意kernel evecve呼叫的是與具體體系平台相關的實現,但它是乙個通用的系統呼叫,在linux syscalls.h中宣告,這個標頭檔案中宣告了與體系結構無關的所有系統呼叫介面。只不過kernel...