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

正文內(nèi)容

系統(tǒng)引導程序的設計與實現(xiàn)(已改無錯字)

2022-08-27 04:08:43 本頁面
  

【正文】 系統(tǒng)加載到RAM中運行,整個過程沒有用戶的介入。這種模式是bootloader的正常工作模式,因此當以嵌入式產(chǎn)品發(fā)布的時候,bootloader必須工作在這種模式下。下載模式:在這種模式下,目標機上的bootloader將通過串口或者網(wǎng)絡連接或者其它通信手段從主機下載文件,比如:下載內(nèi)核鏡像和根文件系統(tǒng)鏡像等。從主機下載的文件通常首先被bootloader保存到目標機的RAM中,然后被bootloader寫到目標機上的FLASH類固態(tài)存儲設備中。Bootloader的這種模式通常在第一次安裝內(nèi)核與根文件系統(tǒng)時使用;此外,以后的系統(tǒng)更新也會使用bootloader的這種工作模式。工作于這種模式下的bootloader通常都會向它的中斷用戶提供一個簡單的命令行接口。 Bootloader的概念擴展 Bootloader最主要的功能是引導加載內(nèi)核鏡像。但是隨著嵌入式系統(tǒng)的發(fā)展,bootloader已經(jīng)逐漸在基本功能的基礎上,進行了擴展,bootloader可以更多地增加對具體系統(tǒng)的板級支持,即增加一些硬件模塊功能上的使用支持,以方便開發(fā)人員進行開發(fā)和調(diào)試。從這個層面上看,功能擴展后的bootloader可以虛擬地看成是一個微小的系統(tǒng)級的代碼包。 ARM Bootloader的共性 從上面bootloader的基本概念可以看出,bootloader的設計與實現(xiàn)是與具體的CPU以及具體的硬件系統(tǒng)緊密相關的,從上一章的實現(xiàn)就可以看出,要實現(xiàn)一個通用的ARM bootloader,即要適合所有的ARM處理器以及硬件系統(tǒng),是不太可能的事情。另外,不同的操作系統(tǒng),可能對具體的bootloader還會有另外額外的要求。但是,我們還是可以根據(jù)ARM的體系結構,從理論上總結出一些ARM系統(tǒng)bootloader實現(xiàn)的共性,而這僅僅局限于理論上。至于涉及到具體的設計與實現(xiàn),可以參看第5章的具體內(nèi)容,并根據(jù)自己的硬件系統(tǒng)進行移植,也不是一件困難的事情。 對于ARM bootloader的一些共同特性,理論上只局限于bootloader的基本功能,因為擴展功能眾多,可以有串口、USB、以太網(wǎng)接口、IDE、CF等,無法進行歸納與總結。 對于一個ARM系統(tǒng)來說,本質(zhì)上,bootloader作為引導與加載內(nèi)核鏡像的“工具”,在實現(xiàn)上,必須提供以下幾個功能,更確切地說,必須做到以下幾點:(1)初始化RAM(必需):bootloader必須能夠初始化RAM,因為將來系統(tǒng)要通過它保存一些Volatile數(shù)據(jù),但具體地實現(xiàn)要依賴與具體的CPU以及硬件系統(tǒng)。(2)初始化串口(可選,推薦):bootloader應該要初始化以及使能至少一個串口,通過它與控制臺聯(lián)系進行一些debug的工作;甚至與PC通信。(3)創(chuàng)建內(nèi)核參數(shù)列表(針對linux操作系統(tǒng),推薦)。(4)啟動內(nèi)核鏡像(必需):根據(jù)內(nèi)核鏡像保存的存儲介質(zhì)不同,可以有兩種啟動方式:FALSH啟動以及RAM啟動;但是無論是哪種啟動方式,下面的系統(tǒng)狀態(tài)必須得到滿足:★ CPU寄存器的設置:R0=0; R1=機器類型; R2=啟動參數(shù)標記列表在RAM中的起始地址; 這三個寄存器的設置是在最后啟動內(nèi)核時通過啟動參數(shù)來傳遞完成的。★ CPU模式:關閉中斷; 屬于SVC模式; Bootloader中沒有必要支持中斷的實現(xiàn),這屬于內(nèi)核機制以及設備驅(qū)動管理的管理范疇;SVC模式是系統(tǒng)的一種保護模式,這樣就可以進行一些只能在SVC模式下的操作,例如一些特定寄存器訪問操作?!? Cache和MMU的設置:MMU必須關閉; 數(shù)據(jù)cache必須關閉; 指令cache可以關閉也可以開啟; Bootloader中所有對地址的操作都是使用物理地址,是實在的實地址,不存在虛擬地址,因此MMU必須關閉。Bootloader主要是裝載內(nèi)核鏡像,鏡像數(shù)據(jù)必須真實寫回SDRAM中,所以數(shù)據(jù)cache必須關閉;而對于指令cache,不存在強制性的規(guī)定,但是一般情況下,推薦關閉指令cache?!? Bootloader啟動內(nèi)核鏡像的方法是通過跳轉語句直接跳轉至內(nèi)核鏡像的第一句指令語句。 5 Bootloader的設計與實現(xiàn) 課題研究的平臺環(huán)境 硬件平臺Booltoader是與硬件環(huán)境息息相關的,特別是與具體的處理器與具體硬件系統(tǒng)相關。論文中,其具體的實現(xiàn)與驗證都需要具體的硬件環(huán)境,硬件平臺是圍繞S3C2440A搭建起來的。 S3C2440A 模塊圖 S3C2440A是著名的半導體公司SAMSUNG推出的一款16/32位RISC微處理器,它為手持設備和一般類型的應用提供了低價格、低功耗、高性能微控制器的解決方案。S3C2440A采用了ARM920T的內(nèi)核。其低功耗,簡單,且全靜態(tài)設計特別適合于對成本和功率敏感型的應用。它采用了新的總線架構Advanced Micro controller Bus Architecture (AMBA)。S3C2440A的最大特點是其核心處理器(CPU)是一個由Advanced RISC Machines有限公司設計的16/32位ARM920T的RISC處理器。ARM920T實現(xiàn)了MMU,AMBA BUS和Harvard高速緩沖體系結構構。這一結構具有獨立的16KB指令 Cache和16KB數(shù)據(jù)Cache。每個都是由具有8字長的行組成。通過提供一套完整的通用系統(tǒng)外設,S3C2440A減少整體系統(tǒng)成本和無需配置額外的組件。S3C2440A微處理器體系結構特征如下:★ 為手持設備和通用嵌入式應用提供片上系統(tǒng)解決方案。★ 16/32位RISC體系結構和ARM920T內(nèi)核強大的指令集?!? 加強的ARM體系結構MMU用于支持WinCE,EPOC 32和Linux?!? 采用高速指令ICache,高速數(shù)據(jù)DCache,寫緩沖器和物理地址TAG RAM 以減少主存帶寬和響應速度帶來的影響?!? 采用ARM920T CPU內(nèi)核支持ARM調(diào)試體系結構。★ 內(nèi)部高級微控制總線(AMBA)體系結構(,AHB/APB)。 軟件環(huán)境以及軟件開發(fā)工具 (1)操作系統(tǒng) 論文中操作系統(tǒng)使用的是開放源碼的Linux操作系統(tǒng),因此最終bootloader的實現(xiàn)是針對Linux操作系統(tǒng)的,加載的kernel鏡像也是Linux kernel生成。 (2)編程語言由于論文與芯片底層關系密切,甚至還涉及到相關協(xié)處理器,因此在與硬件芯片底層相關的部分使用匯編,這樣可以大大提高性能以及移植性;而在很多系統(tǒng)板級的支持上,則使用C語言,以提高代碼的可讀性以及層次性。 (3)編譯環(huán)境本文所使用的編譯工具均為GNU的編譯工具。其主要包括匯編器as、C編譯器gcc、C++編譯器g++、連接器ld和相關的二進制轉換工具,而基于ARM平臺的工具分別為armlinuxas、armlinuxgcc、armlinuxg++、armlinuxld,這些也是平常所說的交叉編譯工具。GNU的編譯器功能非常強大,共有上百個操作選項,不過在本課題實際開發(fā)中只需要用到有限的幾個,大部分采用缺省選項。一般地,GNU工具地開發(fā)流程如下:(1)編寫C、C++或者匯編源程序(2)用相關編譯器生成目標文件(3)編寫連接腳本(4)用連接器生成最終文件(elf格式)(5)用二進制轉換工具生成可下載的二進制代碼。在后面篇幅介紹具體bootloader的實現(xiàn)時,基本就根據(jù)以上流程進行開發(fā)。 Bootloader的總體設計 階段設計在前面的章節(jié)中,已經(jīng)介紹過bootloader的啟動可以是分階段的。在設計時,我們將bootloader分為兩個階段:階段1和階段2。分為兩個階段的原因是因為:(1)基于編程語言的考慮。階段1主要用匯編語言,它主要進行與CPU核以及存儲設備密切相關的處理工作,進行一些必要的初始化工作,是一些依賴于CPU體系結構的代碼,為了增加效率以及因為涉及到協(xié)處理器的設置,只能用匯編編寫,這部分直接在FLASH中執(zhí)行;階段2用一般的C語言,來實現(xiàn)一般的流程以及對板級的一些驅(qū)動支持,這部分會被拷貝到RAM中執(zhí)行。(2)代碼具有更好的可讀性與移植性:若對于相同的CPU以及存儲設備,要增加外設支持,階段1的代碼可以維護不變,只對階段2的代碼進行修改;若要支持不同的CPU,則基礎代碼只需在階段1中修改。 地址規(guī)劃設計當bootloader階段設計好之后,需要考慮的是鏡像存儲的地址分配:總鏡像保存在什么地方,階段2對應的鏡像會被拷貝到什么地方;內(nèi)核鏡像原先存放在什么地方,bootloader會把它又重新加載到什么地方;如何進行準確的地址規(guī)劃以保證沒有相互沖突等等,這些都是本節(jié)需要考慮的范疇。對于本課題的硬件系統(tǒng),外接2M的FLASH,映射到物理地址的0x00000000處;對于64M的SDRAM,則對應S3C2440A的SDRAM BANK0,映射到0x3000000處。S3C2440AL系統(tǒng)復位后,從物理地址的0x00000000開始執(zhí)行第一段代碼,這個地址是由 CPU制造商預先安排的。而我們基于S3C2440A構建的系統(tǒng)將固態(tài)存儲設備FLASH映射到這個地址上。當Bootloader放到FLASH的起始處后,系統(tǒng)加電或者復位后,CPU將首先執(zhí)行bootloader程序。本文所使用的內(nèi)核鏡像以及根文件系統(tǒng)鏡像都被加載到SDRAM中運行,這樣做是因為基于運行速度的考慮,盡管在嵌入式系統(tǒng)中內(nèi)核鏡像與根文件系統(tǒng)鏡像也可以直接在ROM或FLASH這樣的固態(tài)存儲設備中直接運行。所以bootloader在啟動時以及加載內(nèi)核時通常要考慮這一點。下圖為具體的存儲布局圖: Uboot存儲映射圖 模式設計對于普通用戶來說只需要bootloader的啟動加載模式,但是對于開發(fā)者來說,則需要下載模式,因為他們需要時時刻刻地進行一些鏡像的更新。為了在兩者之間做到兼顧,本課題既支持啟動加載模式,也支持下載模式,具體思路為:在bootloader做完一些硬件初始化工作后,而在加載內(nèi)核鏡像之前,先在一定的時間內(nèi)等待有沒有用戶有鍵盤輸入,如果沒有,則為啟動加載模式,直接加載內(nèi)核鏡像進行啟動;如果有,則進入命令行格式,這時開發(fā)者就可以根據(jù)自己的需要以及bootloader的支持情況,做一些其他的工作。模式的轉換設計主要在階段2中實現(xiàn)。綜合起來,整個bootloader的實現(xiàn)流程可以如下圖所示: stage1 圖 stage2Flash啟動過程中的函數(shù)調(diào)用流程: 圖 Bootloader的具體實現(xiàn) 從本節(jié)開始介紹本課題的bootloader的具體代碼實現(xiàn)。 階段1的代碼實現(xiàn)。(1)定義CPU工作模式為管理模式,工作狀態(tài)為ARM狀態(tài)并且關閉普通中斷(IRQ)和快速中斷(FIQ)。mrs r0,cpsr bic r0,r0,0x1f orr r0,r0,0xd3 msr cpsr,r0 (2)通過宏定義方式定義各寄存器。if defined(CONFIG_S3C2400) define pWTCON 0x15300000 define INTMSK 0x14400008 /* InteruptController base addresses */ define CLKDIVN 0x14800014 /* clock divisor register */elif defined(CONFIG_S3C2410) define pWTCON 0x53000000 define INTMOD 0X4A000004 define INTMSK 0x4A000008 /* InteruptController base addresses */ define INTSUBMSK 0x4A00001C define CLKDIVN 0x4C000014 /* clock divisor register */endif(3)關閉watchdog定時器,清中斷位。if defined(CONFIG_S3C2440) ldr r0, =pWTCON mov r1, 0x0 str r1, [r0] mov r1, 0xffffffff ldr r0, =INTMSK str r1, [r0]mov r0, 0 mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */ (4)關閉MMU,內(nèi)部指令/數(shù)據(jù)cache以及寫緩沖區(qū),ARM體系bootloader中都無需MMU的功能,所有的地址都直接使用物理地址;cache也都關閉,原因可參看上一章相關內(nèi)容 。mrc p15, 0, r0, c1, c0, 0 bic r0, r0, 0x00002300 bic r0, r0, 0x00000087 orr r0, r0, 0x00000002 orr r0, r0, 0x00001000 mcr p1
點擊復制文檔內(nèi)容
試題試卷相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1