Linux的啟動過程

2021-12-29 16:33:20 字數 2924 閱讀 2926

由於bios功能使用上的不同,它由兩個部分組成:post碼runtime服務。post完成後,它將從儲存器中被清除,但是bios runtime服務會被保留,用於目標作業系統。

為了啟動作業系統,bios的runtime服務將搜尋那些啟用狀態的或是可引導啟動的裝置,搜尋的順序則由cmos設定決定(也就是我們平時所謂的在 bios中設定的啟動順序)。乙個軟碟機,一台光碟機,乙個硬碟上的分割槽,網路上的裝置甚至乙個usb 快閃儲存器盤都可以作為乙個啟動裝置。

當然,linux通常是從硬碟啟動的。硬碟上的mbr(主啟動記錄)包含有基本的boot loader,它是乙個512位元組大小的扇區,位於磁碟的第乙個扇區(0磁頭0磁軌1扇區)。當mbr被裝載到ram中後,bios就會將控制權轉交給mbr。

vim   /etc/grub.conf

root (hd0,0)

通過mbr進入作業系統管理選單(/etc/grub.conf   hiddenmenu  管理選單預設是隱藏的)。

核心作用:驅動硬體,管理記憶體,排程任務。

ll  -h  /boot/vmlinuz***核心是很小的1.8m

2. 核心啟動:建立1#程序並執行,由它建立若干核心執行緒(kernel thread),然後裝入並執行程式/sbin/init(變成乙個使用者程序)。此後,init根據/etc/inittab配置檔案來執行相應的指令碼進行系統初始化,如設定鍵盤、字型,裝載模組,設定網路等。

對於redhat來說,執行的順序為:

/etc/rc.d/rc.sysinit # 由init執行的第一指令碼

/etc/rc.d/rc $runlevel # init執行指定執行級別($runlevel為預設的執行模式)的各指令碼;

/etc/rc.d/rc.local #執行模式2、3、5時會執行的指令碼

/sbin/mingetty(或getty) # 等待使用者登入

/etc/inittab中指定了系統的執行級別(runlevel),init根據執行級別啟動相關的服務(一些後台程序),實現不同的功能。

runlevel值為:0-6

0:halt, 1:單使用者,2:多使用者,3:多使用者並啟動nfs服務

4:保留,5:執行xdm(x window)以圖形介面方式登入

6:reboot

3./etc/inittab檔案

/etc/inittab的檔案內容如下:

# 設定系統開機預設的runlevel:

id:3:initdefault:

# 開始進行runlevel的服務啟動前,使用來偵測與初始化系統環境的設定檔案:

si::sysinit:/etc/rc.d/rc.sysinit

# 是否允許按下 [ctrl]+[alt]+[del] 就重新開機的設定專案:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

摘引:init程序和inittab引導指令

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

init程式需要讀取/etc/inittab檔案作為其行為指標,inittab是以行為單位的描述性(非執行性)文字,每乙個指令行都具有以下格式:

id:runlevel:action:process其中id為入口識別符號,runlevel為執行級別,action為動作代號,process為具體的執行程式。

id一般要求4個字元以內,對於getty或其他login程式項,要求id與tty的編號相同,否則getty程式將不能正常工作。

runlevel是init所處於的執行級別的標識,一般使用0-6以及s或s。0、1、6執行級別被系統保留,0作為shutdown動作,1作為重啟至單使用者模式,6為重啟;s和s意義相同,表示單使用者模式,且無需inittab檔案,因此也不在inittab**現,實際上,進入單使用者模式時,init直接在控制台(/dev/console)上執行/sbin/sulogin。

在一般的系統實現中,都使用了2、3、4、5幾個級別,在redhat系統中,2表示無nfs支援的多使用者模式,3表示完全多使用者模式(也是最常用的級別),4保留給使用者自定義,5表示xdm圖形登入方式。7-9級別也是可以使用的,傳統的unix系統沒有定義這幾個級別。runlevel可以是並列的多個值,以匹配多個執行級別,對大多數action來說,僅當runlevel與當前執行級別匹配成功才會執行。

initdefault是乙個特殊的action值,用於標識預設的啟動級別;當init由核心啟用以後,它將讀取inittab中的initdefault項,取得其中的runlevel,並作為當前的執行級別。如果沒有inittab檔案,或者其中沒有initdefault項,init將在控制台上請求輸入 runlevel。

sysinit、boot、bootwait等action將在系統啟動時無條件執行,而忽略其中的runlevel,其餘的action(不含initdefault)都與某個runlevel相關。

id:3:initdefault:

#表示當前預設執行級別為3--完全多工模式;

si::sysinit:/etc/rc.d/rc.sysinit

#啟動時自動執行/etc/rc.d/rc.sysinit指令碼

l3:3:wait:/etc/rc.d/rc 3   

#當執行級別為3時,以3為引數執行/etc/rc.d/rc指令碼,init將等待其返回

0:12345:respawn:/sbin/mingetty tty0

#在1-5各個級別上以tty0為引數執行/sbin/mingetty程式,開啟tty0終端用於

#使用者登入,如果程序退出則再次執行mingetty程式

x:5:respawn:/usr/bin/x11/xdm -nodaemon

#在5級別上執行xdm程式,提供xdm圖形方式登入介面,並在退出時重新執行

附圖:

作者「不吃西紅柿」

Linux啟動過程

1 開啟 pc電源 pc加電後,乙個特殊的硬體電路會觸發 cpu 的 reset 腳的邏輯值,然後一些 cpu 暫存器,如 cs eip 等被給定乙個值,接著 cpu 跳轉到乙個固定位址開始執行 bios 2 bios 自檢,按設定的裝置啟動 bios 對硬體進行一系列徹底的檢查,如 cpu 型別 ...

Linux 啟動過程

fae 將porting 好的linux 提供,幾乎都在寫應用 空閒時間整理一下 b1202 系統啟動的過程 通過 boot vm 進行啟動 vmlinuz init 程序會讀取 etc inittab etc inittab 先 etc rc.d rc.sysinit 再 etc rc.d rc3...

Linux啟動過程

1.加電時由硬體將bios載入到記憶體末尾.這時是實模式,定址空間為1m.2.由硬體將cs段暫存器強制設定為0xffff,ip指令暫存器設定為0x0000.這樣cs ip指向了oxffff0的位址位置.這個位置就是bios程式的入口位址.3.執行bios程式.在記憶體起始位址0x00000設定1k大...