? 通用計算機啟動過程
1??一個基礎固件:BIOS
一個基礎固件:BIOS→基本IO系統,它提供以下功能:
- 上電后自檢功能 Power-On Self-Test,即POST:上電后,識別硬件配置并對其進行自檢,保證正常運行和初始化;
- 基本IO驅動與事件處理功能:初始化并驅動硬件,如顯示器、串口、鍵盤等接口,使能基本的中斷;
- 啟動參數設置功能:過程中允許通過熱鍵啟動設置界面,進而對CMOS RAM中的啟動參數進行配置。CMOS RAM等效于BBSRAM,存放啟動配置數據,電池掉電后數據丟失;
- 系統自動裝載功能:在系統自檢成功后,根據啟動順序,將相應啟動設備主引導記錄MBR(一般位于0磁道的0扇區,大小為512字節)的引導程序裝入內存并從入口地址運行;
2??WIndows操作系統啟動過程
① 系統上電或復位,X86處理器復位——代碼段寄存器CS為0xFFFF,指令指針寄存器IP為)0x0000,CS:IP地址存放下一條跳轉指令,跳轉至ROM中BIOS入口地址0xFFFFFFF0(復位向量地址),并啟動BIOS。
② BIOS上電自檢,若出現錯誤則初始化基本硬件,允許用戶進行參數配置。
③ BIOS將第1個啟動設備的第1個扇區加載到系統RAM的0x7C000地址,啟動MBR中的引導程序,進入引導的第一個階段。
④ 調用 Windows MBR Loader 或 LILO GRUB WinGrub等引導程序,進入引導的第二個階段。
⑤ 引導程序調用 OS Boot Loader 把用戶選擇的操作系統內核加載到內存,并跳轉到操作系統入口地址開始執行。
此時,計算機的控制權交給了操作系統,基本啟動過程完成。
? 嵌入式系統啟動過程
MCS-51 MCU 上電復位后,PC寄存器的初值為0x0000。0000H,0001H,0002H這三個單元存放了一條無條件跳轉指令,當從該地址執行時將直接跳轉到主程序的入口地址。
arm處理器復位后將從0x00000000地址處開始執行指令。
1??處理器片內集成啟動固件——嵌入式系統啟動
① 上電程序引導
片內集成獨立 Boot ROM (Brom),代碼 Rom Boot Loader (RBL) 支持從 NAND Flash、SPI、UART 等外部接口啟動。
- 加電后,處理器將從該ROM的復位向量地址開始執行,RBL通過判斷處理器特定引腳的電平來進入正常啟動模式或開發模式;
- RBL獲取下一步要執行的代碼,并將其復制到SRAM或SDRAM中引導執行;
② 嵌入式操作系統裝載
嵌入式操作系統的引導也需要特定的機制和軟件支持,即 Boot Loader。
- 復位后,將 Boot Loader 代碼從Flash 拷貝到SDRAM的特定區間并引導執行;
- Boot Loader 程序執行一系列基本的硬件初始化工作;
- 將自身拷貝到SDRAM中,RAM中的 Boot Loader 繼續執行,為操作系統的運行做好環境準備,并將外部存儲器中的操作系統內核映像及根文件系統映像拷貝到內存中的代碼,數據空間,設置內核啟動參數;
- 跳轉至內核入口地址開始執行。
2??裸機
直接部署在嵌入式硬件上的軟件稱為裸機代碼,或裸機(應用)軟件。一般來說都是些無限循環結構,比如空調、冰箱等嵌入式系統。通過板級支持包BSP,向下屏蔽硬件的細節,向上提供統一的服務和接口。沒有操作系統,通過中斷來實現多任務運行。
? Linux系統啟動過程
計算機接通電源上電后,需要經過BIOS加電自檢、MBR系統引導、加載內核三步之后,操作系統才會啟動。
1??BIOS加電自檢
- BIOS全稱 Basic Input/Output System,即基本輸入輸出系統,它是一個被永久刻錄在ROM中的軟件,加電自檢是指 Power On Self Test,POST,屬于BIOS的主要組成部分。
- 計算機在接通電源后,BIOS通過POST來加載硬件信息,進行內存、CPU、主板等檢測,如果硬件設備正常工作,BIOS會尋找硬盤第一個扇區中存儲的數據,并使用MBR中的數據激活引導加載程序。
2??MBR系統引導
- MBR全程 Master Boot Recode,是一種磁盤分區格式,也是以此種格式的磁盤中0盤片0扇區中存儲的一段記錄——主引導記錄。磁盤中扇區的大小為512byte,主引導記錄MBR占據第一個扇區的前446字節,剩余的空間依次存儲一個64字節的磁盤分區表,和一個用于標識MBR是否有效的2字節的模數。
- 主引導記錄MBR中包含一個實現引導加載功能的程序——Boot Loader。由于BIOS只能訪問很少量的數據,所以MBR中的引導加載程序其實只是一段初始程序的加載程序 Initial Program Loader,IPL,這段程序唯一的功能就是定位并加載 Boot Loader 的主體程序。
- 加載引導分為兩個階段
- 第一階段,BIOS引導IPL獲取 Boot Loader 主題程序在磁盤中的位置,此時系統啟動的控制權由BIOS轉移到MBR;
- 第二階段,Boot Loader 主題程序與操作系統對應的內核,定位到內核文件所在的位置,并將其加載到計算機內存中,此時系統啟動的控制權由MBR轉移到內核。
3??加載內核
- 內核是操作系統的核心,Linux操作系統的內核就是Linux。內核以一種自解壓的壓縮格式壓縮,它與一個初始化的內存映像和存儲設備映像表一起存儲在 /boot 目錄下。
- 在選定的內核被加載到內存中并開始執行前需要先從壓縮格式中解壓,一旦內核自解壓完成,systemd進程(也就是早期版本中的init進程)便被啟動。
- systemd進程的啟動標識著引導過程的結束,也標識著啟動過程的開始。在系統啟動之初,由于系統中沒有除systemd之外的程序執行,系統初始化工作尚未完成,因此計算機不能執行任何和用戶相關的功能性工作。
- 系統初始化需要進行掛載文件系統、啟動后臺服務等等一系列工作,這些初始化工作全部由systemd進程完成。對于用戶來說,系統初始化完成后,系統才算正式啟動。
4??附:init進程啟動級別
系統啟動流程:
BIOS → MBR → boot loader → kernel → init
BIOS → MBR → GRUB → kernel → init
- BIOS:找到啟動介質 - 移動硬盤、磁盤、U盤等,找到啟動介質后讀取其中的第一個扇區;
- MBR:第一個扇區(512字節)稱為主引導記錄。主引導記錄分為3部分,前446byte是引導信息,后64byte是磁盤分區信息,最后2byte是標志位。MBR的作用是找到 boot loader 。
- GRUP:是一種 boot loader ,用于加載kernel核心信息。
- kernel:內核。
- init:內核的第一個程序,分為7個啟動級別。
查看啟動級別配置文件
cat /etc/inittab #查看啟動級別相關的配置文件
inti命令可以切換系統的啟動級別
inti 0/1/2/3/4/5/6
- 0表示關機(不能設置為開機默認啟動級別)
- 1表示單用戶
- 2表示多用戶(無網絡的3級別)
- 3多用戶(命令行模式,字符終端)
- 4用于開發
- 5圖形界面,默認啟動方式
- 6reboot(不能設置為開機默認啟動級別)
runlevel #查看系統的啟動級別