/ 引言 /
Bootloader是嵌入式系統在加電后執行的第一段代碼,在它完成CPU和相關硬件的初始化之后,再將操作系統映像或固化的嵌入式應用程序裝在到內存中然后跳轉到操作系統所在的空間,啟動操作系統運行。
對于嵌入式系統,Bootloader是基于特定硬件平臺來實現的。因此,幾乎不可能為所有的嵌入式系統建立一個通用的Bootloader,不同的處理器架構都有不同的Bootloader。Bootloader不但依賴于CPU的體系結構,而且依賴于嵌入式系統板級設備的配置。對于2塊不同的嵌入式板而言,即使它們使用同一種處理器,要想讓運行在一塊板子上的Bootloader程序也能運行在另一塊板子上,一般也都需要修改Bootloader的源程序。
反過來,大部分Bootloader仍然具有很多共性,某些Bootloader也能夠支持多種體系結構的嵌入式系統。例如,U-Boot就同時支持PowerPC、ARM、MIPS和X86等體系結構,支持的板子有上百種。通常,它們都能夠自動從存儲介質上啟動,都能夠引導操作系統啟動,并且大部分都可以支持串口和以太網接口。
/ 簡介 /
通常,BootLoader是嚴重地依賴于硬件而實現的,特別是在嵌入式平臺。因此,在嵌入式平臺里建立一個通用的BootLoader幾乎是不可能的。盡管如此,我們仍然可以對bootloader歸納出一些通用的概念來,以指導用戶特定的BootLoader設計與實現。
在專用的嵌入式板子運行GNU/Linux系統已經變得越來越流行。一個嵌入式Linux系統從軟件的角度看通常可以分為四個層次:
1、 引導加載程序 。包括固化在固件(firmware)中的boot代碼(可選),和BootLoader兩大部分。
2、Linux內核 。特定于嵌入式板子的定制內核以及內核的啟動參數。
3、 文件系統 。包括根文件系統和建立于Flash內存設備之上文件系統。通常用ramdisk來作為rootfs。
4、 用戶應用程序 。特定于用戶的應用程序。有時在用戶應用程序和內核層之間可能還會包括一個嵌入式圖形用戶界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等。
/ 操作模式 /
大多數Bootloader都包含兩種不同的操作模式:
(1)啟動加載模式
在這種模式下,Bootloader從目標機的某個固態存儲設備上將操作系統加載到RAM中運行,整個過程并沒有用戶的介入。這種模式是Bootloader的正常工作模式,因此在嵌入式產品發布時,Bootloader必須工作在這種模式下。
(2)下載模式
在這種模式下,目標機上的Bootloader將通過串口或網絡等通信手段從開發主機(Host)上下載內核映像和根文件系統映像等到RAM中,然后可再被Bootloader寫到目標機上的固態存儲媒質中,或者直接進行系統的引導。
啟動加載模式通常用于第一次燒寫內核與根文件系統到固態存儲媒質時或者以后的系統更新時使用;下載模式多用于開發人員在前期開發的過程中,工作于這種模式下的Bootloader通常都會向它的終端用戶提供一個簡單的命令行接口。
/ 啟動過程 /
Bootloader啟動大多數都分為兩個階段。第一階段主要包含依賴于CPU的體系結構硬件初始化的代碼,通常都用匯編語言來實現。這個階段的任務有:
基本的硬件設備初始化(屏蔽所有的中斷、關閉處理器內部指令/數據Cache等)。
為第二階段準備RAM空間。
如果是從某個固態存儲媒質中,則復制Bootloader的第二階段代碼到RAM 。
設置堆棧。
在第一階段中為什么要關閉Cache?通常使用Cache以及寫緩沖是為了提高系統性能,但由于Cache的使用可能改變訪問主存的數量、類型和時間,因此Bootloader通常是不需要的。
跳轉到第二階段的C程序入口點。
第二階段通常用C語言完成,以便實現更復雜的功能,也使程序有更好的可讀性和可移植性。這個階段的任務有:
初始化本階段要使用到的硬件設備。
檢測系統內存映射。
將內核映像和根文件系統映像從Flash讀到RAM。
為內核設置啟動參數。
調用內核
-
處理器
+關注
關注
68文章
19349瀏覽量
230296 -
嵌入式系統
+關注
關注
41文章
3605瀏覽量
129569 -
bootloader
+關注
關注
2文章
235瀏覽量
45657 -
LINUX內核
+關注
關注
1文章
316瀏覽量
21677 -
以太網接口
+關注
關注
0文章
147瀏覽量
17128
發布評論請先 登錄
相關推薦
評論