嵌入式Bootloader小述

2021-05-24 23:43:02 字數 1852 閱讀 1448

bootloader的概念:

bootloader就是在作業系統核心執行之前執行的一段程式,類似於pc機中的bios程式。

bootloader的功能就是完成硬體裝置的初始化、建立記憶體空間的對映圖的功能,將系統的軟硬體環境帶到乙個合適的狀態,為最終呼叫系統核心做好準備。

嵌入式中的bootloader一般都非常依賴於硬體,建立乙個通用的bootloader幾乎是不可能的。bootloader是引導與載入核心映象的工具,需要具備以下幾個功能:

1、初始化ram(必須)

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

2、初始化串列埠(可選,推薦)

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

3、啟動核心映象(必需)

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

(1)cpu暫存器的設定。

r0=0;

r1=機器型別;

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

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

(2)cpu模式。

關閉中斷,屬於svc模式。

bootloader中沒有必要支援中斷的實現,這屬於核心機制以及裝置驅動管理的管理範疇;

svc模式是系統的一種保護模式,這樣就可以進行一些只能在svc模式下的操作,例如一些特定暫存器訪問操作。

(3)cache和mmu的設定。

mmu必須關閉。

資料cache必須關閉。

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

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

bootloader啟動流程分析:

bootloader的啟動流程一般分為兩個階段:stage1和stage2,下面分別對這兩個階段進行講解。

1、bootloader的stage1

在stage1中bootloader主要完成以下工作。

(1)完成基本的硬體初始化。初始化工作主要包括遮蔽所有中斷、設定cpu的速度和時鐘頻率、ram初始化、初始化led、關閉cpu內部指令和資料cache等。

(2)為載入stage2準備ram空間。為了獲得更快的執行速度,通常把stage2載入到ram空間中來執行,因此必須載入bootloader的stage2準備一段可用的ram空間範圍。

(3)複製stage2到ram中。確定stage2的可執行映像在固態儲存裝置的存放起始位址和終止位址以及ram空間的起始位址。

(4)設定堆疊指標sp。這是為執行stage2的c語言**作好準備。

2、bootloader的stage2

在stage2中bootloader主要完成以下工作。

(1)用組合語言跳轉到main入口函式。

為了實現更複雜的功能和取得更好的**可讀性和可移植性,stage2的**通常用c語言來實現。在編譯和鏈結bootloader時,不能使用glibc庫中的任何支援函式。

(2)初始化串列埠、初始化計時器等硬體裝置。在初始化這些裝置之前、可以輸出一些列印資訊。

(3)檢測系統的記憶體對映,所謂記憶體對映就是指在整個4gb實體地址空間中有指出哪些位址範圍被分配用來定址系統的ram單元。

(4)載入核心映像和根檔案系統映像,這裡包括規劃記憶體占用的布局和從flash上覆制資料。

(5)設定核心的啟動引數。

嵌入式 BootLoader 技術內幕

在專用的嵌入式板子執行 gnu linux 系統已經變得越來越流行。乙個嵌入 式 linux 系統從軟體的角度看通常可以分為四個層次 引導引導程式。包括固化在韌體 firmware 中的 boot 可選 和 boot loader 兩大部分。linux 核心。特定於嵌入式板子的定製核心以及核心的啟動...

嵌入式 Bootloader的作用

關於bootloader的作用,老師教我們把它當作pc的bios來理解,但其實不完全是這麼回事。文章參考 bootloader是系統加電後執行的第一段 一般它只在系統啟動時非常短的時間內執行。在pc中,整個bootloader由bios 主機板上固化的一段程式 位於硬碟mbr區的os loader一...

嵌入式系統 Boot Loader 技術內幕

used i continue 當前頁已經是乙個被對映到 ram 的有效位址範圍 但是還要看看當前頁是否只是 4gb 位址空間中某個位址頁的別名?if u32 addr 0 當前頁已經是乙個被對映到 ram 的有效位址範圍 而且它也不是 4gb 位址空間中某個位址頁的別名。if memory map...