分析Linux系統的啟動過程

2021-09-03 08:15:52 字數 2080 閱讀 5451

一直使用linux系統,卻對系統啟動過程及系統初始化和各種服務的啟動不太清楚。今天終於搞明白整個是怎麼一回事了。本來想自己寫篇文章,剛好在網上看到一篇不錯的介紹,很詳細,就直接拿來了。

linux系統的啟動過程:

bios自檢 —> grub引導程式 —> 載入核心 —> 執行init —> 啟動shell —> login登陸系統

系統啟動各個階段的詳細介紹:

計算機在接通電源之後首先由bios進行post自檢,然後依據bios內設定的引導順序從硬碟、軟盤或cdrom中讀入引導塊。linux系統是人bios中的位址oxffff0處開始引導的。bios的第1個步驟是加電post自檢。post的工作是對硬體進行檢測。bios的第2個步驟是進行本地裝置的列舉和初始化。bios由兩部分組成:post**和執行時的服務。當post完成之後,它被從記憶體中清理出來,但是bios執行時服務依然保留在記憶體中,目標作業系統可以使用這些服務。

bios執行時會按照cmos的設定定義的順序來搜尋處於活動狀態並且可以引導的裝置。引導裝置可以是軟盤、cd-rom、硬碟上的某個分割槽、網路上的某個裝置甚至是usb快閃儲存器。通常,linux系統都是從硬碟上引導的,其中主引導記錄(mbr)中包含主引導引導程式。mbr是乙個512位元組大小的扇區,位於磁碟上的第乙個扇區(0道0柱面1扇區)。當mbr被載入到ram中之後,bios就會將控制權交給mbr。

如果要檢視mbr的內容,使用者需要以root使用者的身份執行如下命令:

讀入了1+0個塊

輸出了1+0個塊

它從/dev/had(第乙個ide盤)上讀取前512個位元組的內容,並將其寫入mbr.bin檔案中。od命令會以十六進製制和ascii碼格式列印這個二進位制檔案的內容。

grub和lilo都是引導引導程式。引導引導程式用於引導作業系統啟動。當機器引導它的作業系統時,bios會讀取引導介質上最前面的512位元組(主引導記錄)。在單一的mbr中只能儲存乙個作業系統的引導記錄,所以當需要多個作業系統時就會出現問題,需要更靈活的引導引導程式。

所有引導引導程式都以類似的方式工作,滿足共同的目的,但lilo和grub之間也有很多不同之處:

lilo沒有互動式命令介面,而grub擁有;

lilo不支援網路引導,而grub支援;

lilo將可以引導作業系統的資訊儲存在mbr中。

如果修改了lilo配置檔案,必須將lilo第一階段引導引導程式重寫到mbr。相對於grub,這是乙個更為危險的選擇,因為錯誤配置的mbr可能會讓系統無法引導。使用grub時,如果配置檔案配置錯誤,則只是預設轉到grub命令列介面。

接下來的步驟就是載入核心映像到記憶體中,核心映像並不是乙個可執行的核心,而是乙個壓縮過的核心映像。通常它是乙個zimage(壓縮映像,小於512kb)或是乙個bzimage(較大的壓縮映像,大於512kb),它是提前使用zlib壓縮過的。在這個核心映像前面是乙個例程,它實現少量硬體設定,並對核心映像中包含的核心進行解壓縮,然後將其放入高階記憶體中。如果有初始ram磁碟映像,系統就會將它移動到記憶體中,並標明以後使用。然後該例程會呼叫核心,並開始啟動核心引導的過程。

init程序是系統所有程序的起點,核心在完成核內引導以後,即在本程序空間內載入init程式,它的程序呈是1。init程序是所有程序的發起者和控制者。因為在任何基於linux的系統中,它都是第乙個執行的程序,所以init程序的編號(pid)永遠是1。

init程序有以下兩個作用。

init程序的第乙個作用是扮演終結父程序的角色。因為init程序永遠不會被終止,所以系統總是可以確信它的存在,並在必要的時候以它為參照。如果某個程序在它衍生出來的全部子程序結束之前被終止,就會出現必須以init為參照的情況。此時那些失去了父程序的子程序就都會以init作為它們的父程序。

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

init的工作是根據/etc/inittab來執行相應的指令碼,進行系統初始化,如設定鍵盤、字型、裝載模組,設定網路等。

Linux啟動過程分析

boot loader 當cpu一上電,此時cpu必須從nor flash或者nand flash中取指令 直接從 nand flash取指令的ap為支援nand 啟動 nand boot 其實原理就是ap 內部的rom裡有一小段 包括nand flash驅動,它啟動從nand flash中讀取一段...

Linux 啟動過程分析

runlevel 命令 可以檢視當前的執行級別 linux 系統啟動過程如下 1 bios自檢 2 啟動grub lilo 3 執行linux 核心並檢測硬體 4 執行系統的第乙個程序init 5 init 讀取到系統引導配置檔案 etc inittab中的資訊進行初始化 6 etc rc.d rc...

Linux系統的啟動過程

linux的啟動過程 這裡先給乙個簡單的概述,後面再是詳述 a.位於rom的bios首先加電自檢,然後裝載mbr內容到ram,將控制權交給ram中的bootloader 比如grub b.bootloader進行自身的多階段引導,裝載一些檔案系統的驅動等,最後將核心裝載入ram c.核心首先執行,然...