Linux啟動流程分析 CentOS 5 x

2021-07-22 04:19:31 字數 3407 閱讀 8011

《鳥哥的linux私房菜》學習筆記

當按下電源鍵後計算機硬體會主動讀取bios來載入硬體資訊及進行硬體系統的自我測試,之後系統會主動讀取第乙個可啟動的裝置(由bios設定的),此時就可以讀入引導裝載程式了(boot loader)。

引導裝載程式可以指定使用哪乙個核心檔案來啟動,並實際載入核心到記憶體當中解壓縮與執行,此時核心就能夠開始在記憶體內活動,並檢測所有硬體資訊與載入適當的驅動程式來使主機開始執行。

等到核心檢測硬體與載入驅動程式完畢後,主機系統開始執行後,此時linux才會呼叫外部程式開始準備軟體執行的環境,並且實際載入所有系統執行所需要的軟體程式。最後系統就會開始等待使用者的登入與操作。

簡單來說:

載入bios的硬體資訊與進行自我測試,並依據設定取得第乙個可啟動裝置;

讀取並執行第乙個啟動裝置內mbr(主引導分割槽)的boot loader(即是gurb等程式);

依據boot loader的設定載入kernel,kernel會開始檢測硬體與載入驅動程式;

在硬體驅動成功後,kernel會主動呼叫init程序(/sbin/init),而init會取得runlevel資訊;

init執行/etc/rc.d/rc.sysinit檔案來準備軟體的操作環境(如網路、時區等);

init執行runlevel的各個服務的啟動(script方式);

init執行/etc/rc.d/rc.local檔案;

init執行終端機模擬程式mingetty來啟動login程式,最後等待使用者登入。

bios

bios(basic input output system)載入完硬體資訊後,進行開機自檢,然後開始執行硬體檢測的初始化,並配置pnp裝置,之後再定義出可啟動的裝置順序,接下來開始進行啟動裝置的資料讀取。

mbr

mbr(master boot record,主引導分割槽)。每塊硬碟的第乙個扇區內含有446 bytes的mbr區域。如果主機上有多塊硬碟,系統會依據bios的設定,選擇某塊硬碟的mbr讀取引導裝載程式。

系統的mbr指的是第乙個啟動裝置的mbr。

bootloader

由於我們的系統軟體大多放置到硬碟中,所以bios會指定啟動的裝置,好讓我們可以讀取磁碟中的作業系統核心檔案。但由於不同的作業系統的檔案系統格式不相同,因此我們必須要以乙個引導裝載程式(boot loader)來處理核心檔案載入的問題。

載入核心檢測硬體

當通過boot loader的管理而開始讀取核心檔案後,接下來,linux就會將核心解壓縮到記憶體當中,並利用核心的功能開始測試與驅動各個周邊裝置,包括儲存裝置、cpu、網絡卡、音效卡等。此時linux核心會以自己的功能重新檢測一次硬體,而不一定會使用bios檢測到的硬體資訊。也就是說核心此時才開始接管bios後的工作。

核心檔案一般放再/boot裡面。

第乙個程序init

在核心載入完畢之後進行完硬體檢測與驅動程式載入後,此時你的主機硬體應該已經準備就緒了,此時核心會主動呼叫第乙個程序/sbin/init。

/sbin/init最主要的功能就是準備軟體執行的環境,包括系統的主機名、網路設定、語系處理、檔案系統格式以及其他服務的啟動等。而所有的操作都會通過init的配置檔案,即是/etc/inittab來規劃,而inittab內還有乙個很重要的設定選項,runlevel。

init處理系統初始化流程/etc/rc.d/rc.sysinit

/etc/inittab中si::sysinit:/etc/rc.d/rc.sysinit,這表示開始載入各項系統服務之前,得先設定好整個系統環境,主要是利用/etc/rc.d/rc.sysinit這個shell指令碼來設定好系統的環境。

啟動系統服務與相關啟動配置檔案

啟動系統服務/etc/rc.d/rc。

相關啟動配置檔案/etc/sysconfig。

載入核心讓整個系統準備接受命令來工作,再經過/etc/rc.d/rc.sysinit的系統模組與相關硬體資訊的初始化後,我們還需要啟動系統所需的各項服務,這樣主機才能提供我們相關的網路或主機功能。

依據/etc/inittab中runlevel的設定值來決定啟動的服務選項。

下面是各個runlevel服務啟動的各項指令碼放置處。

/etc/inittab中:

l0:

0:wait

:/etc/rc.d/rc 0

l1:1

:wait

:/etc/rc.d/rc 1

l2:2

:wait

:/etc/rc.d/rc 2

l3:3

:wait

:/etc/rc.d/rc 3

l4:4

:wait

:/etc/rc.d/rc 4

l5:5

:wait

:/etc/rc.d/rc 5

l6:6

:wait

:/etc/rc.d/rc 6

格式:

id:runlevel:action:process

對/etc/rc.d/rc 3解釋:

根據上圖我們可以發現全是連線檔案,連線到服務啟動目錄/etc/init.d/去。

使用者自定義開機啟動程式/etc/rc.d/rc.local

有任何想要在啟動時就進行的工作,直接將它寫入/etc/rc.d/rc.local,那麼該工作就會在啟動的時候被自動載入,而不必等到登入系統後去啟動。

根據/etc/inittab的設定載入終端機

在完成了系統所有服務的啟動後,接下來linux就會啟動終端機來等待使用者登入。

/etc/inittab中

1

:2345

:respawn

:/sbin/mingetty tty1

2:2345

:respawn

:/sbin/mingetty tty2

3:2345

:respawn

:/sbin/mingetty tty3

4:2345

:respawn

:/sbin/mingetty tty4

5:2345

:respawn

:/sbin/mingetty tty5

6:2345

:respawn

:/sbin/mingetty tty6

init執行終端機模擬程式mingetty來啟動login程式,最後等待使用者登入。

Linux啟動流程分析

linux系統從啟動到提供服務的過程是這樣,先是機器加電,然後通過mbr或者uefi載入grub,再啟動核心,核心啟動服務,然後開始對外服務。載入bios的硬體資訊與進行自我測試,並依據設定取得第乙個可啟動的裝置 比如硬碟 讀取並執行第乙個開機裝置內mbr 的boot loader 即grub2,s...

Linux啟動流程分析

1.獲取資訊 當按下電源鍵後,系統首先就會去載入bios basic input output system 並通過bios程式去載入cmos的資訊,並且藉由cmos內的設定取得主機的各項硬體配置。例如cpu與介面裝置的溝通頻率 啟動裝置的查詢順序 硬碟的大小與型別 系統時間 各周邊匯流排是否啟動p...

linux啟動流程分析 4

author taoyuetao email tao yuetao yahoo.com.cn blog 2007 02 08 的地方,望高手指點,自己也會不斷進行修改 當進入linux核心後,arch arm kernel head armv.s是核心最先執行的乙個檔案,包括從核心入口entry s...