linux兩種啟動過程分析

2021-07-09 14:49:22 字數 1677 閱讀 1120

經過兩天的學習,了解了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...