freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm嵌入式系統(tǒng)的通用bootloader的設(shè)計(jì)與實(shí)現(xiàn)-資料下載頁(yè)

2025-06-24 15:38本頁(yè)面
  

【正文】 動(dòng)參數(shù)來(lái)傳遞完成的。l CPU模式: 關(guān)閉中斷;屬于SVC模式;Bootloader中沒有必要支持中斷的實(shí)現(xiàn),這屬于內(nèi)核機(jī)制以及設(shè)備驅(qū)動(dòng)管理的管理范疇;SVC模式是系統(tǒng)的一種保護(hù)模式,這樣就可以進(jìn)行一些只能在SVC模式下的操作,例如一些特定寄存器訪問(wèn)操作。l Cache和MMU的設(shè)置: MMU必須關(guān)閉;數(shù)據(jù)cache必須關(guān)閉;指令cache可以關(guān)閉也可以開啟;Bootloader中所有對(duì)地址的操作都是使用物理地址,是實(shí)在的實(shí)地址,不存在虛擬地址,因此MMU必須關(guān)閉。Bootloader主要是裝載內(nèi)核鏡像,鏡像數(shù)據(jù)必須真實(shí)寫回SDRAM中,所以數(shù)據(jù)cache必須關(guān)閉;而對(duì)于指令cache,不存在強(qiáng)制性的規(guī)定,但是一般情況下,推薦關(guān)閉指令cache。l Bootloader啟動(dòng)內(nèi)核鏡像的方法是通過(guò)跳轉(zhuǎn)語(yǔ)句直接跳轉(zhuǎn)至內(nèi)核鏡像的第一句指令語(yǔ)句。 Bootloader的設(shè)計(jì)與實(shí)現(xiàn)第四章 Bootloader的設(shè)計(jì)與實(shí)現(xiàn)本章開始敘述bootloader的設(shè)計(jì)與實(shí)現(xiàn),主要涉及代碼的實(shí)現(xiàn)以及系統(tǒng)存儲(chǔ)空間的具體分配,基本上為軟件的設(shè)計(jì)與實(shí)現(xiàn)。 課題研究的平臺(tái)環(huán)境在本章開始,首先介紹本文研究的硬件平臺(tái)和軟件開發(fā)平臺(tái)。 硬件平臺(tái)Booltoader是與硬件環(huán)境息息相關(guān)的,特別是與具體的處理器與具體硬件系統(tǒng)。對(duì)于本本文,其具體的實(shí)現(xiàn)與驗(yàn)證都需要具體的硬件環(huán)境。本課題的硬件平臺(tái)是圍繞PXA255(前面章節(jié)已有介紹)搭建起來(lái)的。整個(gè)系統(tǒng)的硬件框架如圖所示。64MBSDRAM32MB NORFLASHUSB OTGControllerAsyncBufferCompactFLASHI2CD/AJTAGUARTRS232Intel XscalePXA255ProccessorAC97Touch pan’’TFTLCDI2CRTCIrDASIR/FIRLCDSupplySupply5VDC-DCBatteryChargerExt PowerSupply InBattery選擇以Intel Xscale系列的PXA255為核心的硬件系統(tǒng),是因?yàn)樵撓到y(tǒng)既與相關(guān)的項(xiàng)目重疊,而且Xscale核本身是StrongArm的一個(gè)增強(qiáng)集,它與ARM V5TE構(gòu)架兼容,另外PXA系列目前廣泛應(yīng)用于各類嵌入式系統(tǒng)中,是市場(chǎng)主流的嵌入式微處理器系列。對(duì)其研究,既有一定的典型性,又有一定的前瞻性。,本課題需關(guān)注的是處理器、存儲(chǔ)器以及在bootloader中需要支持的一些外部設(shè)備(如串口、USB、LCD)等。 軟件環(huán)境以及軟件開發(fā)工具 操作系統(tǒng)本文操作系統(tǒng)使用的是開放源碼的Linux操作系統(tǒng),因此最終bootloader的實(shí)現(xiàn)是針對(duì)Linux操作系統(tǒng)的,加載的kernel鏡像也是Linux kernel生成。 編程語(yǔ)言由于本文與芯片底層關(guān)系密切,甚至還涉及到相關(guān)協(xié)處理器,因此在與硬件芯片底層相關(guān)的部分使用匯編,這樣可以大大提高性能以及移植性;而在很多系統(tǒng)板級(jí)的支持上,則使用C語(yǔ)言,以提高代碼的可讀性以及層次性。 編譯環(huán)境本文所使用的編譯工具均為GNU的編譯工具。其主要包括匯編器as、C編譯器gcc、C++編譯器g++、連接器ld和相關(guān)的二進(jìn)制轉(zhuǎn)換工具,而基于ARM平臺(tái)的工具分別為armlinuxas、armlinuxgcc、armlinuxg++、armlinuxld和,這些也是平常所說(shuō)的交叉編譯工具。GNU的編譯器功能非常強(qiáng)大,共有上百個(gè)操作選項(xiàng),不過(guò)在本課題實(shí)際開發(fā)中只需要用到有限的幾個(gè),大部分采用缺省選項(xiàng)。一般地,GNU工具地開發(fā)流程如下:(1)編寫C、C++或者匯編源程序(2)用相關(guān)編譯器生成目標(biāo)文件(3)編寫連接腳本(4)用連接器生成最終文件(elf格式)(5)用二進(jìn)制轉(zhuǎn)換工具生成可下載的二進(jìn)制代碼。在以后篇幅介紹具體bootloader的實(shí)現(xiàn)時(shí),基本就根據(jù)以上流程進(jìn)行開發(fā)。 Bootloader的總體設(shè)計(jì) 階段設(shè)計(jì)在前面的章節(jié)中,已經(jīng)介紹過(guò)bootloader的啟動(dòng)可以是分階段的。在設(shè)計(jì)時(shí),我們將bootloader分為兩個(gè)階段:階段1和階段2。分為兩個(gè)階段的原因是因?yàn)椋海?)基于編程語(yǔ)言的考慮。階段1用主要用匯編語(yǔ)言,它主要進(jìn)行與CPU核以及存儲(chǔ)設(shè)備密切相關(guān)的處理工作,進(jìn)行一些必要的初始化工作,是一些依賴于CPU體系結(jié)構(gòu)的代碼,為了增加效率以及因?yàn)樯婕暗絽f(xié)處理器的設(shè)置,只能用匯編編寫,這部分直接在FLASH中執(zhí)行;階段2用一般的C語(yǔ)言,來(lái)實(shí)現(xiàn)一般的流程以及對(duì)板級(jí)的一些驅(qū)動(dòng)支持,這部分會(huì)被拷貝到RAM中執(zhí)行。(2)代碼具有更好的可讀性與移植性:若對(duì)于相同的CPU以及存儲(chǔ)設(shè)備,要增加外設(shè)支持,階段1的代碼可以維護(hù)不變,只對(duì)階段2的代碼進(jìn)行修改;若要支持不同的CPU,則基礎(chǔ)代碼只需在階段1中修改。 地址規(guī)劃設(shè)計(jì)當(dāng)bootloader階段設(shè)計(jì)好之后,需要考慮的是鏡像存儲(chǔ)的地址分配:總鏡像保存在什么地方,階段2對(duì)應(yīng)的鏡像會(huì)被拷貝到什么地方;內(nèi)核鏡像原先存放在什么地方,bootloader會(huì)把它又重新加載到什么地方;如何進(jìn)行準(zhǔn)確的地址規(guī)劃以保證沒有相互沖突等等,這些都是本節(jié)需要考慮的范疇。PXA255的地址空間是統(tǒng)一尋址的,對(duì)于本課題的硬件系統(tǒng),外接32M的FLASH,由片選信號(hào)CS0選擇,因此映射到物理地址的0x00000000處;對(duì)于64M的SDRAM,則對(duì)應(yīng)PXA255的SDRAM BANK0,映射到0xa0000000處。PXA255系統(tǒng)復(fù)位后,從物理地址的0x00000000開始執(zhí)行第一段代碼,這個(gè)地址是由 CPU制造商預(yù)先安排的。而我們基于PXA255構(gòu)建的系統(tǒng)將固態(tài)存儲(chǔ)設(shè)備FLASH映射到這個(gè)地址上。當(dāng)Bootloader放到FLASH的起始處后,系統(tǒng)加電或者復(fù)位后,CPU將首先執(zhí)行bootloader程序。本文所使用的內(nèi)核鏡像以及根文件系統(tǒng)鏡像都被加載到SDRAM中運(yùn)行,這樣做是因?yàn)榛谶\(yùn)行速度的考慮,盡管在嵌入式系統(tǒng)中內(nèi)核鏡像與根文件系統(tǒng)鏡像也可以直接在ROM或FLASH這樣的固態(tài)存儲(chǔ)設(shè)備中直接運(yùn)行。所以bootloader在啟動(dòng)時(shí)以及加載內(nèi)核時(shí)通常要考慮這一點(diǎn)。下圖為具體的存儲(chǔ)布局圖:以上為SDRAM地址空間 內(nèi)核鏡像拷貝處 0xa0300000 鏡像2被拷貝處 0xa0000000 內(nèi)核鏡像存放處 FLASH地址空間 0x000c0000 (鏡像2存放處) 0x00040000 鏡像1存放處 0x00000000 雖然bootloader最終生成一個(gè)可執(zhí)行鏡像,但是為了更能清楚的解釋其實(shí)現(xiàn)流程,在此虛擬地將其與啟動(dòng)階段相對(duì)應(yīng)起來(lái),分成兩個(gè)鏡像:鏡像1和鏡像2(事實(shí)上,在編譯過(guò)程中是會(huì)形成這兩個(gè)鏡像,除了一個(gè)總的鏡像鏡像1,還有被拷貝至SDRAM中的鏡像2)。在本課題中,將物理地址的0x00000000-0x00040000存放bootloader的鏡像,內(nèi)核鏡像放在物理地址開始0x000c0000之后的1M空間內(nèi)(內(nèi)核鏡像一般都小于1M大?。?;在前面的階段設(shè)計(jì)中已經(jīng)談及鏡像2在SDRAM中運(yùn)行,這樣bootloader的啟動(dòng)速度會(huì)大大加快,因此本課題將鏡像2放在SDRAM的起始地址0xa0000000處運(yùn)行;而內(nèi)核鏡像則規(guī)劃至物理地址的0xa0300000處執(zhí)行(放在這邊是基于這樣的考慮:linux內(nèi)核會(huì)在SDRAM開始處存放一些全局?jǐn)?shù)據(jù)結(jié)構(gòu),比如啟動(dòng)參數(shù)和內(nèi)核頁(yè)表等,所以預(yù)留一段空間)。 模式設(shè)計(jì)對(duì)于普通用戶來(lái)說(shuō)只需要bootloader的啟動(dòng)加載模式,但是對(duì)于開發(fā)者來(lái)說(shuō),則需要下載模式,因?yàn)樗麄冃枰獣r(shí)時(shí)刻刻地進(jìn)行一些鏡像的更新。為了在兩者之間做到兼顧,本課題既支持啟動(dòng)加載模式,也支持下載模式,具體思路為:在bootloader做完一些硬件初始化工作后,而在加載內(nèi)核鏡像之前,先在一定的時(shí)間內(nèi)等待有沒有用戶有鍵盤輸入,如果沒有,則為啟動(dòng)加載模式,直接加載內(nèi)核鏡像進(jìn)行啟動(dòng);如果有,則進(jìn)入命令行格式,這時(shí)開發(fā)者就可以根據(jù)自己的需要以及bootloader的支持情況,做一些其他的工作。模式的轉(zhuǎn)換設(shè)計(jì)主要在階段2中實(shí)現(xiàn)。綜合起來(lái),整個(gè)bootloader的實(shí)現(xiàn)流程可以如下圖所示: 基本硬件初始化 階段1 拷貝階段2鏡像至RAM 進(jìn)入階段2開始執(zhí)行 擴(kuò)展功能所需硬件初始化 拷貝內(nèi)核鏡像至RAM中 階段2 等待50ms 看是否串口有 輸入 是 否 進(jìn)入下載模式 跳轉(zhuǎn)至內(nèi)核鏡像 接收命令 Bootloader的具體實(shí)現(xiàn) 從本節(jié)開始介紹本課題的bootloader的具體代碼實(shí)現(xiàn)。 階段1的代碼實(shí)現(xiàn)階段1通常包括以下步驟(以執(zhí)行的先后順序):l 一些基本硬件的初始化工作l 為加載鏡像2準(zhǔn)備RAM空間(RAM足夠的情況下可以省略)l 把鏡像2拷貝到RAM空間l 跳轉(zhuǎn)到鏡像2的入口點(diǎn)(一般是C入口點(diǎn))下面結(jié)合相關(guān)具體代碼描述相關(guān)的實(shí)現(xiàn),其中涉及到的匯編代碼可以參考ARM指令集,涉及到的對(duì)PXA255協(xié)處理器的操作可以參考參考文獻(xiàn)中相關(guān)的介紹。和一般的匯編一樣,首先要做的是一些偽代碼:(1)定義ARM各模式的棧大小。 .equ MonStackSz, 4096 .equ FiqStackSz, 4096 .equ IrqStackSz, 4096 .equ AbtStackSz, 4096 .equ UndStackSz, 4096 .equ SysStackSz, 4096(2)申明各模式的棧。.global MonStack .global FiqStack .global IrqStack .global AbtStack .global UndStack .global SysStack (3)將各模式的棧與棧大小結(jié)合起來(lái),即為各棧分配棧大小。.m MonStack, MonStackSz .m FiqStack, FiqStackSz .m IrqStack, IrqStackSz .m AbtStack, AbtStackSz .m UndStack, UndStackSz .m SysStack, SysStackSz (4)接著就是申明一些標(biāo)號(hào)量(代碼略)。這些基本工作做完之后,開始進(jìn)入真正的初始化工作,標(biāo)識(shí)為正文段(.text段,見后面連接章節(jié))。以reset標(biāo)號(hào)標(biāo)識(shí),一開始處設(shè)置異常中斷向量表,當(dāng)是冷啟動(dòng)時(shí),直接跳轉(zhuǎn)至對(duì)應(yīng)處進(jìn)行啟動(dòng):reset: b coldstart b undefined_instruction b software_interrupt b abort_prefetch b abort_data b not_used b interrupt_request b fast_interrupt_request系統(tǒng)正常啟動(dòng),都屬于冷啟動(dòng),程序直接跳轉(zhuǎn)至coldstart標(biāo)號(hào)處執(zhí)行。接著完成的功能包括:1. 使能各協(xié)處理器,PXA255中很多特殊功能都需要借助于協(xié)處理器,比如存儲(chǔ)管理。 ldr r0, =0x2001 mcr p15,0,r0,c15,c1,02. 關(guān)閉MMU,內(nèi)部指令/數(shù)據(jù)cache以及寫緩沖區(qū),ARM體系bootloader中都無(wú)需MMU的功能,所
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1