Bootloader和BIOS、uboot和grub和bootmgr的区别
1 Bootloader和BIOS
1.1 BIOS
??BIOS(Basic Input Output System):基本輸入輸出系統。它是一組固化到計算機內主板上一個ROM芯片上的程序 ,保存著計算機最重要的基本輸入輸出的程序、開機后自檢程序和系統自啟動程序,它可從CMOS中讀寫系統設置的具體信息。?
??BIOS是連接軟件與硬件的一座“橋梁”,是計算機的開啟時運行的第一個程序,主要功能是為計算機提供最底層的、最直接的硬件設置和控制。BIOS的三個主要功能:
- 自檢及初始化程序,分為三個部分
加電自檢(POST):功能是檢查計算機硬件是否良好,自檢中如發現有錯誤,將按兩種情況處理:對于嚴重故障(致命性故障)則停機,此時由于各種初始化操作還沒完成,不能給出任何提示或信號;對于非嚴重故障則給出提示或聲音報警信號,等待用戶處理。
初始化:創建中斷向量、設置寄存器、對一些外部設備進行初始化和檢測等,其中很重要的一部分是BIOS設置,主要是對硬件設置的一些參數,當計算機啟動時會讀取這些參數,并和實際硬件設置進行比較,如果不符合,會影響系統的啟動。
加載引導程序:功能是引導Dos或其他操作系統,此時會在硬盤讀取引導記錄,然后把計算機的控制權轉交給引導記錄,由引導記錄(IPL與SPL)把操作系統裝入電腦,在電腦啟動成功后,BIOS的這部分任務就完成了。也就是說BIOS本身不能引導OS內核。
- 程序服務處理;BIOS直接與計算機的I/O設備(Input/Output,即輸入/輸出設備)打交道,通過特定的數據端口發出命令,傳送或者接受各種外部設備的數據,實現軟件程序對硬件的直接操作。
- 硬件中斷處理;開機時BIOS會告訴CPU各硬件設備的中斷號,當用戶發出使用某個設備的指令后,CPU就根據中斷號使用相對應的硬件完成工作,再根據中斷號跳回原來的工作。
? ? ?BIOS分為:Legacy BIOS 和 UEFI BIOS
1.2 Bootloader
通俗說Bootloader就是用來加載操作系統的。在PC上是在BIOS之后運行。
在典型的嵌入式系統中,引導加載程序(bootloader)具有如下特點:
- 嵌入式系統中在操作系統內核運行前運行的程序;
- 可以分為單階段的BootLoader和多階段的BootLoader,一般從從固態存儲設備上啟動的Bootloader大多都是 2 階段的啟動過程,如uboot是2階段的,grub就是單階段的;
一般而言,這兩個階段完成的功能可以如下分類,但這不是絕對的:
Bootloader第一階段的功能:?
- 硬件設備初始化。
- 為加載Bootloader的第二階段代碼準備RAM空間。
- 拷貝Bootloader的第二階段代碼到 RAM 空間中。
- 設置好棧。
- 跳轉到第二階段代碼的C入口點。
- 在第一階段進行的硬件初始化一般包括:關閉WATCHDOG、關中斷、設置CPU的速度和時鐘頻率、RAM初始化等。這些并不都是必需的,比如S3C2410/S3C2440的開發板所使用的U-Boot中,就將CPU的速度和時鐘頻率的設置放在第二階段。甚至,將第二階段的代碼復制到RAM空間中也不是必需的,對于NORFlash等存儲設備,完全可以在上面直接執行代碼,只不過這相比在RAM中執行效率大為降低。
Bootloader第二階段的功能:?
- 初始化本階段要使用到的硬件設備
- 檢測系統內存映射(memory map)。
- 將內核映像和根文件系統映像從Flash上讀到RAM空間中。
- 為內核設置啟動參數。
- 調用內核。
1.3 關系
????????BIOS和Bootloader沒啥大區別:就是兩個底層程序片段。 為啥不耦合在一起?看場景吧,在PC系統上BIOS和Bootloader分開了,感覺還是PC端外設導致的,開機后需要先做做設備的檢測。然后PC端系統版本多,適配也麻煩,就分兩個功能出去了。 在嵌入式系統里,基本集成到一段,叫Bootloader了:檢測硬件然后啟動系統的一個小小的系統代碼段就是Bootloader。在安卓系統一般也只說Bootloader了。
2 不同平臺的引導加載程序
Linux的開放源碼引導程序及其支持的體系結構見下表:
| BootLoader | 描述 | x86 | ARM | PowerPC |
| LILO | Linux磁盤引導程序 | 是 | 否 | 否 |
| GRUB | GNU的LILO替代程序 | 是 | 否 | 否 |
| Loadlin | 從DOS引導Linux | 是 | 否 | 否 |
| ROLO | 從ROM引導Linux而不需要BIOS | 是 | 否 | 否 |
| Etherboot | 通過以太網卡啟動Linux系統的固件 | 是 | 否 | 否 |
| LinuxBIOS | 完全替代BUIS的Linux引導程序 | 是 | 否 | 否 |
| BLOB | LART等硬件平臺的引導程序 | 否 | 是 | 否 |
| U-boot | 通用引導程序 | 是 | 是 | 是 |
| RedBoot | 基于eCos的引導程序 | 是 | 是 | 是 |
windows引導程序及其支持的體系結構見下表:
| BootLoader | 描述 | x86 | ARM | PowerPC |
| NTLOADER | Linux磁盤引導程序 | 是 | NA | NA |
| Bootmgr | 啟動管理器 | 是 | NA | NA |
2.1 PC平臺的Grub與 bootmgr
??GNU GRUB(GRand Unified Bootloader簡稱“GRUB”)是一個來自GNU項目的多操作系統啟動程序。GRUB是多啟動規范的實現,它允許用戶可以在計算機內同時擁有多個操作系統,并在計算機啟動時選擇希望運行的操作系統。GRUB可用于選擇操作系統分區上的不同內核,也可用于向這些內核傳遞啟動參數。可用來用來引導不同系統,如windows,linux,通常用于linux,畢竟是GNU的嘛。?
??Windows也有類似的工具NTLOADER、Bootmgr;比如我們在機器中安裝了Windows 98后,我們再安裝一個Windows XP ,在機器啟動的會有一個菜單讓我們選擇進入是進入Windows 98 還是進入Windows XP。NTLOADER就是一個多系統啟動引導管理器,NTLOADER 同樣也能引導Linux,只是極為麻煩罷了。Bootmgr是Boot Manager的縮寫,是在Windows Vista、Windows 7、windows 8/8.1和windows 10中使用的新的啟動管理器,以代替Windows NT系列操作系統(Windows XP、Windows 2003)中的啟動管理器——NTLOADER。
2.2 嵌入式平臺的u-boot
??U-Boot,全稱為Universal Boot Loader,即通用Bootloader,是遵循GPL條款的開放源代碼項目。其前身是由德國DENX軟件工程中心的Wolfgang Denk基于8xxROM的源碼創建的PPCBOOT工程。后來整理代碼結構使得非常容易增加其他類型的開發板、其他架構的CPU(原來只支持 PowerPC);增加更多的功能,比如啟動Linux、下載S-Record格式的文件、通過網絡啟動、通過PCMCIA/CompactFLash /ATA disk/SCSI等方式啟動。增加ARM架構CPU及其他更多CPU的支持后,改名為U-Boot。
- 支持多種嵌入式操作系統內核,如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS;
- 支持多個處理器系列,如PowerPC、ARM、x86、MIPS、XScale;
---------------------?
作者:藍月心語?
來源:CSDN?
原文:https://blog.csdn.net/liao20081228/article/details/81297143?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的Bootloader和BIOS、uboot和grub和bootmgr的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《PlaneNet-单幅RGB图像的分段
- 下一篇: Ae:同时运行中文版和英文版