天天看點

Linux啟動過程--從引導說起

Linux的引導過程是一個用來初始化系統的程式。它包含了在打開電源鍵之後直到使用者界面可操作之前的一切。

一旦你開始使用Linux,你會發現如果你對引導過程中的步驟非常熟悉,将會有助于你解決相關故障以及按需配置你的計算機。

打開電源–>BIOS–>MBR(主引導記錄,硬碟的第一個扇區–>引導程式(例如GRUB)–>核心(Linux 系統))–>initramfs映像–>/sbin/init(父程序)–>終端提示符–>X Windows System(圖形使用者界面)

BIOS - 第一步

開啟一台X86平台的Linux系統涉及到很多步驟。當計算機的電源被打開時,基本輸入輸出系統(BIOS)開始初始化硬體,包括螢幕、鍵盤,同時測試主存儲器。這個過程也被叫做POST(加電自檢)。 BIOS軟體被存儲在主機闆的一個ROM晶片上。在這之後,剩下的引導過程将完全的被作業系統所控制。

主引導記錄(MBR)和引導程式

一旦加電自檢完成,系統控制權就由BIOS傳遞給了引導程式。引導程式通常被存儲在系統中的一個硬碟,不是在引導扇區(傳統的BIOS/MBR系統)就是在EFI分區(較新的可擴充固件接口或者EFI/UEFI系統)。在這時,機器并不能存取大容量存儲器。之後,日期、時間以及最重要的外圍裝置被從CMOS(基于電池的存儲器,允許系統在斷電之後繼續記錄日期和時間)加載到系統。 在Linux中有很多引導程式;最常見的就是GRUB(統一引導程式)和ISOLINUX(從可移動媒體上啟動)。大多數的Linux 引導程式能提供使用者界面來選擇選項引導Linux,甚至其他可能安裝着的作業系統。當引導Linux時,引導程式負責加載核心映象和初始化RAM磁盤(包含了一些用來啟動系統的關鍵檔案和裝置驅動)到記憶體。

活動中的引導程式

引導程式分為兩個不同的階段

第一階段:

對于使用BIOS/MBR技術的系統,其引導程式位于硬碟的第一個扇區,又被成為主引導扇區(MBR)。MBR的大小僅僅為512位元組。在這個階段,引導程式檢查分區表尋找一個可啟動的分區。一旦找到,就開始尋找第二階段的引導程式,例如GRUB,并把它加載到RAM(随機存取存儲器)。 當系統使用EFI/UEFI技術時,UEFI固件讀取它的啟動管理程式來決定哪一個UEFI程式和哪裡開始(例如在哪個磁盤或分區可以找到EFI分區)啟動。固件随後啟動UEFI程式——比如說GRUB——它被定義為固件啟動管理程式的入口。這個步驟非常複雜但是它的靈活性遠遠超過了舊的MBR技術。

第二階段:

第二階段的引導程式位于/boot下。一個啟動畫面會被顯示用來讓我們選擇一個作業系統(OS)啟動。在選擇完OS之後,引導程式加載被選擇的作業系統的核心到記憶體中并将控制權移交給它。引導程式加載被選擇的核心映像(在這裡是Linux)并将控制權移交給它。核心基本上都是被壓縮的,是以它首先得解壓自己。在這之後,它将檢查并分析系統硬體并初始化硬體裝置驅動到核心中

Linux核心

引導程式同時加載核心和初始化檔案系統(initramfs)到記憶體,以使initramfs可以直接被核心使用。 當核心被加載到RAM中,它将立即初始化和配置計算機記憶體,同時也配置所有依賴于系統的硬體。包括所有的處理器、I/O子系統、儲存設備等等。核心同時也加載一些必須的使用者空間應用程式。

RAM的初始化

initramfs包含了用來加載正确的根檔案系統所需要的程式和二進制檔案,像是為檔案系統提供核心函數以及為一個叫做udev(面向USB裝置)的被用來确認裝置是否存在和定位适合的驅動并加載它們的大容量存儲控制器提供裝置驅動)。當發現根檔案系統後,将會進行錯誤檢測并加載。 mount程式通知作業系統有一個檔案系統已經準備好被使用了,并協助它挂載在整個檔案系統的最頂層(挂載點)。如果成功了,initramfs将會被從記憶體清除,然後根檔案系統 下的init程式(/sbin/init)将會被執行。 init處理挂載并轉到最終的、也是真正的根檔案系統下。如果在大容量儲存設備可以存取之前需要特殊的硬體驅動,它們必須被包含在initramfs映像中。

一旦核心設定好了所有硬體并被挂載到根檔案系統之後将會開始運作/sbin/init程式。這個初始程序将會啟動其他程序來讓系統開始運作。系統中的絕大多數其他程序歸根結底都是來源于init;例外的是核心程序,直接由核心啟動來管理作業系統的内部細節。 傳統上,(這個程序的啟動是使用System V UNIX的資料傳回約定來完成的,在系統經過一系列的包括各種開啟和關閉服務的腳本時。)???每種運作級别提供不同的系統運作模式。在不同的級别,每個單獨的服務都能被運作或者在運作時被關閉。較新的發行版已經開始抛棄the System V 标準了,但為了相容性的目的還是通常支援the System V約定。 除了啟動系統之外,init也負責保持系統運作和完全關閉系統。它表現為所有非核心程序的最終管理者,當需要時會在程序結束之後進行清理。同時在使用者登入登出時重新開機使用者登入程序。

字元界面登入

在引導過程結束之前,init啟動會一些字元界面的登入提示符(使用一個叫getty的程式)。它能允許你輸入使用者名和密碼,最後轉到指令解釋器。預設的指令解釋器通常是bash(Bourne Shell的後繼,叫GNU Bourne Again Shell),但也有許多其他的進階指令解釋器。shell輸出一個字元提示符,預示它已經準備好接受指令。在使用者輸入指令并按下Enter鍵之後,指令就會被執行。在指令執行完之後将會顯示另一個提示符。 在你學完後面的‘指令行操作’之後,終端将可以使用ALT鍵作為一個額外的功能鍵。大多數發行版啟動六個終端和用F1和F2啟動的圖形終端。如果圖形終端已經啟動了,切換到字元需要按下CRTL-ALT+功能鍵(F1到F7).如果你處在純字元模式,你可能需要使用startx指令來啟動或重新開機你的圖形桌面。

X Window System

通常,在一個Linux桌面系統中,加載X Window System是引導過程的最後一步。一個被稱為顯示管理器的服務被提供用來追蹤顯示過程和加載X server(這樣叫是因為它提供應用程式的圖形服務,有時也叫做X clients)。這個顯示管理器也處理圖形化的登陸界面以及在一個使用者登入後開啟合适的桌面環境。 一個桌面環境包含一個啟動和維護圖形會話元件的會話管理器、一個控制和擺放視窗、标題欄以及一系列控件的視窗管理器。不過它們都是一同呈現的。通常這些程式、會話管理器和視窗管理器會被作為一個整體同時使用以提供一個無縫的桌面環境。如果顯示管理器沒有在預設運作級别啟動,你可以通過另一種方法啟動X,在通過字元界面登入後,從指令行運作 startx 指令。

繼續閱讀