Linux啓動流程

BIOS ->MBR-> BOOT LOADER ->KERNEL -> INIT process -> login

1、BIOS 加電自檢

按電源開機,電腦首先啓動BIOS(基本輸入輸出系統),BIOS一般是集成在主板上的。

BIOS 的工作。

1)檢測鏈接硬件,比如顯卡,內存,磁盤等等,檢測的目的是以後把這些設備信息提供給操作系統。

2)尋找啓動磁盤,第一種BIOS都會有開機啓動菜單,可以在菜單裏設置以哪個設備上啓動系統。比如:光驅,硬盤,網絡等等,這個菜單可以設置多個選項,依照設置次序在設備上尋找啓動信息。

3)找到了啓動硬盤,接着BIOS就會在磁盤上尋找第一個啓動扇區,也就是主引導記錄MBRMaster Boot Record)。

但是MBR中,存儲操作系統的空間只有446字節;MBR總共是512字節(=stage1)(其中引導程序佔446字節+分區表64字節,每16個字節記錄一個分區,標識符即校驗碼佔2個字節,以55.aa結尾)

如果沒有在MBR中找到操作系統的內核,那麼BIOS就無法繼續啓動工作。

而我們的內核往往會大於446字節,存放在磁盤的其他位置上,既然446字節裝不下內核,又爲了能順利的找到放到其他位置的內核,人們想出了一個辦法,就是在這446字節裏寫一個小程序,當BIOS試着啓動操作系統時會執行這個小程序,然後再由小程序來載入位於其他位置的內核。這個小程序就是啓動載入器(boot loader)

查看MBR

dd if=/dev/sda of=./mbr.bin bs=1count=512

然後用 hexdump –C mbr.bin 查看

2、BOOTloader

linux boot loader 常見有兩種:lilogrub

由於lilo 存在着一個1024柱面的限制,並且更改了磁盤上的啓動信息文件後需要重新啓動系統才能同步446字節的內容,因此已經被grub所取代,現在絕大多數類Linux系統都採用grub bootloader

 grub 沒有lilo各種限制,而且修改系統文件的啓動內容後立刻就會與446內容同步。

 grub 存在與/boot/grub

wKioL1NSfOnity2CAAD_Ab4ww48749.jpg

GRUB有幾個重要文件:stage1 , stage1_5 ,stage2

stage1 :它只有512字節,通常放在MBR中,它的作用很簡單,就是在系統啓動時用於裝載stage2並將控制權交給它。

stage2GRUB的核心,所有的功能都是由它實現。

stage1_5:介於stage1stage2之間,是他們的橋樑,因爲stage2較大,通常都是放在一個文件系統當中的,但是stage1並不能識別文件系統格式,所以才需要stage1_5來引導位於某個文件系統當中的stage2 。根據文件系統格式的不同,stage1_5也需要相應的文件,如e2fs_stage1_5fat_stage1_5分別用於識別extfat的文件系統格式。它存放於1-63柱面之間。

引導順序:stage1à stage1_5 à stage2

主要的配置文件是grub.conf

裏面選項含義:

title一個操作系統引動的標頭,可以使多個。

root:指明所需文件存在於哪個磁盤哪個分區上(hd0,0)表示第一個硬盤,第一個分區

kernel :內核文件的名字,並且會有一些加載內核時的參數

initrd :包含一些附加的驅動程序,一些靜態驅動

wKioL1NSfNayLaGGAAObEWeEt5E707.jpg

3、內核啓動

內核啓動後會向BIOS查詢電腦的所有硬件信息,然後自己接手過來管理這些設備,以便提供給Linux使用。

內核試着驅動這些設備,這些設備的驅動一份在內核中,叫靜態驅動;一部分以模塊的方式(動態)存放文件系統中,由於此事還未掛載任何文件系統,因此還不能使用文件系統中的模塊,這裏只能驅動在內核中存在的硬件驅動程序的對應設備,想驅動內核中未包含的硬件驅動就需要加載文件系統。

4、啓動INIT服務

順利的掛在了根文件系統後,就會啓動INIT服務,init 內核啓動的第一個用戶級進程。

內核會按/sbin/init /etc/init /bin/init 順序查找init程序。

如果找不到則內核報錯。

啓動init的目的就是爲了初始化系統環境,啓動了init就證明了內核已經順利啓動,接下來就有Init服務來建立Linux使用環境。

init做了什麼?它會讀取/etc/inittab文件,根據這個文件的信息來進行初始化工作。

會執行三個腳本 /etc/rc.d/rc.sysinit  /etc/rc.d/rc[0-6].d/* /etc/rc.d/rc.local(萬能配置文件,系統啓動完畢後,最後運行此文件內的命令)

rc.sysinit 主要的功能用來建立系統的基本環境,比如:

啓動udev selinux 子系統

udev 負責產生/dev中的文件,selinux 負責增強系統的安全性

設定核心參數 sysctl-p 加載/etc/sysctl.conf

設定系統時間將硬件時間設定爲系統時間

加載鍵盤和交換分區 swapon –a –e

設置主機名,掛載文件系統,並將根重新掛載爲可讀寫

加載動態驅動模塊

usb設備與RAID&LVM


rc腳本設置啓動級別,Linux中有許多不同的啓動級別,不同的啓動級別會制定不同的服務。

根據指定rc的參數會對應執行/etc/rc.d/rc.[0-6].d/中的連接腳本文件以s開頭的則啓動,k開頭的不隨機自啓動。rc.local前兩個腳本都是系統至關重要的腳本,如果我們想在啓動過程中放置一些其他程序,應該使用rc.local 腳本中。

三個RC腳本執行完畢後,就會建立虛擬主控制檯,執行/bin/login 就提供了用戶登錄界面了

如果是圖形L5級別的話,會啓動XWindows 登陸界面

所有的啓動就都已經完畢。


初始化 /sbin/init

vim /etc/inittab  初始化配置文件

wKiom1NSfTaQt38oAAE9Q9mtEL4012.jpg

wKioL1NSfQ2wGrSPAABN82GLLow735.jpg

wKiom1NSfTeAqq4AAAIj29GZYZ4425.jpg



其中rc.sysinit (啓動初始化) rc0~6爲運行級別腳本,啓動或關閉的控制文件,s啓動,k關閉。啓動或關閉的數字越小,優先級越高。

5、登錄,加載用戶環境變量

輸入用戶和密碼系統驗證,然後會執行

/etc/bashrc

/etc/profile

$HOME/.bashrc

$HOME/.bash_profile

查看當前的啓動級別: runlevel

切換級別:init 3

wKiom1NSfVjhyCF-AAA_eZg9YLw421.jpg


用戶模版:/etc/skel

wKiom1NSfWnTSsKpAABKYT4EgD8205.jpg

wKioL1NSfT-jO4vfAABilksXqUY215.jpg

wKiom1NSfWmA5rAJAAGU7PWFe5M709.jpg

注:部分轉自http://www.lishiming.net/forum.php?mod=viewthread&tid=6664&extra=page%3D1%26filter%3Dtypeid%26typeid%3D3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章