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

正文內(nèi)容

系統(tǒng)引導(dǎo)程序的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(參考版)

2024-12-07 17:22本頁(yè)面
  

【正文】 ( 7)設(shè)置堆棧。 ( 5)清空 TLB, Caches 以及寫(xiě)緩沖區(qū),當(dāng)系統(tǒng)冷啟動(dòng)時(shí)所有的保留數(shù)據(jù)都以無(wú)效處理,因此都要清空,況且 cache 都已經(jīng)關(guān)閉。 ( 3)關(guān)閉 watchdog 定時(shí)器,清中斷位。 ( 1) 定義 CPU 工作模式為管理模式,工作狀態(tài)為 ARM 狀態(tài)并且關(guān)閉普通中斷(IRQ)和快速中斷 (FIQ)。 綜合起來(lái),整個(gè) bootloader 的實(shí)現(xiàn)流程可以如下圖所示: 28 圖 stage1 29 圖 stage2 30 Flash 啟動(dòng)過(guò) 程中的函數(shù)調(diào)用流程: 圖 Bootloader 的具體實(shí)現(xiàn) 從本節(jié)開(kāi)始介紹本課題的 bootloader 的具體代碼實(shí)現(xiàn)。為了在兩者之間做到兼顧,本課題既支持啟動(dòng)加載模式,也支持下載模式,具體思路為:在 bootloader 做完一些硬件初始化工作后,而在加載內(nèi)核鏡像之前,先在一定的時(shí)間內(nèi)等待有沒(méi)有用戶有鍵盤(pán)輸入,如果沒(méi)有,則為啟動(dòng)加載模式,直接加載內(nèi)核鏡像進(jìn)行啟動(dòng) ;如果有,則進(jìn)入命令行格式,這時(shí)開(kāi)發(fā)者就可以根據(jù)自己的需要以及 bootloader 的支持情況,做一些其他的工作。所以bootloader 在啟動(dòng)時(shí)以及加載內(nèi)核時(shí)通常要考慮這一點(diǎn)。當(dāng) Bootloader 放到 FLASH 的起始處后,系統(tǒng)加電或者復(fù)位后, CPU 將首先執(zhí)行 bootloader 程序。 S3C2440AL 系統(tǒng)復(fù)位后,從物理地址的 0x00000000 開(kāi)始執(zhí)行第一段 代碼,這個(gè)地址是由 CPU 制造商預(yù)先安排的。 地址規(guī)劃設(shè)計(jì) 當(dāng) bootloader 階段設(shè)計(jì) 好之后,需要考慮的是鏡像存儲(chǔ)的地址分配:總鏡像保存在什么地方,階段 2 對(duì)應(yīng)的鏡像會(huì)被拷貝到什么地方;內(nèi)核鏡像原先存放在什么地方, bootloader 會(huì)把它又重新加載到什么地方;如何進(jìn)行準(zhǔn)確的地址規(guī)劃以保證沒(méi)有相互沖突等等,這些都是本節(jié)需要考慮的范疇。階段 1 主要用匯編語(yǔ)言,它主要進(jìn)行與 CPU核以及存儲(chǔ)設(shè) 備密切相關(guān)的處理工作,進(jìn)行一些必要的初始化工作,是一些依賴于 CPU 體系結(jié)構(gòu)的代碼,為了增加效率以及因?yàn)樯婕暗絽f(xié)處理器的設(shè)置,只能用匯編編寫(xiě),這部分直接在 FLASH 中執(zhí)行;階段 2 用一般的 C 語(yǔ)言,來(lái)實(shí)現(xiàn)一般的流程以及對(duì)板級(jí)的一些驅(qū)動(dòng)支持,這部分會(huì)被拷貝到 RAM 中執(zhí)行。在設(shè)計(jì)時(shí),我們將 bootloader 分為兩個(gè)階段:階段 1 和階段 2。 在后 面 篇幅介紹具體 bootloader 的實(shí)現(xiàn)時(shí),基本就根據(jù)以上流程進(jìn)行開(kāi)發(fā)。 GNU 的編譯器功能非常強(qiáng)大,共有上百個(gè)操作選項(xiàng),不過(guò)在本課題實(shí)際開(kāi)發(fā)中只需要用到有限的幾個(gè),大部分采用缺省選項(xiàng)。 ( 3) 編譯環(huán)境 本文所使用的編譯工具均為 GNU 的編譯工具。 軟件環(huán)境以及軟件開(kāi)發(fā)工具 ( 1) 操作系統(tǒng) 論文中操作系統(tǒng)使用的是開(kāi)放源碼的 Linux 操作系統(tǒng),因此最終 bootloader的實(shí)現(xiàn)是針對(duì) Linux 操作系統(tǒng)的,加載的 kernel 鏡像也是 Linux kernel 生成。 ★ 采用 ARM920T CPU 內(nèi)核支持 ARM 調(diào)試體系結(jié)構(gòu)。 ★ 加強(qiáng)的 ARM 體系結(jié)構(gòu) MMU 用于支持 WinCE, EPOC 32和 Linux。 S3C2440A 微處理器體系結(jié)構(gòu)特征如下: ★ 為手持設(shè)備和通用嵌入式應(yīng)用提供片上系統(tǒng)解決方案。每個(gè)都是由具有 8字長(zhǎng)的行組成。 ARM920T 實(shí)現(xiàn)了MMU, AMBA BUS 和 Harvard 高速緩沖體系結(jié)構(gòu)構(gòu)。它采用了新的總線架 構(gòu) Advanced Micro controller Bus Architecture 25 (AMBA)。 S3C2440A 采用了 ARM920T 的內(nèi)核, 的 CMOS 標(biāo)準(zhǔn)宏單元和存儲(chǔ)器單元。 論 文中, 其具體的實(shí)現(xiàn)與驗(yàn)證都需要具體的硬件環(huán)境 , 硬件平臺(tái)是圍繞S3C2440A 搭建起來(lái)的 , 整個(gè)系統(tǒng)的硬件框架如圖 所示。 ★ Bootloader 啟動(dòng)內(nèi)核鏡像的方法是通過(guò)跳轉(zhuǎn)語(yǔ)句直接跳轉(zhuǎn)至內(nèi)核鏡像的第一句指令語(yǔ)句。 ★ Cache 和 MMU 的設(shè)置: MMU 必須關(guān)閉; 數(shù)據(jù) cache 必須關(guān)閉; 23 指令 cache 可以關(guān)閉也可以開(kāi)啟; Bootloader 中所有對(duì)地址的操作都是使用物理地址,是實(shí)在的實(shí)地址,不存在虛擬地 址,因此 MMU 必須關(guān)閉。 ( 4) 啟動(dòng)內(nèi)核鏡像(必需):根據(jù)內(nèi)核鏡像保存的存儲(chǔ)介質(zhì)不同,可以有兩種啟動(dòng)方式: FALSH 啟動(dòng)以及 RAM 啟動(dòng);但是無(wú)論是哪種啟動(dòng)方式,下面的系統(tǒng)狀態(tài)必須得到滿足: ★ CPU 寄存器的設(shè)置: R0= 0; R1=機(jī)器類型; R2=啟動(dòng)參數(shù)標(biāo)記列表在 RAM 中的起始地址; 這三個(gè)寄存器的設(shè)置是在最后啟動(dòng)內(nèi)核時(shí)通過(guò)啟動(dòng)參數(shù)來(lái) 傳遞完成的。 ( 2) 初始化串口(可選,推薦): bootloader 應(yīng)該要初始化以及使能至少一個(gè)串口,通過(guò)它與控制臺(tái)聯(lián)系進(jìn)行一些 debug 的工作;甚至與 PC 通信。 對(duì)于 ARM bootloader 的一些共同特性,理論上只局限于 bootloader 的基本功能,因?yàn)閿U(kuò)展功能眾多,可以有串口、 USB、以太網(wǎng)接口、 IDE、 CF 等,無(wú)法進(jìn)行歸納與總結(jié)。但是,我們還是可以根據(jù) ARM 的體系結(jié)構(gòu),從理論上總結(jié)出一些 ARM 系統(tǒng) bootloader 實(shí)現(xiàn)的共性,而這僅僅局限于理論上。 22 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),是不太可能的事情。但是隨著嵌入式系統(tǒng)的發(fā)展, bootloader 已經(jīng)逐漸在基本功能的基礎(chǔ)上,進(jìn)行了擴(kuò)展, bootloader 可以更多地增加對(duì)具體系統(tǒng)的板級(jí)支持,即增加一些硬件模塊功能上的使用支持,以方便開(kāi)發(fā)人員進(jìn)行開(kāi)發(fā)和調(diào)試。工作于這種模式下的 bootloader 通常都會(huì)向它的中斷用戶提供一個(gè)簡(jiǎn)單的命令行接口。從主機(jī)下載的文件通常首先被 bootloader 保存到目標(biāo)機(jī)的 RAM 中,然后被bootloader 寫(xiě)到目標(biāo)機(jī)上的 FLASH 類固態(tài)存儲(chǔ)設(shè)備中。這種模式是 bootloader 的正常工作模式,因此當(dāng)以嵌入式產(chǎn)品發(fā)布的時(shí)候, bootloader 必須工作在這種模式下。但從最終用戶的角度看, bootloader 的作用永遠(yuǎn)就是用來(lái)加載操作系統(tǒng),而并不存在所謂的啟動(dòng)加載模式與下載工作模式的區(qū)別。從固態(tài)存儲(chǔ)設(shè)備上啟動(dòng)的 bootloader 大多數(shù)是二階段的啟動(dòng)過(guò)程,也即啟動(dòng)過(guò)程可以分為 stage 1 和 stage 2 兩部分。 Bootloader 的啟動(dòng)過(guò)程可以是單階段的,也可以是多階段的。不同的體系結(jié)構(gòu)需求的 bootloader 是不同的;除了體系結(jié)構(gòu), bootloader 還依賴于具 體的 21 嵌入式板級(jí)設(shè)備的配置。通過(guò)這段小程序,我們可以初始化必要的硬件設(shè)備,創(chuàng)建內(nèi)核需要的一些信息并將這些信息通過(guò)相關(guān)機(jī)制傳遞給內(nèi)核,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),最終調(diào)用操作系統(tǒng)內(nèi)核,真正起到引導(dǎo)和加載內(nèi)核的作用。在嵌入式 Linux 中 , 圖 中的引導(dǎo)加載程序即等效為 bootloader。我們熟悉的 PC 中的引導(dǎo)程序一般由 BIOS 和位于 MBR 的 OS bootloader(例如 LILO 或者 GRUB)一起組成。 Bootloader 的基本概念 一個(gè)嵌入式 Linux 系統(tǒng)從軟件的角度看通??梢苑譃樗膫€(gè)層次:引導(dǎo)加載序、 Linux 內(nèi)核、文件系統(tǒng)、用戶應(yīng)用程序。 20 4 Bootloader 的概念 本文在實(shí)現(xiàn)以及驗(yàn)證上都以開(kāi)放源代碼的 linux 為操作系統(tǒng),因此,在眾多舉例以及圖表描述中,多以 linux 系統(tǒng)為例子。對(duì)于本課題來(lái)說(shuō),最終的 bootloader 也必須在具體的系統(tǒng)上運(yùn)行起來(lái)。 ★ 將程序計(jì)數(shù)器值 PC 設(shè)置成該異常中斷的中斷向量地址,從而跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。 ★ 設(shè)置當(dāng)前的程序狀態(tài)寄存器 CPSR 中相應(yīng)的位,包括設(shè)置 CPSR 中的位,使處理器進(jìn)入相應(yīng)的執(zhí)行模式;設(shè)置 CPSR 中的位,禁止 IRQ 中斷,當(dāng)進(jìn)入 FIQ模式時(shí),禁止 FIQ 模式。 下面是 ARM 體系中各異常中斷向量的描述表: 表格 異常中斷向量表 ARM 處理器對(duì)異常中斷的響應(yīng)過(guò)程如下: ★ 保存處理器當(dāng)前狀態(tài)、中斷屏蔽位以及各條件標(biāo)志位。 每個(gè)異常中斷對(duì)應(yīng)的中斷向量表中的 4個(gè)字節(jié)的空間中放了一個(gè)跳轉(zhuǎn)指令 或者一個(gè)向 PC 寄存器中賦值的數(shù)據(jù)訪問(wèn)指令。它可以放在存儲(chǔ)地址的低端,也可以放在存儲(chǔ)地址的高端。在異常中斷處理程序執(zhí)行完成后,程序返回到發(fā)生中斷的指令的下一條指令處執(zhí)行。 ★ 通過(guò)跳轉(zhuǎn)指令,程序可以跳轉(zhuǎn)到特定的地址標(biāo)號(hào)處執(zhí)行,或者跳轉(zhuǎn)到特定的 18 子程序處執(zhí)行。 ARM 體系的異常中斷 在 ARM 體系中通常有以下 3 種方式控制程序的執(zhí)行流程: ★ 在程序正常執(zhí)行過(guò)程種,每執(zhí)行一條 ARM 指令,程序計(jì)數(shù)器寄存器( PC)的值加 4 個(gè)字節(jié);每執(zhí)行一條 Thumb 指令,程序計(jì)數(shù)器寄存器的值加 2 個(gè)字節(jié)。 ARM 指令包括 60 多個(gè)指令,并且支持多種尋址方式:寄存器尋址、立即數(shù)尋址、寄存器間接尋址、寄存器變址尋址、多寄存器尋址、堆棧尋址、塊拷貝尋址以及相對(duì)尋址等。 ★ Rd 位 12- 15,目標(biāo)寄存器編碼。 ★ S 位 20,表示結(jié)果是否影響狀態(tài)寄存器標(biāo)志位: 1 影響, 0 不影響。 ★ I 位 25,決定 operand2 的格式。 ARM 指令按功能大致可以分為跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、乘法類指令、數(shù)據(jù)傳送指令、協(xié)處理器類指令以及雜項(xiàng)指令(包括狀態(tài)寄存器傳 送指令、乘法類指令、軟件中斷指令和斷點(diǎn)指令)。 Thumb 指令集的整體執(zhí)行速度比ARM32 位指令集快,而且提高了代碼密度。因此 ARM 指令中還包括了多條協(xié)處理器指令,使用多達(dá) 16 個(gè)協(xié)處理器,允許將其他處理器通過(guò)協(xié)處理器接口進(jìn)行緊耦合; ARM 還包括幾種內(nèi)存管理 單元的變種, 17 包括簡(jiǎn)單的內(nèi)存保護(hù)到復(fù)雜的頁(yè)面層次。它既可以是立即數(shù),也可以是邏輯運(yùn)算數(shù),使得 ARM 指令可以在讀取數(shù)值的同時(shí)進(jìn)行算術(shù)和移位操作。根據(jù) cond 的 不同編碼,可以選擇根據(jù)條件碼標(biāo)志決定指令的執(zhí)行。標(biāo)準(zhǔn)的 ARM 指令每條都是 32 位,有些ARM 核還可以執(zhí)行 16 位的 Thumb 指令集。這種存儲(chǔ)器格式如下圖所示: 16 圖 bigendian格式的存儲(chǔ)系統(tǒng) 在 littleendian 格式中,地址為 A 的字單元包括字節(jié)單元 A、 A+ A+A+3,其中字節(jié)單元由高位到低位字節(jié)順序?yàn)?A+ A+ A+ A;地址為 A的字單元包括半字單元 A、 A+2,其中半字單元由高位到 低 位字節(jié)順序?yàn)?A+ A;地址為 A 的半字單元包括字節(jié)單元 A、 A+1,其中字節(jié)單元由高位到低位字節(jié)順序?yàn)?A+ A。但是在字單元中, 4 個(gè)字節(jié)哪一個(gè)是高位字節(jié),哪一個(gè)是低位字節(jié),則有兩種不同的格式: bigendian 格式和 littleendian 格式。地址為 A 的字?jǐn)?shù)包括地址 A、A+ A+ A+3 這 4 個(gè)字節(jié)單元的內(nèi)容。 ARM 的地址空間也可以看作是 230個(gè) 32 位的字單元。該地址空間的大小 232個(gè) 8 位字節(jié)。 ARM 存儲(chǔ)系統(tǒng) 這里僅僅介紹 ARM 編程模型中與存儲(chǔ)系統(tǒng)相關(guān)的一些概念。 F:快速中斷禁止位; F= 1 時(shí)禁止 FIQ 中斷。 CPSR 的低 8 位稱為控制位,當(dāng)異常中斷發(fā)生時(shí)這些位發(fā)生改變。大部分的 ARM 指令可以根據(jù) CPSR 中的這些條件標(biāo)志位來(lái)選擇性地執(zhí)行。當(dāng)用戶模式或者系統(tǒng)模式中訪問(wèn) SPSR,將會(huì)產(chǎn)生不可預(yù)知的結(jié)果。在異常中斷返回退出時(shí),可以用 SPSR 種保存的值來(lái)恢復(fù) CPSR。每一種處理器異常模式下都有一個(gè)專用的物理狀態(tài)寄存器,稱為 SPSR(備份程序狀態(tài)寄存器)。 CPSR(當(dāng)前程序狀態(tài)寄存器)可以在任何處理器模式下被訪問(wèn)。也就是說(shuō),對(duì)于 ARM 指令集來(lái)說(shuō),
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1