歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

詳解linux系統的啟動過程及系統初始化

一、linux系統的啟動流程

關於linux系統的啟動流程我們可以按步進行劃分為如下:

POST加電自檢-->BIOS(Boot Sequence)-->加載對應引導上的MBR(bootloader)-->主引導設置加載其BootLoader-->Kernel初始化-->initrd—>/etc/init進程加載/etc/inittab,其進程流程圖如下:

圖片

二、剖析詳細啟動過程

⑴、

  1. POST開機自檢:電腦主機打開電源的時候,隨後會聽到滴的一聲,系統啟動開始了開機自檢(POST-power on self
  2. test)自檢開始),這個過程中主要是檢測計算機硬件設備比如:CPU,內存,主板,顯卡,CMOS等設備是否有故障存
  3. 在,如果有硬件故障的話將按兩種情況理:對於嚴重故障(致命性故障)則停機,此時由於各種初始化操作還沒完成,
  4. 不能給出任何提示或信號;對於非嚴重故障則給出提示或聲音報警信號,等待用戶處理),如果沒有故障,POST完整自己
  5. 的接力任務,將尾部工作交接給BIOS處理。

⑵、

  1. BIOS:計算機加電自檢完成後第一個讀取的地方就是就是BIOS(Basic Input Output System,基礎輸入輸出系統)
  2. ,BIOS裡面記錄了主機板的芯片集與相關設置,如CPU與接口設備的通信頻率、啟動設備的搜索順序、硬盤的大小與
  3. 類型、系統時間、外部總線、各種接口設備的I/O地址、已經與CPU通信的IRQ中斷信息,所以,啟動如果要順利啟動,
  4. 首先要讀取BIOS設置。

⑶、

  1. 按照BIOS所設定的系統啟動流程,如果檢測通過,則根據引導次序(Boot Sequence)開始在第一台設備上支持啟動
  2. 程序,我們的啟動設備主要包括硬盤、USB、SD等,我們一般用的是硬盤,然後進行讀取第一個設備就是硬盤,第一個
  3. 要讀去的就是該硬盤的主引導記錄MBR(Master Boot Record),然後系統可以根據啟動區安裝的
  4. 引導加載程序(Boot Loader)開始執行核心識別的工作。【在此插一句:MBR程序只是找到只是硬盤分區內最前面
  5. 的446個字節的Boot Loader】然後查找相關配置和定義。

⑷、

  1. Boot Loader 加載Grub程序
  2.  
  3. 在這個過程中主要靠Grub的引導開始的,Grub分為連個階段:
  4.  
  5. stage1:主要是Boot loader
  6.  
  7. stage 1.5:過渡
  8.  
  9. stage2:主要是/boot/grub

圖片

通過上面我們可以發現linux的內核VMLnuz,grub、initrd都在/boot目錄下

圖片

在/boot/grub/下面我們看到了熟悉的stage1,stage2及grub工具的配置文件 grub.conf,那麼grub.conf內都定義了什麼吶??

圖片

⑸、Kernel

  1. 根據Grub內的定義,grub讀取完畢後就把下面的工作交個內核了。kernel主要是完成系統硬件探測及硬件驅動的初始
  2. 化,並且以讀寫的方式掛載根文件系統(根切換),那麼這裡就出現了一個“先有雞還是先有蛋的文件了”,具體是什麼
  3. 那?
  4.  
  5. 要想訪問真正的根文件系統(rootfs)的話,就必須加載根文件系統中的設備,這時根文件系統又沒有掛載,
  6. 要掛載根文件系統又得加載根文件系統中的驅動程序,哪怎麼辦呢?為了解決這個問題,這是就用到了initrd文件了。
  7. 在來說下kernel初始化所要工作的內容做下簡單總結:
  8. 探測硬件->加載驅動(initrd)->掛載根文件系統->rootfs(/sbin/init)

⑹、

  1. 到此止內核空間的相關工作已經完成,內核空間的任務開始向用戶空間轉移,內核空間通過一個間接的initrd(微型
  2. linux)向用戶空間的/sbin/init過度,所以gurb開始引導內核轉向initrd。
  3.  
  4. initrd:一個虛擬的文件系統,裡面有lib、bin、sbin、usr、proc、sys、var、dev、boot等一些目錄,
  5. 其實你會發現裡面的目錄有點像真的/對吧,所以我們稱之為虛擬的根文件系統,作用就是將kernel和真的根文件系統
  6. 建立關聯關系,讓kernel去initrd中加載根文件系統所需要的驅動程序,並以讀寫的方式掛載根文件系統,並讓執行
  7. 用戶當中第一個進程init。

圖片

下面我們看下init腳本內的內容:

圖片

 

圖片

圖片

Copyright © Linux教程網 All Rights Reserved