《鳥哥的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...