小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Bootloader啟動(dòng)代碼

 高翔MyFriend 2018-11-25

注意:很多初學(xué)者總是將啟動(dòng)代碼和Bootloader聯(lián)系在一起,這是錯(cuò)誤的

什么是啟動(dòng)代碼?

      啟動(dòng)代碼是系統(tǒng)上電或者復(fù)位后運(yùn)行的第一段代碼,是進(jìn)入C 語言的main 函數(shù)之前需要執(zhí)行的那段匯編代碼。

啟動(dòng)代碼有何用?

      它的作用是在用戶程序運(yùn)行之前對(duì)系統(tǒng)硬件及軟件環(huán)境進(jìn)行必要的初始化并在最后使程序跳轉(zhuǎn)到用戶程序。它直接面對(duì)ARM 處理器內(nèi)核及硬件控制器進(jìn)行編程,所執(zhí)行的操作與具體的目標(biāo)系統(tǒng)緊密相關(guān)。

      C語言程序的運(yùn)行需要具備一定的條件,如分配好外部數(shù)據(jù)空間,堆棧空間和中斷入口等。另外,匯編代碼可以更直接地對(duì)硬件進(jìn)行操作,效率更高,這對(duì)啟動(dòng)中斷等對(duì)時(shí)間要求更高的情況是非常必要的

什么是Bootloader?

      Bootloader不是一段代碼,它是一個(gè)具有引導(dǎo)裝載功能的完整的程序,如可以引導(dǎo)裝載linux的vivi,uboot,以及通常PC機(jī)上的BOIS程序等。

啟動(dòng)代碼和Bootloader關(guān)系?

      Bootloader也包含了相應(yīng)的啟動(dòng)代碼,也就是說,啟動(dòng)代碼是Bootloader的一部分,是所有相應(yīng)應(yīng)用程序的一部分。


Bootloader講解

       簡單地說,BootLoader 就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。

      系統(tǒng)加電或復(fù)位后,所有的 CPU 通常都從某個(gè)由 CPU 制造商預(yù)先安排的地址上取指令。這是由處理器設(shè)計(jì)決定的。比如,基于 ARM7TDMI core 的 CPU 在復(fù)位時(shí)通常都從地址 0x00000000 取它的第一條指令。而基于 CPU 構(gòu)建的嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲(chǔ)設(shè)備(比如:ROM、EEPROM 或 FLASH 等)被映射到這個(gè)預(yù)先安排的地址上。因此在系統(tǒng)加電后,CPU 將首先執(zhí)行 Boot Loader 程序。

Boot Loader 的操作模式

       通常多階段的 Boot Loader 能提供更為復(fù)雜的功能,以及更好的可移植性。大多數(shù) Boot Loader 都包含兩種不同的操作模式:"啟動(dòng)加載"模式和"下載"模式,這種區(qū)別僅對(duì)于開發(fā)人員才有意義。但從最終用戶的角度看,Boot Loader 的作用就是用來加載操作系統(tǒng),而并不存在所謂的啟動(dòng)加載模式與下載工作模式的區(qū)別。

       啟動(dòng)加載(Boot loading)模式:這種模式也稱為"自主" (Autonomous)模式。也即 Boot Loader 從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到 RAM 中運(yùn)行,整個(gè)過程并沒有用戶的介入。這種模式是 Boot Loader 的正常工作模式,因此在嵌入式產(chǎn)品發(fā)布的時(shí)侯,BootLoader 顯然必須工作在這種模式下。

      下載(Downloading)模式:在這種模式下,目標(biāo)機(jī)上的 Boot Loader 將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)(Host)下載文件,比如:下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機(jī)下載的文件通常首先被 Boot Loader 保存到目標(biāo)機(jī)的 RAM 中,然后再被 Boot Loader 寫到目標(biāo)機(jī)上的FLASH 類固態(tài)存儲(chǔ)設(shè)備中。

 Boot Loader的組成

       從操作系統(tǒng)的角度看,BootLoader 的總目標(biāo)就是正確地調(diào)用內(nèi)核來執(zhí)行。另外,由于 Boot Loader 的實(shí)現(xiàn)依賴于 CPU 的體系結(jié)構(gòu),因此大多數(shù) Boot Loader 都分為 stage1 和 stage2 兩大部分。依賴于 CPU 體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在 stage1 中,而且通常都用匯編語言來實(shí)現(xiàn),以達(dá)到短小精悍的目的。而 stage2 則通常用C語言來實(shí)現(xiàn),這樣可以實(shí)現(xiàn)給復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。

一、Boot Loader 的 stage1 通常包括以下步驟(以執(zhí)行的先后順序)

首先是硬件設(shè)備初始化。這是 Boot Loader 一開始就執(zhí)行的操作,其目的是為 stage2 的執(zhí)行以及隨后的 kernel 的執(zhí)行準(zhǔn)備好一些基本的硬件環(huán)境。它通常包括以下步驟(以執(zhí)行的先后順序):

1.屏蔽所有的中斷。為中斷提供服務(wù)通常是 OS 設(shè)備驅(qū)動(dòng)程序的責(zé)任,因此在 Boot Loader 的執(zhí)行全過程中可以不        必響應(yīng)任何中斷。中斷屏蔽可以通過寫 CPU的中斷屏蔽寄存器或狀態(tài)寄存器(比如 ARM 的 CPSR 寄存器)來完      成。

2.設(shè)置 CPU 的速度和時(shí)鐘頻率。

3.RAM 初始化。包括正確地設(shè)置系統(tǒng)的內(nèi)存控制器的功能寄存器以及各內(nèi)存庫控制寄存器等。

等。

之后是下面的步驟:

      為加載Boot Loader 的 stage2 準(zhǔn)備 RAM 空間。

      拷貝Boot Loader 的 stage2 到 RAM 空間中。

      設(shè)置好堆棧。

      跳轉(zhuǎn)到stage2 的 C 入口點(diǎn)。

二、Boot Loader的 stage2 通常包括以下步驟(以執(zhí)行的先后順序)

      初始化本階段要使用到的硬件設(shè)備。

      檢測系統(tǒng)內(nèi)存映射(memory map)。

      將kernel 映像和根文件系統(tǒng)映像從 flash 上讀到RAM 空間中。

      為內(nèi)核設(shè)置啟動(dòng)參數(shù)。

      調(diào)用內(nèi)核。

下面這個(gè)截圖是在一篇PDF文檔上看到的,覺的不錯(cuò),貼在此處。



bootloader的最終目的是啟動(dòng)內(nèi)核,又為了方便開發(fā),可以加入串口、網(wǎng)卡、燒寫flash等功能。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多