Linux系統啟動過程詳解

2021-04-30 05:41:54 字數 4067 閱讀 2727

1)bios自檢

2)啟動grub/lilo

3)載入核心

4)執行init程序

5)通過/etc/inittab檔案進行初始化

6)登陸linux

1)bios自檢

a)post(power on self test),對硬體進行檢測

計算機在通電後首先由bios進行自檢,即所謂的post(power on self test),對硬體進行檢測

依據bios內設定的引導順序從硬碟、軟盤或cdrom中讀入"引導塊"

在pc中,linux是從bios中的位址0xffff0處開始的

bios的第乙個步驟是加電自檢(post),對硬體進行檢測

第二個步驟是進行本地裝置的列舉和初始化

bios由兩部分組成: post**和執行時服務

當post完成後,它從記憶體中清理出來,但bios執行時服務依然保留在記憶體中,目標作業系統可以使用這些服務

要引導乙個作業系統,bios執行時會按照cmos的設定的順序來搜尋處於活動狀態並可引導的裝置:軟盤、cd-rom、硬碟上的分割槽、網路上的某個裝置、usb(通常linux是從硬碟引導的

主引導記錄mbr中包含主引導引導程式。mbr是乙個512位元組大小的扇區,位於磁碟上的第乙個扇區中(0道0柱面1扇區))當mbr被載入到ram中之後,bios會把控制權交給mbr

b)提取mbr的資訊

要看mbr的內容,請使用下面的命令

#從/dev/sda上讀取前512個位元組的內容,並將其寫入mbr.bin檔案中

[root@localhost pam.d]# dd if=/dev/sda of=mbr.bin bs=512 count=1

#以十六進製制和ascii碼格式列印這個二進位制檔案的內容

[root@localhost pam.d]# od -xa mbr.bin

0000000 48eb 0090 d08e 00bc fb7c d88e b9fc 0080

k   h dle nul  so   p   < nul   |   {  so   x   |   9 nul nul

0000020 f48b 00bf 8e06 f3c0 a566 2fea 0006 1000

vt   t   ? nul ack  so   @   s   f   %   j   / ack nul nul dle

2)啟動grub/lilo

grub和lilo都是引導引導程式,它們會引導作業系統。當機器引導它的作業系統時,bios會讀取引導介質上最前面的512位元組(即mbr: master boot record)

3)載入核心

當核心映像被載入到記憶體後,核心階段就加開始了

核心映像並不是乙個可執行的核心,而是乙個壓縮過的核心映像。通常它是乙個zimage(壓縮映像,小於512kb)或bzimage(較大的壓縮映像,大於512kb),它是提前使用zlib進行壓縮的

在這個核心映像前面是乙個例程,它實現少量硬體設定,並對核心映像中包含的核心進行解壓,然後將其放入高階記憶體中,如果有初始ram磁碟映像,就會將它移動到記憶體中,並標明以後使用,然後此例程會呼叫核心,並開始啟動核心引導的過程

在grub命令中,我們可以使用initrd映像引導乙個特定的核心,方法如下:

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.

如果不知道要引導的核心的名稱,只需使用/然後按下tab鍵,就會顯示核心和initrd映像列表

對grub命令列進行加密

a)使用命令/sbin/grub-md5-crypt來產生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之前

這樣重啟系統時在grub的啟動grub選單時,想再按e命令進行編輯時,必須先按p鍵後輸入密碼才成

4)執行init程序

init程序是所有程序的起點,核心在完成核心引導後,即在本執行緒(程序)空間內載入init程式,它的程序號為1

init程序是所有程序的發起者和控制者

init程序有兩個作用:

扮演終結父程序的角色:所有的孤兒程序都會被init程序接管

進入某個特定的執行級別時執行相應的程式,以此對各種執行級別進行管理,這個作用由/etc/inittab檔案定義的

5)通過/etc/inittab檔案進行初始化

init程序的工作是根據/etc/inittab來執行相應的指令碼進行系統初始化,如設定鍵盤、字型,裝載模組,設定網路等,對於redhat來說,按以下順序執行

a)執行/etc/rc.d/rc.sysinit(由init執行的第乙個指令碼)

此步可進行的工作有:

設定$path變數

配置網路

為虛擬記憶體啟動交換

設定系統的主機名

檢查root檔案系統,以進行必要的修復

檢查root檔案系統的配額

為root檔案系統開啟使用者和組的配額

以讀/寫的方式重新裝載root檔案系統

清除被裝載的檔案系統表/etc/matb

把root檔案系統輸入到mtab

使用系統為裝入模組做準備

查詢模組的相關檔案

檢查檔案系統,以進行必要的修復

載入所有其他檔案系統

清除幾個/etc檔案,如/etc/mtab、/etc/fastboot和/etc/nologin

刪除uucp的lock檔案

刪除過時的子系統檔案

刪除過時的pid檔案

設定系統時鐘

開啟交換

初始化串列埠

裝入模組

b)執行/etc/rc.d/rcx.d[ks]

首先終止k開頭的服務(用來關閉乙個服務),然後啟動s開頭的服務(用來啟動乙個服務)

對每乙個執行級別來說,在/etc/rc.d子目錄中都有乙個對應的下級目錄。

這些執行級別的下級子目錄的命名方法上rcx.d, 其中x就是代表執行級別的數字

在各個執行級別的子目錄中,都建立有到/etc/rc.d/init.d子目錄中命令指令碼程式的符號鏈結

鏈結的名稱在k與s後有乙個數字,表示執行順序,數字小的先執行如k01tog-pegasus  、 s00microcode_ctl

對以k開頭的指令碼執行時系統會傳遞stop引數,而s開頭的指令碼系統會傳遞start引數

c)執行/etc/rc.d/rc.local

redhat中執行模式2,3,5都把/etc/rc.d/rc.local作為初始化指令碼中的最後乙個檔案,所以使用者可以自己在這個檔案中新增一些需要在其他初始化工作之後,登陸之前執行的命令

6)執行/bin/login

login程式會提示使用者需輸入帳號與密碼,接著編碼並確認密碼的正確性,若二者相合,則為使用者進行初始化環境,並將控制權交給shell,即等使用者登入。

----------------至此,linux啟動過程全部結束----------------------

Linux系統啟動過程詳解

1 bios自檢 2 啟動grub lilo 3 載入核心 4 執行init程序 5 通過 etc inittab檔案進行初始化 6 登陸linux 1 bios自檢 a post power on self test 對硬體進行檢測 計算機在通電後首先由bios進行自檢,即所謂的post powe...

Linux系統啟動過程詳解

本文是學習日記,學自菜鳥教程。linux啟動過程並不複雜,主要分為五部分 核心的引導 執行init 系統初始化 建立終端 使用者登入系統。過程如下 第一部分 核心引導 作業系統接管硬體以後,首先讀入 boot目錄下的核心檔案。第二部分 init程序 在linux作業系統當中,init程序是所有程序的...

Linux系統啟動過程詳解

linux系統啟動 linux系統啟動是乙個非常複雜的過程,主要包括以下幾個部分 載入bios的硬體資訊並進行自檢,並依據設定取得第乙個可開機的裝置 讀取第乙個開機裝置內的mbr的boot loader依據boot loader的設定載入kernel,kernel會開始偵測並載入驅動程式 在硬體驅動...