先了解下什麼是Bootloaderlinux
如下是百度百科釋意小程序
在嵌入式操做系統中,BootLoader是在操做系統內核運行以前運行。能夠初始化硬件設備、創建內存空間映射圖,從而將系統的軟硬件環境帶到一個合適狀態,以便爲最終調用操做系統內核準備好正確的環境。在嵌入式系統中,一般並無像BIOS那樣的固件程序(注,有的嵌入式CPU也會內嵌一段短小的啓動程序),所以整個系統的加載啓動任務就徹底由BootLoader來完成。在一個基於ARM7TDMI core的嵌入式系統中,系統在上電或復位時一般都從地址0x00000000處開始執行,而在這個地址處安排的一般就是系統的BootLoader程序
網絡
Bootloader不屬於操做系統,通常採用彙編語言和C語言開發。須要針對特定的硬件平臺編寫。在移植過程時,首先爲開發板移植Bootloader。Bootloader不但依賴於CPU的體系架構,並且依賴於嵌入式系統板級設備的配置。架構
3.Bootloader的操做模式佈局
自啓動模式:在這種模式下,Bootloader從目標機上的某個固態存儲設備上將操做系統加載到RAM中運行,整個過程並無用戶的介入。spa
交互模式:在這種模式下,目標機上的Bootloader將經過串口或網絡等通訊手段從開發板上下載內核映射和根文件系統映像等待RAM中。能夠被Bootloader寫到目標機上的固態存儲媒介質中,或者直接進入系統的引導。也能夠經過串口接收用戶的指令。操作系統
2、Bootloader的基本功能設計
初始化相關硬件 把Bootloader自搬移到內存中 執行用戶指令 加載並執行內核3d
一個嵌入式系統從軟件的角度看一般能夠分爲三個層次:調試
一、 引導加載程序。包括固化在固件(firmware)中的Booter代碼(可選),和Loader兩大部分。
二、 操做系統。特定於嵌入式板子的定製內核以及內核的啓動參數;以及在內核和應用程序之間可能還會包括一個嵌入式圖形用戶界面,經常使用的嵌入式GUI有:MicroWindows和MiniGUI等。
三、 用戶應用程序。特定於用戶的應用程序。
引導加載程序是系統加電後運行的第一段軟件代碼,稱之爲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 9五、9八、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