先了解下什么是Bootloader
以下是百度百科釋意
在嵌入式操作系統中,BootLoader是在操作系統內核運行之前運行。可以初始化硬件設備、建立內存空間映射圖,從而將系統的軟硬件環境帶到一個合適狀態,以便為最終調用操作系統內核准備好正確的環境。在嵌入式系統中,通常並沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會內嵌一段短小的啟動程序),因此整個系統的加載啟動任務就完全由BootLoader來完成。在一個基於ARM7TDMI core的嵌入式系統中,系統在上電或復位時通常都從地址0x00000000處開始執行,而在這個地址處安排的通常就是系統的BootLoader程序
Bootloader不屬於操作系統,一般采用匯編語言和C語言開發。需要針對特定的硬件平台編寫。在移植過程時,首先為開發板移植Bootloader。Bootloader不但依賴於CPU的體系架構,而且依賴於嵌入式系統板級設備的配置。
3.Bootloader的操作模式
自啟動模式:在這種模式下,Bootloader從目標機上的某個固態存儲設備上將操作系統加載到RAM中運行,整個過程並沒有用戶的介入。
交互模式:在這種模式下,目標機上的Bootloader將通過串口或網絡等通信手段從開發板上下載內核映射和根文件系統映像等待RAM中。可以被Bootloader寫到目標機上的固態存儲媒介質中,或者直接進入系統的引導。也可以通過串口接收用戶的指令。
二、Bootloader的基本功能
初始化相關硬件 把Bootloader自搬移到內存中 執行用戶指令 加載並執行內核
一個嵌入式系統從軟件的角度看通常可以分為三個層次:
1、 引導加載程序。包括固化在固件(firmware)中的Booter代碼(可選),和Loader兩大部分。
2、 操作系統。特定於嵌入式板子的定制內核以及內核的啟動參數;以及在內核和應用程序之間可能還會包括一個嵌入式圖形用戶界面,常用的嵌入式GUI有:MicroWindows和MiniGUI等。
3、 用戶應用程序。特定於用戶的應用程序。
引導加載程序是系統加電后運行的第一段軟件代碼,稱之為Bootloader。BootLoader是Booter和Loader的合寫:前者意味着要初始化嵌入式系統硬件使之運行起來,至少是部分運行起來,與PC機中的BIOS作用相似;后者意味着將嵌入式操作系統映像加載到內存中,並跳轉過去運行。如PC機中MBR上的BootLoader(PC機中的引導加載程序由BIOS(其本質就是一段固件程序)和位於硬盤MBR中的OS BootLoader(比如,LILO和GRUB等)一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤MBR中的BootLoader讀到系統的RAM中,然后將控制權交給OS BootLoader。BootLoader的主要運行任務就是將內核映象從硬盤上讀到 RAM 中,然后跳轉到內核的入口點去運行,也即開始啟動操作系統。)
而在嵌入式系統中,通常並沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會內嵌一段短小的啟動程序),因此整個系統的加載啟動任務就完全由BootLoader來完成。比如在一個基於ARM7TDMI core的嵌入式系統中,系統在上電或復位時通常都從地址0x00000000處開始執行,而在這個地址處安排的通常就是系統的BootLoader程序。
簡單地說,BootLoader就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核准備好正確的環境。
通常,BootLoader是嚴重地依賴於硬件而實現的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的BootLoader幾乎是不可能的。盡管如此,我們仍然可以對BootLoader歸納出一些通用的概念來,以指導用戶特定的BootLoader設計與實現。
Bootloader並不是嵌入式系統必不可少的組成部分,但是在系統中有Bootloader可以給嵌入式產品的開發調試帶來很多便利。
什么是grub
GRUB 是引導裝入器 -- 它負責裝入內核並引導 Linux 系統。GRUB 還可以引導其它操作系統,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT 和 2000。盡管引導操作系統看上去是件平凡且瑣碎的任務,但它實際上很重要。如果引導裝入器不能很好地完成工作或者不具有彈性,那么就可能鎖住系統,而無法引導計算機。另外,好的引導裝入器可以給您靈活性,讓您可以在計算機上安裝多個操作系統,而不必處理不必要的麻煩。
GRUB 是一個很棒的引導裝入器。它有許多功能,可以使引導過程變得非常可靠。例如,它可以直接從 FAT、minix、FFS、ext2 或 ReiserFS 分區讀取 Linux 內核。這就意味着無論怎樣它總能找到內核。另外,GRUB 有一個特殊的交互式控制台方式,可以讓您手工裝入內核並選擇引導分區。這個功能是無價的:即使 GRUB 菜單配置不正確,你仍可以引導系統。哦,對了 -- GRUB 還有一個彩色引導菜單。我們只是剛開始。
Grub 的工作有兩個:首先,它用一個菜單展示計算機上所有已經安裝的操作系統供你選擇;其次,當你從啟動菜單中選擇了一個 Linux 操作系統后, Grub 便加載對應版本Linux 的內核,眾所周知,使用 Linux 就離不開 bootloader ,然而它卻是 Linux 發行版內部很少有人充分了解的部分。
主配置文件grub.cfg不能直接被用戶修改,而是由系統自動生成
每當安裝內核、更新Grub 2或用戶主動運行grub-mkconfig -o /boot/grub/grub.cfg(曾經是update-grub)后,Grub 2會根據用戶配置文件重新生成grub.cfg。
可編輯的Grub 2配置文件主要包括/etc/default/grub、和/etc/grub.d/下的各文件。
grub2的重要文件
/etc/default/grub
這是一個文本文件,你可以在里面設置通用配置變量和 Grub 2 菜單(見下方 “常見用戶設置” )的其它特性。
/etc/grub.d
文件夾,定義每個菜單項的所有腳本都放置在這里,這些腳本的名稱必須有兩位的數字前綴,其目的是:在構建 Grub 2 菜單時定義腳本的執行順序以及相應菜單項的順序。舉個栗子:文件 00_header 首先被讀取,負責解析/etc/default/grub配置文件,然后是 Linux 內核的菜單項,位於 10_linux 文件中,這個腳本在默認的
/boot分區為每個內核創建一個正規菜單項和一個恢復菜單項。緊接着的是被第三方應用所調用的腳本,如 30_os-prober 和 40_custom , os-prober 腳本為內核和其它分區里的操作系統創建菜單項,它能識別安裝的Linux、 Windows、 BSD以及Mac OS X當然如果你的硬盤布局比較獨特,使得 os-prober 無法找到已經安裝的發行版,你可以在 40_custom 文件(見下方 “添加自定義菜單項”)中添加菜單項。
Grub 2 不需要你手動維護你的啟動選項的配置文件:取而代之的是使用 grub2-mkconfig 命令產生
/boot/grub/grub.cfg文件。這個功能會解析/etc/grub.d目錄中的腳本以及/etc/default/grub