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...