首先此篇先大體介紹下整個(gè)系統的開(kāi)機流程,再來(lái)對其一一展開(kāi)進(jìn)行詳細的說(shuō)明
第一步:首先進(jìn)行開(kāi)機自檢POST,確認硬件正常后進(jìn)入下一步
第二步:BIOS initialization(BOOT SEQ)BIOS初始化,并按照BIOS中設定的開(kāi)機啟動(dòng)加載設備進(jìn)行依次的檢測
第三步:MBR(bootloader)在BIOS檢測到某一設備可以啟動(dòng)后,開(kāi)始加載MBR上的引導程序,在linux中,引導分為2個(gè)階段,首先加載在MBR上的一段極其精簡(jiǎn)的啟動(dòng)程序,由此啟動(dòng)程序引導boot目錄中的grub,再由grub進(jìn)行具體系統的引導啟動(dòng)(grub是一個(gè)很強大的系統啟動(dòng)引導管理軟件,也可以引導window)
第三步:Kernel initialization 在由grub引導linux內核后,啟動(dòng)內核,由內核檢測基本硬件設備裝載對應驅動(dòng),并裝載rootfs和啟動(dòng)init(/etc/inittab)
第四步:系統啟動(dòng)和初始化,在啟動(dòng)init后,才開(kāi)始真正的系統啟動(dòng),內核退居到后臺,由init來(lái)接管整個(gè)系統的加載和啟動(dòng),init會(huì )根據設定進(jìn)行系統進(jìn)一步的初始化,下面是init啟動(dòng)后進(jìn)行的一系列操作
1.完成系統整體初始化:/etc/rc.d/rc.sysinit (此腳本可以細細研讀)
2.啟動(dòng)對應級別的各個(gè)服務(wù):/etc/rc.d/rc 利用/etc/rc.d/ec[0-6].d/目錄下的所有腳本啟動(dòng)或者停止服務(wù)
/etc/rc.d/ec[0-6].d/下都是鏈接文件,鏈接到/etc/rc.d/init.d/下的各個(gè)腳本
3./etc/rc.local (鏈接到/etc/rc.d/rc.local)給用戶(hù)定義的額外開(kāi)機操作項
4.啟動(dòng)虛擬終端,驗證用戶(hù)登錄(圖形界面則調用其他如XDM來(lái)驗證用戶(hù)登錄)
至此 系統啟動(dòng)完整,可以說(shuō),整個(gè)系統的啟動(dòng)都是靠一堆腳本來(lái)完成的
第一二步驟涉及到硬件的POST和BIOS階段就不再細說(shuō)了,從bootloader開(kāi)始說(shuō)起
bootloader
這是一段放置在MBR錢(qián)446字節中的一段精簡(jiǎn)的引導程序(MBR一共有512字節,后64字節既是分區表,還有最后2個(gè)字節的填充)
常見(jiàn)的bootloader程序有
LILO:LInux LOader 可以引導多個(gè)操作系統,但不支持大硬盤(pán)
GRUB:GRand Unified Bootloader 目前比較常見(jiàn)的引導加載器,這是一個(gè)分段的引導加載器,在Ubunt上用的是GRUB1.9x。
時(shí)隔10年,最新的GRUB2在昨天正式發(fā)布了,有興趣的童鞋可以去關(guān)注下
可以在開(kāi)機時(shí)進(jìn)入GRUB的交互模式,直接輸入參數啟動(dòng)系統,在這里可以輸入單用戶(hù)啟動(dòng)參數直接進(jìn)入單用戶(hù)模式進(jìn)行密碼修改等操作
之前說(shuō)這是一個(gè)分段的引導程序這里來(lái)說(shuō)說(shuō)具體是怎么分段的
第一段:MBR
用來(lái)引導進(jìn)入第二段,在完成第一段后,初始化GRUB自我初始化后,并正常啟動(dòng)第二段
第二段:/boot/grub
由于MBR上的引導程序只有446字節,所以能放置的內容很少,功能很弱,所以通過(guò)引導啟動(dòng)第二段放置在磁盤(pán)中/boot/grub目錄下強大的GRUB程序,來(lái)擴展其更為強大的引導功能
此目錄下的配置文件
/boot/grub/grub.conf
搬照我的配置文件來(lái)詳細說(shuō)明
Kernel initialization
1、硬件探測
2、硬件驅動(dòng)初始化(initrd)
3、掛載根文件系統(為了避免額外進(jìn)程寫(xiě)操作破壞文件系統,所以在這里是使用只讀掛載)
4、啟動(dòng)/sbin/init (PID:1)
在Kernel階段,需要掛在根目錄,而linux單內核系統,但它也吸收了微內核的特性,所以它包括了內核模塊。
內核:/boot/vmlinuz-version 模塊:/libmodules/version/
把模塊集成進(jìn)內核能提高效率,但也增大了內核體積,所以使用加載模塊的方式提高了可管理性
這里就造就了一個(gè)問(wèn)題,由于內核比較精簡(jiǎn),所以不可能集成進(jìn)很多的驅動(dòng)進(jìn)去,由內核初始化后是必須要加載根文件系統的,一旦根文件系統放在RAID或LVM設備上,由于內核缺少這些高級文件系統的驅動(dòng),會(huì )導致無(wú)法加載。于是就在這里加了一層中間層,就是這里的initrd了。initrd是一個(gè)微型的根文件系統,內置額外內核中沒(méi)有的驅動(dòng)模塊
首先內核借助initrd加載根文件系統,然后加載真實(shí)根文件系統驅動(dòng)和其它必須驅動(dòng)后,切換到真正的根文件系統。所以initrd只是起到一個(gè)過(guò)渡的作用
內核初始化產(chǎn)生的所有信息保存在/var/log/dmesg 二進(jìn)制文件,使用dmesg命令查看
init 系統初始化
加載完成內核后,啟動(dòng)整個(gè)系統的父進(jìn)程,PID為1 的init
init接管系統后,結合/etc/initab的配置,加載各種需要的庫文件,啟動(dòng)各個(gè)進(jìn)程,比如bash,用戶(hù)登錄驗證等。。。
此篇寫(xiě)述說(shuō)原理,具體打造過(guò)程請期待下一篇。 見(jiàn) http://www.linuxidc.com/Linux/2012-07/64754.htm
聯(lián)系客服