linux系統啟動流程詳解

2021-08-08 10:53:32 字數 3909 閱讀 3539

linux系統啟動流程詳解

對系統的流程先有乙個大概的了解開電源==bios自檢==啟動裝置(磁碟

oru盤or光碟機)==引導程式(lilo或grub)==核心==init程式(==rc.sysinit和

rc)==mingetty==終端登入==shell.

現在分為四個階段來講述

第一階段bios啟動引導階段實現硬體的初始

化以及查詢啟動介質從mbr中裝載啟動引導管理器(grub)並執行該啟動引導

管理器.

第二階段grub啟動引導管理器裝載stage1裝載stage2讀取

/boot/grub.conf檔案並顯示啟動選單裝載所選的kernel和initrd檔案到

記憶體中.

第三階段核心啟動階段執行核心啟動引數解壓並掛載initrd檔案系統,

裝載所需的驅動掛載根檔案系統.

第四階段init初始化階段啟動/sbin/init程序執行rc.sysinit指令碼,

設定系統環境,啟動swap分割槽,檢查和掛載檔案系統讀取/etc/inittab檔案,

執行在/etc/rc.d/rc n.d中定義的不同的執行級別服務初始化執行指令碼開啟

字元終端1–6號控制台or圖形管理的7號控制台.

第一階段系統開機上電後,主機板bios執行post(power on self test)代

碼,檢測系統外圍關鍵裝置(如cpu,記憶體,顯示卡,i/o,鍵盤,滑鼠等),硬體配置信

息及一些使用者配置引數儲存在主機板的cmos(complementary metal oxide

semiconductor)上(一般64位元組),實際上就是主機板上一塊可讀寫的ram晶元,由

主機板上的電池供電,系統掉電後,資訊不會丟失.執行post**對系統外圍關鍵

裝置檢測通過後,系統啟動自舉程式,根據我們在bios中設定的啟動順序搜尋啟

動驅動器(比如的硬碟,光碟機,網路伺服器等).選擇合適的啟動器,通常是硬碟裝置,

bios會讀取硬碟的第乙個扇區(mbr,512位元組),並執行其中的**.實際上這

裡bios並不關心啟動裝置第乙個扇區中是什麼內容,它只是負責讀取該扇區內

容,並執行,bios的任務就完成了.此後將系統啟動的控制權移交到mbr部分的

**.

第二階段bios通過下面兩種方法之一來傳遞引導記錄第一,將控制權

傳遞給initial program loader(ipl)該程式安裝在磁碟主引導記錄(mbr)中第

二,將控制權傳遞給initial program loader(ipl),該程式安裝在磁碟分割槽的

啟動引導扇區中無論上面的哪種情況中,ipl都是mbr的一部分並應該儲存於一

個不大於446位元組的磁碟空間中,因為mbr是乙個不大於512位元組的空間.因此

ipl僅僅是grub的第乙個部分(stage1),他的作用就是定位和裝載grub的第二

個部分(stage2)stage2對啟動系統起關鍵作用,該部分提供了grub啟動選單

和互動式的grub的shell.啟動選單在啟動時候通過/boot/grub/grub.conf文

件所定義的內容生成.在啟動選單中選擇了kernel之後,grub會負責解壓和裝

載kernel image並且將initrd裝載到記憶體中.最後grub初始化kernel啟動代

碼.完成之後後續的引導權被移交給kernel.

假設bootloader為grub,其引導系統的過程如下grub分為

stage1(stage1.5)和stage2,stage1可以看成是ipl,而stage2則是起到了

grub的關鍵作用,包括對特定檔案系統的支援(ext2,ext3等),grub自己的

shell,以及一些內部程式(如kernel,initrd,root)等.stage1mbr(0頭0道

1扇區),前446位元組是存放stage1,後面跟的是硬碟分割槽表資訊,bios將stage1

載入記憶體的0x7c00處並跳轉執行stage1(/stage1/start.s)的任務很單純,就

是將硬碟0頭0道2扇區的讀入記憶體.0頭0道2扇區的內容是源**中的

/stage2/start.s,編譯後512位元組,是stage2或stage1.5的入口.

是關於grub常用的幾個指令對應的函式grub root(hd0,0)–root指令

為grub指定了乙個根分割槽grub kernel/xen.gz-2.6.18-37.el5–kernel指令

將作業系統核心載入記憶體grub module/vmlinuz-2.6.18-37.el5xen ro

root=/dev/sda2–module指令載入指定的模組grub module/initrd-2.6.18-

37.el5xen.img–指定initrd檔案grub boot–boot指令呼叫相應的啟動函式

啟動os核心

第三階段grub boot指令後,系統啟動的控制權移交給kernel.kernel會

立即初始化系統中各裝置並做相關配置工作,其中包括cpu,i/o,儲存裝置等.關

於裝置驅動載入,有兩部分一部分裝置驅動編入linux kernel中,kernel會

呼叫這部分驅動初始化相關裝置,同時將日誌輸出到kernel message buffer,

系統啟動後dmesg可以檢視到這部分輸出資訊.另外有一部分裝置驅動並沒有編

入kernel,而是作為模組形式放在initrd(ramdisk)中.initrd是一種基於記憶體

的檔案系統,啟動過程中,系統在訪問真正的根檔案系統/時,會先訪問initrd文

件系統.將initrd中的內容開啟來看,會發現有

bin,devetc,lib,procsys,sysroot,init等檔案(包含目錄).其中包含了一些設

備的驅動模組,比如scsi ata等裝置驅動模組,同時還有幾個基本的可執行程式

insmod,modprobe,lvm,nash.主要目的是載入一些儲存介質的驅動模組,如上面

所說的scsi ideusb等裝置驅動模組,初始化lvm,把/根檔案系統以唯讀方式掛

載.initrd中的內容釋放到rootfs中後,kernel會執行其中的init檔案,這裡

的init是乙個指令碼,由nash直譯器執行.這個時候核心的控制權移交給init文

件處理,我們檢視init檔案的內容,主要也是載入各種儲存介質相關的裝置驅動.

驅動載入後,會建立乙個根裝置,然後將根檔案系統/以唯讀的方式掛載.這

步結束後釋放未使用記憶體並執行switchroot,轉換到真正的根/上面去,同時運

行/sbin/init程式.開啟系統的1號程序,此後系統啟動的控制權移交給init

程序.關於switchroot是在nash中定義的程式.實際上linux kernel僅是包含

了基本的硬體驅動,在系統安裝過程中會檢測系統硬體資訊,根據安裝資訊和系

統硬體資訊將一部分裝置驅動寫入initrd.這樣在以後啟動系統時,一部分裝置

驅動就放在initrd中來載入.

第四階段init程序起來後,系統啟動的控制權交給init進

程./sbin/init是所有程序的父程序,當init起來後會先讀取inittab檔案,進

行以下的工作a)執行系統初始化指令碼(/etc/rc.d/rc.sysinit),對系統進行基

本的配置,以讀寫方式掛載根檔案系統及其它檔案系統,到此系統基本算執行起

來了,後面需要進行執行級別的確定及相應服務的啟動b)確定啟動後進入的運

行級別c)執行/etc/rc.d/rc,該檔案定義了服務啟動的順序是先k後s,而具

體的每個執行級別的服務狀態是放在/etc/rc.d/rcn.d(n=0~6)目錄下,所有的文

件均鏈結至/etc/init.d下的相應檔案.d)有關key sequence的設定e)有關

Linux系統啟動流程詳解

以下是centos6的啟動流程 linux系統啟動的大體流程,可以概括為 post bios grub kernel init post 加電自檢 linux系統在接通電源後,首先系統會啟動post加電自檢程式來對內部的各個配件進行自檢,若在自檢的過程中發現錯誤,這可能會出現以下兩種情況 1.若出現...

Linux系統啟動流程

這是看linuxcast的筆記 linux系統啟動 使用grub引導 順序是 bios通電自檢,並找到512位元組的mbr 是grub引導的第一階段 把控制權交給mbr grub分兩個階段引導系統 第一階段mbr中的主引導引導程式加次引導載程式 第二階段次引導引導程式載入核心映像 核心映像建立進第乙...

Linux系統啟動流程

載入 bios 的硬體資訊與進行自我測試,並依據配置取得第乙個可啟動的裝置 讀取並執行第乙個啟動裝置內 mbr 的 boot loader 亦即是 grub,spfdisk 等程式 依據 boot loader 的配置載入 kernel kernel 會開始偵測硬體與載入驅動程式 在硬體驅動成功後,...