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

正文內(nèi)容

基于arm嵌入式系統(tǒng)的通用bootloader的設(shè)計(jì)與實(shí)現(xiàn)(文件)

2025-07-12 15:38 上一頁面

下一頁面
 

【正文】 何處理器模式下被訪問。在異常中斷返回退出時(shí),可以用SPSR種保存的值來恢復(fù)CPSR。[6]所示: 31 30 29 28 27 8 7 6 5 4 0NZCQUnused IFTModes N(Negative)、Z(Zero)、C(Carry)、V(Overflow)統(tǒng)稱為標(biāo)志位。F:快速中斷禁止位;F=1時(shí)禁止FIQ中斷。該地址空間的大小232個(gè)8位字節(jié)。地址為A的字?jǐn)?shù)包括地址A、A+A+A+3這4個(gè)字節(jié)單元的內(nèi)容。這種存儲(chǔ)器格式如下圖所示: 31 24 23 16 15 8 7 0字單元A半字單元A半字單元A+2字節(jié)單元A字節(jié)單元A+1字節(jié)單元A+2字節(jié)單元A+3 bigendian格式的存儲(chǔ)系統(tǒng)在littleendian格式中,地址為A的字單元包括字節(jié)單元A、A+A+A+3,其中字節(jié)單元由高位到低位字節(jié)順序?yàn)锳+A+A+A;地址為A的字單元包括半字單元A、A+2,其中半字單元由高位到地位字節(jié)順序?yàn)锳+A;地址為A的半字單元包括字節(jié)單元A、A+1,其中字節(jié)單元由高位到低位字節(jié)順序?yàn)锳+A。根據(jù)cond的不同編碼,可以選擇根據(jù)條件碼標(biāo)志決定指令的執(zhí)行。因此ARM指令中還包括了多條協(xié)處理器指令,使用多達(dá)16個(gè)協(xié)處理器,允許將其他處理器通過協(xié)處理器接口進(jìn)行緊耦合;ARM還包括幾種內(nèi)存管理單元的變種,包括簡(jiǎn)單的內(nèi)存保護(hù)到復(fù)雜的頁面層次。ARM指令按功能大致可以分為跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、乘法類指令、數(shù)據(jù)傳送指令、協(xié)處理器類指令以及雜項(xiàng)指令(包括狀態(tài)寄存器傳送指令、乘法類指令、軟件中斷指令和斷點(diǎn)指令)。l S 位20,表示結(jié)果是否影響狀態(tài)寄存器標(biāo)志位:1影響,0不影響。ARM指令包括60多個(gè)指令,并且支持多種尋址方式:寄存器尋址、立即數(shù)尋址、寄存器間接尋址、寄存器變址尋址、多寄存器尋址、堆棧尋址、塊拷貝尋址以及相對(duì)尋址等。l 通過跳轉(zhuǎn)指令,程序可以跳轉(zhuǎn)到特定的地址標(biāo)號(hào)處執(zhí)行,或者跳轉(zhuǎn)到特定的子程序處執(zhí)行。它可以放在存儲(chǔ)地址的低端,也可以放在存儲(chǔ)地址的高端。下面是ARM體系中各異常中斷向量的描述表:中斷向量偏移地址 異常中斷類型 異常中斷模式 優(yōu)先級(jí)(6最低) 0x00 復(fù)位 監(jiān)管模式 10x04 未定義的指令 未定義指令中止模式 60x08 軟件中斷 監(jiān)管模式 60x0c 指令預(yù)取中止 中止模式 50x10 數(shù)據(jù)訪問中止 中止模式 20x14 保留 未使用 未使用0x18 普通中斷請(qǐng)求 外部中斷模式 40x1c 快速中斷請(qǐng)求 快速中斷模式 3ARM處理器對(duì)異常中斷的響應(yīng)過程如下:l 保存處理器當(dāng)前狀態(tài)、中斷屏蔽位以及各條件標(biāo)志位。l 將程序計(jì)數(shù)器值PC設(shè)置成該異常中斷的中斷向量地址,從而跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。 Intel Xscale系統(tǒng)構(gòu)架本文最終實(shí)現(xiàn)以及驗(yàn)證平臺(tái)是基于Intel Xscale構(gòu)架的,因此在本節(jié)中主要介紹一下Intel Xscale的系統(tǒng)結(jié)構(gòu)并簡(jiǎn)要介紹一下基于Xscale微架構(gòu)的處理器PXA255。目前,基于Xscale微構(gòu)架的處理器有:IOP310,IOP321,PXA210,PXA250,PXA255,PXA26X等。 PXA255作為本課題的整個(gè)硬件平臺(tái)核心,具有很強(qiáng)的處理能力,同時(shí)兼具低功耗和高集成度的特性。 Bootloader的基本概念一個(gè)嵌入式Linux系統(tǒng)從軟件的角度看通??梢苑譃樗膫€(gè)層次:引導(dǎo)加載程序、Linux內(nèi)核、文件系統(tǒng)、用戶應(yīng)用程序。在嵌入式Linux中, 。不同的體系結(jié)構(gòu)需求的bootloader是不同的;除了體系結(jié)構(gòu),bootloader還依賴于具體的嵌入式板級(jí)設(shè)備的配置。從固態(tài)存儲(chǔ)設(shè)備上啟動(dòng)的bootloader大多數(shù)是二階段的啟動(dòng)過程,也即啟動(dòng)過程可以分為stage 1和stage 2兩部分。這種模式是bootloader的正常工作模式,因此當(dāng)以嵌入式產(chǎn)品發(fā)布的時(shí)候,bootloader必須工作在這種模式下。工作于這種模式下的bootloader通常都會(huì)向它的中斷用戶提供一個(gè)簡(jiǎn)單的命令行接口。 ARM Bootloader的共性從上面bootloader的基本概念可以看出,bootloader的設(shè)計(jì)與實(shí)現(xiàn)是與具體的CPU以及具體的硬件系統(tǒng)緊密相關(guān)的,從上一章的實(shí)現(xiàn)就可以看出,要實(shí)現(xiàn)一個(gè)通用的ARM bootloader,即要適合所有的ARM處理器以及硬件系統(tǒng),是不太可能的事情。對(duì)于ARM bootloader的一些共同特性,理論上只局限于bootloader的基本功能,因?yàn)閿U(kuò)展功能眾多,可以有串口、USB、以太網(wǎng)接口、IDE、CF等,無法進(jìn)行歸納與總結(jié)。(4) 啟動(dòng)內(nèi)核鏡像(必需):根據(jù)內(nèi)核鏡像保存的存儲(chǔ)介質(zhì)不同,可以有兩種啟動(dòng)方式:FALSH啟動(dòng)以及RAM啟動(dòng);但是無論是哪種啟動(dòng)方式,下面的系統(tǒng)狀態(tài)必須得到滿足:l CPU寄存器的設(shè)置: R0=0; R1=機(jī)器類型; R2=啟動(dòng)參數(shù)標(biāo)記列表在RAM中的起始地址; 這三個(gè)寄存器的設(shè)置是在最后啟動(dòng)內(nèi)核時(shí)通過啟動(dòng)參數(shù)來傳遞完成的。l Bootloader啟動(dòng)內(nèi)核鏡像的方法是通過跳轉(zhuǎn)語句直接跳轉(zhuǎn)至內(nèi)核鏡像的第一句指令語句。對(duì)于本本文,其具體的實(shí)現(xiàn)與驗(yàn)證都需要具體的硬件環(huán)境。對(duì)其研究,既有一定的典型性,又有一定的前瞻性。 編譯環(huán)境本文所使用的編譯工具均為GNU的編譯工具。在以后篇幅介紹具體bootloader的實(shí)現(xiàn)時(shí),基本就根據(jù)以上流程進(jìn)行開發(fā)。階段1用主要用匯編語言,它主要進(jìn)行與CPU核以及存儲(chǔ)設(shè)備密切相關(guān)的處理工作,進(jìn)行一些必要的初始化工作,是一些依賴于CPU體系結(jié)構(gòu)的代碼,為了增加效率以及因?yàn)樯婕暗絽f(xié)處理器的設(shè)置,只能用匯編編寫,這部分直接在FLASH中執(zhí)行;階段2用一般的C語言,來實(shí)現(xiàn)一般的流程以及對(duì)板級(jí)的一些驅(qū)動(dòng)支持,這部分會(huì)被拷貝到RAM中執(zhí)行。PXA255系統(tǒng)復(fù)位后,從物理地址的0x00000000開始執(zhí)行第一段代碼,這個(gè)地址是由 CPU制造商預(yù)先安排的。所以bootloader在啟動(dòng)時(shí)以及加載內(nèi)核時(shí)通常要考慮這一點(diǎn)。為了在兩者之間做到兼顧,本課題既支持啟動(dòng)加載模式,也支持下載模式,具體思路為:在bootloader做完一些硬件初始化工作后,而在加載內(nèi)核鏡像之前,先在一定的時(shí)間內(nèi)等待有沒有用戶有鍵盤輸入,如果沒有,則為啟動(dòng)加載模式,直接加載內(nèi)核鏡像進(jìn)行啟動(dòng);如果有,則進(jìn)入命令行格式,這時(shí)開發(fā)者就可以根據(jù)自己的需要以及bootloader的支持情況,做一些其他的工作。.m MonStack, MonStackSz .m FiqStack, FiqStackSz .m IrqStack, IrqStackSz .m AbtStack, AbtStackSz .m UndStack, UndStackSz .m SysStack, SysStackSz (4)接著就是申明一些標(biāo)號(hào)量(代碼略)。 ldr r0, =0x2001 mcr p15,0,r0,c15,c1,02. 關(guān)閉MMU,內(nèi)部指令/數(shù)據(jù)cache以及寫緩沖區(qū),ARM體系bootloader中都無需MMU的功能,所有。以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í)行。 .equ MonStackSz, 4096 .equ FiqStackSz, 4096 .equ IrqStackSz, 4096 .equ AbtStackSz, 4096 .equ UndStackSz, 4096 .equ SysStackSz, 4096(2)申明各模式的棧。綜合起來,整個(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)。在本課題中,將物理地址的0x00000000-0x00040000存放bootloader的鏡像,內(nèi)核鏡像放在物理地址開始0x000c0000之后的1M空間內(nèi)(內(nèi)核鏡像一般都小于1M大?。辉谇懊娴碾A段設(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ù)留一段空間)。當(dāng)Bootloader放到FLASH的起始處后,系統(tǒng)加電或者復(fù)位后,CPU將首先執(zhí)行bootloader程序。 地址規(guī)劃設(shè)計(jì)當(dāng)bootloader階段設(shè)計(jì)好之后,需要考慮的是鏡像存儲(chǔ)的地址分配:總鏡像保存在什么地方,階段2對(duì)應(yīng)的鏡像會(huì)被拷貝到什么地方;內(nèi)核鏡像原先存放在什么地方,bootloader會(huì)把它又重新加載到什么地方;如何進(jìn)行準(zhǔn)確的地址規(guī)劃以保證沒有相互沖突等等,這些都是本節(jié)需要考慮的范疇。在設(shè)計(jì)時(shí),我們將bootloader分為兩個(gè)階段:階段1和階段2。GNU的編譯器功能非常強(qiáng)大,共有上百個(gè)操作選項(xiàng),不過在本課題實(shí)際開發(fā)中只需要用到有限的幾個(gè),大部分采用缺省選項(xiàng)。 軟件環(huán)境以及軟件開發(fā)工具 操作系統(tǒng)本文操作系統(tǒng)使用的是開放源碼的Linux操作系統(tǒng),因此最終bootloader的實(shí)現(xiàn)是針對(duì)Linux操作系統(tǒng)的,加載的kernel鏡像也是Linux kernel生成。整個(gè)系統(tǒng)的硬件框架如圖所示。 課題研究的平臺(tái)環(huán)境在本章開始,首先介紹本文研究的硬件平臺(tái)和軟件開發(fā)平臺(tái)。l Cache和MMU的設(shè)置: MMU必須關(guān)閉;數(shù)據(jù)cache必須關(guān)閉;指令cache可以關(guān)閉也可以開啟;Bootloader中所有對(duì)地址的操作都是使用物理地址,是實(shí)在的實(shí)地址,不存在虛擬地址,因此MMU必須關(guān)閉。(2) 初始化串口(可選,推薦):bootloader應(yīng)該要初始化以及使能至少一個(gè)串口,通過它與控制臺(tái)聯(lián)系進(jìn)行一些debug的工作;甚至與PC通信。但是,我們還是可以根據(jù)ARM的體系結(jié)構(gòu),從理論上總結(jié)出一些ARM系統(tǒng)bootloader實(shí)現(xiàn)的共性,而這僅僅局限于理論上。但是隨著嵌入式系統(tǒng)的發(fā)展,bootloader已經(jīng)逐漸在基本功能的基礎(chǔ)上,進(jìn)行了擴(kuò)展,bootloader可以更多地增加對(duì)具體系統(tǒng)的板級(jí)支持,即增加一些硬件模塊功能上的使用支持,以方便開發(fā)人員進(jìn)行開發(fā)和調(diào)試。從主機(jī)下載的文件通常首先被bootloader保存到目標(biāo)機(jī)的RAM中,然后被bootloader寫到目標(biāo)機(jī)上的FLASH類固態(tài)存儲(chǔ)設(shè)備中。但從最終用戶的角度看,bootloader的作用永遠(yuǎn)就是用來加載操作系統(tǒng),而并不存在所謂的啟動(dòng)加載模式與下載工作模式的區(qū)別。Bootloader的啟動(dòng)過程可以是單階段的,也可以是多階段的。通過這段小程序,我們可以初始化必要的硬件設(shè)備,創(chuàng)建內(nèi)核需要的一些信息并將這些信息通過相關(guān)機(jī)制
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1