BootLoader的基本概念

2021-05-06 08:41:41 字數 2857 閱讀 8167

板級支援包(bsp)

bsp是板級支援包(board support package)的縮寫,是通常用在嵌入行業中的乙個術語,用來代表在乙個特殊硬體平台上快速構建乙個嵌入作業系統所需的原始資料或者二進位制軟體包。 bsp的作用是支援作業系統,使之能夠更好的執行於硬體平台。bsp是相對於作業系統而言的,不同的作業系統對應於不同定義形式的bsp,包括 windows ce、linux、vxworks等。soc/cpu廠商應向其晶元的使用者提供乙個基本的bsp包,以支援主機板廠商或整機製造廠商在此基礎上定製和開發各 種商用終端產品。

在嵌入式系統學習過程中設計到了bootloader,下面講述了bootloader的基本作用,在後續的文章中我將對如何編寫自己的bootloader進行介紹。

1. bootloader的基本概念:

bootloader是依 賴於硬體而實現的,特別是在嵌入式系統中。不同的體系結構需求的bootloader是不同的;除了體系結構,bootloader還依賴於具體的嵌入式 板級裝置的配置。也就是說,對於兩塊不同的嵌入式板而言,即使它們基於相同的cpu構建,執行在其中一塊電路板上的bootloader,未必能夠執行在 另一塊電路開發板上。

bootloader最為 系統復位或上電後首先執行的**,一般應寫在起始實體地址0x0開始。bootloader的啟動過程可以是單階段的,也可以是多階段的。通常多階段的 bootloader能提供更為複雜的功能,以及更好的可移植性。從固態儲存裝置上啟動的bootloader大多數是二階段的啟動過程,也即啟動過程可 以分為stage 1和stage 2兩部分。

2. arm bootloader的一般作用

對於乙個arm系統來說,本質上,bootloader作為引導與載入核心映象的「工具」,在實現上,必須提供以下幾個功能,更確切地說,必須做到以下幾點:

(1) 初始化ram(必需):bootloader必須能夠初始化ram,因為將來系統要通過它儲存一些volatile資料,但具體地實現要依賴與具體的cpu以及硬體系統。

(2) 初始化串列埠(可選,推薦):bootloader應該要初始化以及使能至少乙個串列埠,通過它與控制台聯絡進行一些debug的工作;甚至與pc通訊。

(3  n啟動核心映象(必需):根據核心映象儲存的儲存介質不同,可以有兩種啟動方式:falsh啟動以及ram啟動;但是無論是哪種啟動方式,下面的系統狀態必須得到滿足:

l     cpu暫存器的設定:     r0=0;

r1=機器型別;

r2=啟動引數標記列表在ram中的起始位址;

這三個暫存器的設定是在最後啟動核心時通過啟動引數來傳遞完成的。

l     cpu模式:     關閉中斷;

屬於svc模式;

bootloader中沒有必要支援中斷的實現,這屬於核心機制以及裝置驅動管理的管理範疇;svc模式是系統的一種保護模式,這樣就可以進行一些只能在svc模式下的操作,例如一些特定暫存器訪問操作。

l    cache和mmu的設定:       mmu必須關閉;

資料cache必須關閉;

指令cache可以關閉也可以開啟;

bootloader中所 有對位址的操作都是使用實體地址,是實在的實位址,不存在虛擬位址,因此mmu必須關閉。bootloader主要是裝載核心映象,映象資料必須真實寫回 sdram中,所以資料cache必須關閉;而對於指令cache,不存在強制性的規定,但是一般情況下,推薦關閉指令cache。

bootloader啟動核心映象的方法是通過跳轉語句直接跳轉至核心映象的第一句指令語句。

bootloader存在的必要性

bootloader的功能決定了在引導linux系統時,必須使用bootloader,除非你對linux核心進行了修改。

bootloader有兩個主要功能:

1.在發布模式,自動引導linux系統,為系統初始化各種引數。

linux系統一定要bootloader支援嗎?

答:是的。通用的linux核心,啟動時需要很多引數,這些引數必須通過bootloader傳遞。而且核心一般是壓縮存放到外存上的,從外存到記憶體的拷貝也是由bootloader完成。

bootloader為什麼不和kernel放到一起呢?

答:不可以這樣做。從bootloader的第二個功能就知道,bootloader是不能和核心放到一起。當然,在發布模式時,是可以整合到一起的,通常沒必要。

從**可以得到bootloader?

答:目前通用的bootloader很多,不論是嵌入式還是桌面系統,比如lilo,grub,blob等。桌面用的bootloader我們 就不討論了,重點說一下嵌入式領域用的bootloader。採用通用的bootloader功能強大,開發容易,而且由專人維護公升級,不過多是針對特定 的cpu或者特定開發板的。如果是學習,推薦自己開發bootloader。

如何編寫自己的bootloader?

答:編寫乙個bootloader只要能夠完成前面提到的兩個功能就可以了。分別描述一下這兩個功能的實現:

1.該功能比較簡單,就是從flash中拷貝資料到ram。如果核心的存放不是基於檔案系統的,直接採用彙編就可以完成塊拷貝。然而如果核心存 放在檔案系統之上,比如核心存放到了基於ext2檔案系統的cf卡上。首先我們的bootloader要能夠訪問cf卡,然後要能夠識別檔案系統,只有這 樣才能正確找到核心檔案並拷貝到記憶體中。

2.該功能一般通過串列埠實現。對於arm來說,驅動串列埠比較容易,直接從主機的串列埠接收核心資料存放到ram中,就可以啟動核心了。如果需要發布,還要實現把核心從ram燒寫到外存的能力。

基本概念 C 基本概念

由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...

基本概念 數控系統基本概念

第一章 基本概念 數控工具機cnc是一種按事先編制好的加工零件程式進行加工的高效 自動化加工裝置。是 computer numerical control machine tools 的簡稱。數控工具機較好地解決了複雜 精密 小批量 多品種的零件加工問題,是一種柔性的 高效能的自動化工具機。西門子系...

pwm的基本概念

脈寬調變pwm是開關型穩壓電源中的術語。這是按穩壓的控制方式分類的,除了pwm型,還有pfm型和pwm pfm混合型。脈寬寬度調製式 pwm 開關型穩壓電路是在控制電路輸出頻率不變的情況下,通過電壓反饋調整其占空比,從而達到穩定輸出電壓的目的。pwm技術的基本原理 隨著電子技術的發展,出現了多種pw...