免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

嵌入式Linux的引導(dǎo)加載程序——Bootloader

 啟云_9137 2020-07-18

對(duì)于嵌入式Linux系統(tǒng)來(lái)說(shuō),從開(kāi)機(jī)上電到操作系統(tǒng)啟動(dòng)需要一個(gè)引導(dǎo)過(guò)程,引導(dǎo)過(guò)程體現(xiàn)在引導(dǎo)程序上,而這個(gè)引導(dǎo)程序就叫作Bootloader。

嵌入式Linux的引導(dǎo)加載程序——Bootloader

Bootloader的概念與作用

Bootloader 是嵌入式系統(tǒng)的引導(dǎo)加載程序,它是系統(tǒng)上電后運(yùn)行(操作系統(tǒng)運(yùn)行之前)的第一段程序 。通過(guò)這段程序可以初始化硬件設(shè)備、建立內(nèi)存空間的映射表,從而建立系統(tǒng)的軟硬件環(huán)境,為最終調(diào)用Linux操作系統(tǒng)內(nèi)核做好準(zhǔn)備。在完成對(duì)系統(tǒng)的初始化任務(wù)之后,它會(huì)將非易失性存儲(chǔ)器(通常是Flash)中的內(nèi)核拷貝到RAM中去,然后跳轉(zhuǎn)到內(nèi)核的第一條指令處繼續(xù)執(zhí)行,從而啟動(dòng)Linux內(nèi)核。另外,幾乎不可能為所有的嵌入式系統(tǒng)建立一個(gè)通用的Bootloader,不同的處理器架構(gòu)都有不同的Bootloader,Bootloader不但依賴(lài)于CPU的體系結(jié)構(gòu),而且依賴(lài)于嵌入式系統(tǒng)板級(jí)設(shè)備的配置。

Bootloader的種類(lèi)

現(xiàn)在已經(jīng)有各種各樣的Bootloader,種類(lèi)劃分也有多種方式。下面就來(lái)看一下常用的引導(dǎo)加載程序:

ROLO:從ROM引導(dǎo)Linux而不需要BIOS,支持X86架構(gòu),不支持ARM和PowerPC;

Etherboot:通過(guò)以太網(wǎng)卡啟動(dòng)Linux系統(tǒng)的固件,支持X86架構(gòu),不支持ARM和PowerPC;

U-boot:通用引導(dǎo)加載程序,支持X86架構(gòu),并支持ARM和PowerPC;

RedBoot:基于eCos的引導(dǎo)加載程序,支持X86架構(gòu),并支持ARM和PowerPC;

值得指出的是Redboot,它幾乎能夠支持所有的體系結(jié)構(gòu),包括MIPS、SH、M68K等體系結(jié)構(gòu)。Redboot是以eCos為基礎(chǔ),采用GPL許可的開(kāi)源軟件工程。

Bootloader的啟動(dòng)流程

Bootloader的實(shí)現(xiàn)依賴(lài)于CPU的體系結(jié)構(gòu),因此大多數(shù)的bootloader一般都是分為兩個(gè)階段的,第一個(gè)階段使用匯編來(lái)實(shí)現(xiàn),它完成一些依賴(lài)于CPU體系結(jié)構(gòu)的初始化,并調(diào)用第二階段的代碼;第二階段則通常使用C語(yǔ)言來(lái)實(shí)現(xiàn),這樣可以實(shí)現(xiàn)更復(fù)雜的功能,而且代碼會(huì)有更好的可讀性和移植性。

Bootloader的第一階段

主要包含以下步驟:

1、一些基本的硬件初始化工作 :主要設(shè)置CPU的速度和時(shí)鐘頻率、屏蔽所有中斷和清除指令與數(shù)據(jù)緩存

2、準(zhǔn)備RAM空間:所謂準(zhǔn)備RAM空間,就是初始化內(nèi)存芯片,使它可被用

3、設(shè)置好堆棧:設(shè)置堆棧指針是為執(zhí)行C語(yǔ)言代碼做準(zhǔn)備,棧的設(shè)置靈活性很大,只要讓sp寄存器指向一段沒(méi)有使用的內(nèi)存即可

4、跳轉(zhuǎn)到第二階段的C入口點(diǎn):在ARM中,通過(guò)修改PC寄存器為相應(yīng)的地址來(lái)實(shí)現(xiàn)

Bootloader的第二階段

主要包含以下步驟:

1、初始化本階段要使用到的硬件設(shè)備:最重要的是設(shè)置系統(tǒng)時(shí)鐘和初始化串口

2、檢查系統(tǒng)內(nèi)存映射

3、將內(nèi)核映像和根文件系統(tǒng)從Flash上讀到RAM空間中:對(duì)于內(nèi)核映像,一般將其拷貝到從0x30008000這個(gè)基地址開(kāi)始的大約1MB大小的內(nèi)存范圍內(nèi)(嵌入式 Linux 的內(nèi)核一般都不操過(guò) 1MB),在這一區(qū)域前空出來(lái)的32KB內(nèi)存是為了放置一些全局?jǐn)?shù)據(jù)結(jié)構(gòu)

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

5、調(diào)用內(nèi)核:BootLoader調(diào)用Linux內(nèi)核的方法是直接跳轉(zhuǎn)到內(nèi)核的第 一條指令處,在跳轉(zhuǎn)時(shí),下列條件要滿(mǎn)足: CPU 寄存器的設(shè)置: R0=0; R1=機(jī)器類(lèi)型 ID; R2=啟動(dòng)參數(shù)標(biāo)記列表在 RAM 中 起始基地址; CPU模式: 必須禁止中斷;CPU必須為SVC模式; Cache 和 MMU 的設(shè)置: MMU 必須關(guān)閉; 指令 Cache 可以打開(kāi)也可以關(guān)閉; 數(shù)據(jù) Cache 必須關(guān)閉

結(jié)語(yǔ)

嵌入式系統(tǒng)的開(kāi)發(fā)過(guò)程除了涉及軟件和硬件,同時(shí)還需要結(jié)合上層應(yīng)用綜合考慮,而其中成本約束又是最關(guān)鍵的因素之一,嵌入式系統(tǒng)的硬件平臺(tái)通常是根據(jù)應(yīng)用量身定制,通常所用的MPU、存儲(chǔ)器、外圍設(shè)備等有多種選擇余地,使系統(tǒng)的引導(dǎo)加載設(shè)計(jì)變得十分復(fù)雜,如果我們從零開(kāi)始實(shí)現(xiàn)的話(huà)是非常困難且低效率的,正確的做法應(yīng)該是從相關(guān)的例程中尋找與硬件平臺(tái)最接近的作為參考程序,然后根據(jù)硬件平臺(tái)作相應(yīng)的修改。

嵌入式Linux的引導(dǎo)加載程序——Bootloader

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(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)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多