Linux啟動過程 從引導說起

2021-09-02 16:28:49 字數 2862 閱讀 6649

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

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

開啟電源–>bios–>mbr(主引導記錄,硬碟的第乙個扇區–>引導程式(例如grub)–>核心(linux 系統))–>initramfs映像–>/sbin/init(父程序)–>終端提示符–>x windows system(圖形使用者介面)

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

一旦加電自檢完成,系統控制權就由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)並將控制權移交給它。核心基本上都是被壓縮的,所以它首先得解壓自己。在這之後,它將檢查並分析系統硬體並初始化硬體裝置驅動到核心中

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

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輸出乙個字元提示符,預示它已經準備好接受命令。在使用者輸入命令並按下回車鍵之後,命令就會被執行。在命令執行完之後將會顯示另乙個提示符。 在你學完後面的『命令列操作』之後,終端將可以使用alt鍵作為乙個額外的功能鍵。大多數發行版啟動六個終端和用f1和f2啟動的圖形終端。如果圖形終端已經啟動了,切換到字元需要按下crtl-alt+功能鍵(f1到f7).如果你處在純字元模式,你可能需要使用startx命令來啟動或重啟你的圖形桌面。

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

如有錯誤,歡迎指正

Linux0 11核心引導啟動過程概述

linux0.11僅支援x86架構。它的核心引導啟動程式在資料夾boot內,共有三個彙編 檔案。按照啟動流程依次是 1 bootsect.s。boot是啟動引導的意思,sect即sector,是扇區的意思,二者合在一起啟動引導扇區。這是 磁碟引導程式。2 setup.s 3 head.s 前兩個匯程...

Linux0 11核心引導啟動過程概述

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!linux0.11僅支援x86架構。它的核心引導啟動程式在資料夾boot內,共有三個彙編 檔案。按照啟動流程依次是 1 bootsect.s。boot是啟動引導的意思,sect即sector,是扇區的意思,二者合在一起啟動引導扇區。這是 磁碟引導程...

系統開機引導和啟動過程

1.簡介 linux開機啟動的過程可以大致分為兩個部分 1.引導過程2.啟動過程 引導過程開始於上電開始結束於核心初始化完成以及systemd程序啟動完成 啟動過程則是接管剩餘的工作,直至作業系統啟動完成進入可操作狀態。2.引導過程 引導過程可以分為 bios上電自檢 引導初始化程式 核心初始化 啟...