- 論壇徽章:
- 0
|
)BIOS自檢2)啟動Grub/Lilo3)加載內(nèi)核4)執(zhí)行init進程5)通過/etc/inittab文件進行初始化6)登陸Linux
1)BIOS自檢
a)POST(Power On Self Test),對硬件進行檢測
計算機在通電后首先由BIOS進行自檢,即所謂的POST(Power On Self Test),對硬件進行檢測
依據(jù)BIOS內(nèi)設(shè)置的引導順序從硬盤、軟盤或CDROM中讀入"引導塊"。
在PC中,Linux是從BIOS中的地址0xFFFF0處開始的。
BIOS的第一個步驟是加電自檢(POST),對硬件進行檢測。
第二個步驟是進行本地設(shè)備的枚舉和初始化。
BIOS由兩部分組成: POST代碼和運行時服務(wù)。
當POST完成后,它從內(nèi)存中清理出來,但BIOS運行時服務(wù)依然保留在內(nèi)存中,目標操作系統(tǒng)可以使用這些服務(wù)。
要引導一個操作系統(tǒng),BIOS運行時會按照CMOS的設(shè)置的順序來搜索處于活動狀態(tài)并可引導的設(shè)備:軟盤、CD-ROM、硬盤上的分區(qū)、網(wǎng)絡(luò)上的某個設(shè)備、USB(通常Linux是從硬盤引導的。
主引導記錄MBR中包含主引導加載程序。MBR是一個512字節(jié)大小的扇區(qū),位于磁盤上的第一個扇區(qū)中(0道0柱面1扇區(qū)))當MBR被加載到RAM中之后,BIOS會把控制權(quán)交給MBR。
b)提取MBR的信息
要看MBR的內(nèi)容,請使用下面的命令:
#從/dev/sda上讀取前512個字節(jié)的內(nèi)容,并將其寫入mbr.bin文件中
[root@localhost pam.d]# dd if=/dev/sda of=mbr.bin bs=512 count=1
#以十六進制和ASCII碼格式打印這個二進制文件的內(nèi)容
[root@localhost pam.d]# od -xa mbr.bin
0000000 48eb 0090 d08e 00bc fb7c d88e b9fc 0080
k H dle nul so P 2)啟動GRUB/Lilo
GRUB和LILO都是引導加載程序,它們會引導操作系統(tǒng)。當機器引導它的操作系統(tǒng)時,BIOS會讀取引導介質(zhì)上最前面的512字節(jié)(即MBR: master boot record)。
3)加載內(nèi)核
當內(nèi)核映像被加載到內(nèi)存后,內(nèi)核階段就加開始了。
內(nèi)核映像并不是一個可執(zhí)行的內(nèi)核,而是一個壓縮過的內(nèi)核映像。通常它是一個zImage(壓縮映像,小于512KB)或bzImage(較大的壓縮映像,大于512KB),它是提前使用zlib進行壓縮的。
在這個內(nèi)核映像前面是一個例程,它實現(xiàn)少量硬件設(shè)置,并對內(nèi)核映像中包含的內(nèi)核進行解壓,然后將其放入高端內(nèi)存中,如果有初始RAM磁盤映像,就會將它移動到內(nèi)存中,并標明以后使用,然后此例程會調(diào)用內(nèi)核,并開始啟動內(nèi)核引導的過程。
在GRUB命令中,我們可以使用initrd映像引導一個特定的內(nèi)核,方法如下:
grub> kernel /bzImage-2.6.14.2
[Linux-bzImage, setup=0x1400, size=0x29672e]
grub>initrd /initrd-2.6.14.2.img
[Linux-initrd @ 0x5f13000, 0xcc199 bytes]
grub> boot
Uncompressing Linux... Ok, booting the kernel.
如果不知道要引導的內(nèi)核的名稱,只需使用/然后按下Tab鍵,就會顯示內(nèi)核和initrd映像列表
對grub命令行進行加密 a)使用命令/sbin/grub-md5-crypt來產(chǎn)生grub使用的密碼 [root@localhost pam.d]# /sbin/grub-md5-crypt Password: Retype password: $1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1 b)修改/etc/grub.conf加入password --md5 $1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1 一定要放在title之前。 這樣重啟系統(tǒng)時在grub的啟動grub菜單時,想再按e命令進行編輯時,必須先按p鍵后輸入密碼才成功。
4)執(zhí)行init進程
init進程是所有進程的起點,內(nèi)核在完成內(nèi)核引導后,即在本線程(進程)空間內(nèi)加載init程序,它的進程號為1
init進程是所有進程的發(fā)起者和控制者
init進程有兩個作用:
扮演終結(jié)父進程的角色:所有的孤兒進程都會被init進程接管
進入某個特定的運行級別時運行相應(yīng)的程序,以此對各種運行級別進行管理,這個作用由/etc/inittab文件定義的
5)通過/etc/inittab文件進行初始化
init進程的工作是根據(jù)/etc/inittab來執(zhí)行相應(yīng)的腳本進行系統(tǒng)初始化,如設(shè)置鍵盤、字體,裝載模塊,設(shè)置網(wǎng)絡(luò)等,對于RedHat來說,按以下順序執(zhí)行
a)執(zhí)行/etc/rc.d/rc.sysinit(由init執(zhí)行的第一個腳本)
此步可進行的工作有:
設(shè)置$PATH變量
配置網(wǎng)絡(luò)
為虛擬內(nèi)存啟動交換
設(shè)置系統(tǒng)的主機名
檢查root文件系統(tǒng),以進行必要的修復(fù)
檢查root文件系統(tǒng)的配額
為root文件系統(tǒng)打開用戶和組的配額
以讀/寫的方式重新裝載root文件系統(tǒng)
清除被裝載的文件系統(tǒng)表/etc/matb
把root文件系統(tǒng)輸入到mtab
使用系統(tǒng)為裝入模塊做準備
查找模塊的相關(guān)文件
檢查文件系統(tǒng),以進行必要的修復(fù)
加載所有其他文件系統(tǒng)
清除幾個/etc文件,如/etc/mtab、/etc/fastboot和/etc/nologin
刪除UUCP的lock文件
刪除過時的子系統(tǒng)文件
刪除過時的pid文件
設(shè)置系統(tǒng)時鐘
打開交換
初始化串行端口
裝入模塊
b)執(zhí)行/etc/rc.d/rcX.d[KS]
首先終止K開頭的服務(wù)(用來關(guān)閉一個服務(wù)),然后啟動S開頭的服務(wù)(用來啟動一個服務(wù))
對每一個運行級別來說,在/etc/rc.d子目錄中都有一個對應(yīng)的下級目錄。
這些運行級別的下級子目錄的命名方法上rcX.d, 其中X就是代表運行級別的數(shù)字
在各個運行級別的子目錄中,都建立有到/etc/rc.d/init.d子目錄中命令腳本程序的符號鏈接
鏈接的名稱在K與S后有一個數(shù)字,表示執(zhí)行順序,數(shù)字小的先執(zhí)行如K01tog-pegasus 、 S00microcode_ctl
對以K開頭的腳本執(zhí)行時系統(tǒng)會傳遞stop參數(shù),而S開頭的腳本系統(tǒng)會傳遞start參數(shù)
c)執(zhí)行/etc/rc.d/rc.local
Redhat中運行模式2,3,5都把/etc/rc.d/rc.local作為初始化腳本中的最后一個文件,所以用戶可以自己在這個文件中添加一些需要在其他初始化工作之后,登陸之前執(zhí)行的命令。
6)執(zhí)行/bin/login
login程序會提示使用者需輸入帳號與密碼,接著編碼并確認密碼的正確性,若二者相合,則為使用者進行初始化環(huán)境,并將控制權(quán)交給shell,即等用戶登錄。
----------------至此,Linux啟動過程全部結(jié)束----------------------
[color="#000099"]原文地址
http://www.cnscn.org
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/93838/showart_1917192.html |
|