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

正文內(nèi)容

系統(tǒng)引導(dǎo)程序的設(shè)計(jì)與實(shí)現(xiàn)(文件)

2024-08-20 04:08 上一頁面

下一頁面
 

【正文】 寄存器的設(shè)置是在最后啟動內(nèi)核時(shí)通過啟動參數(shù)來傳遞完成的?!? Bootloader啟動內(nèi)核鏡像的方法是通過跳轉(zhuǎn)語句直接跳轉(zhuǎn)至內(nèi)核鏡像的第一句指令語句。S3C2440A采用了ARM920T的內(nèi)核。ARM920T實(shí)現(xiàn)了MMU,AMBA BUS和Harvard高速緩沖體系結(jié)構(gòu)構(gòu)。S3C2440A微處理器體系結(jié)構(gòu)特征如下:★ 為手持設(shè)備和通用嵌入式應(yīng)用提供片上系統(tǒng)解決方案?!? 采用ARM920T CPU內(nèi)核支持ARM調(diào)試體系結(jié)構(gòu)。 (3)編譯環(huán)境本文所使用的編譯工具均為GNU的編譯工具。在后面篇幅介紹具體bootloader的實(shí)現(xiàn)時(shí),基本就根據(jù)以上流程進(jìn)行開發(fā)。階段1主要用匯編語言,它主要進(jìn)行與CPU核以及存儲設(shè)備密切相關(guān)的處理工作,進(jìn)行一些必要的初始化工作,是一些依賴于CPU體系結(jié)構(gòu)的代碼,為了增加效率以及因?yàn)樯婕暗絽f(xié)處理器的設(shè)置,只能用匯編編寫,這部分直接在FLASH中執(zhí)行;階段2用一般的C語言,來實(shí)現(xiàn)一般的流程以及對板級的一些驅(qū)動支持,這部分會被拷貝到RAM中執(zhí)行。S3C2440AL系統(tǒng)復(fù)位后,從物理地址的0x00000000開始執(zhí)行第一段代碼,這個(gè)地址是由 CPU制造商預(yù)先安排的。所以bootloader在啟動時(shí)以及加載內(nèi)核時(shí)通常要考慮這一點(diǎn)。綜合起來,整個(gè)bootloader的實(shí)現(xiàn)流程可以如下圖所示: stage1 圖 stage2Flash啟動過程中的函數(shù)調(diào)用流程: 圖 Bootloader的具體實(shí)現(xiàn) 從本節(jié)開始介紹本課題的bootloader的具體代碼實(shí)現(xiàn)。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)關(guān)閉watchdog定時(shí)器,清中斷位。lowlevel_init: ldr r0, =SMRDATA ldr r1, _TEXT_BASE sub r0, r0, r1 ldr r1, =BWSCON /* Bus Width Status Controller */ add r2, r0, 13*40: ldr r3, [r0], 4 str r3, [r1], 4 cmp r2, r0 bne 0b /* everything is fine now */ mov pc, lr .ltorg (7)設(shè)置堆棧。(1) 在階段1的基礎(chǔ)上進(jìn)一步初始化:CPU的初始化,中斷異常初始化,環(huán)境初始化,波特率初始化,顯示初始化等。 mem_malloc_end = dest_addr + CFG_MALLOC_LEN。if (CONFIG_COMMANDS amp。ifdef CONFIG_LCD ifndef PAGE_SIZE define PAGE_SIZE 4096 endif /* * reserve memory for LCD display (always full pages) */ /* bss_end is defined in the boardspecific linker script */ addr = (_bss_end + (PAGE_SIZE 1)) amp。endif /* CONFIG_LCD */(5) 條件編譯初始化網(wǎng)絡(luò)設(shè)備。 ulong reg。 s = (i 0) ? tmp : NULL。e, 16) : 0。 for (reg = 0。 if (s) s = (*e) ? e + 1 : e。) { main_loop ()。由于bootloader是與具體的硬件系統(tǒng)緊密相關(guān)的,所以在具體的實(shí)現(xiàn)上,主要以ARM9 核心的S3C2440AL處理器構(gòu)建的硬件系統(tǒng)為硬件平臺,以Linux為操作系統(tǒng)來闡明一個(gè)bootloader的設(shè)計(jì)過程?,F(xiàn)在的bootloader,更多的像一個(gè)小系統(tǒng)。由于時(shí)間的限制,實(shí)現(xiàn)的bootloader,擴(kuò)展功能僅局限于上面所提及的。L inux嵌入式系統(tǒng)BootLoader的研究與設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用與軟件,~99 致 謝四年的讀書生活在這個(gè)季節(jié)即將劃上一個(gè)句號,對于我的人生卻只是一個(gè)逗號,我將面對又一次征程的開始。您治學(xué)嚴(yán)謹(jǐn),學(xué)識淵博,思想深邃,視野雄闊,為我營造了一種良好的精。 偉人、名人為我所崇拜,可是我更急切地要把我的敬意和贊美獻(xiàn)給一位平凡的人—我的導(dǎo)師。參考文獻(xiàn)[1] 譚浩強(qiáng). C語言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社, 2007[2] 張茹,孫松林,[M].北京:北京郵電大學(xué)出版社, 2006[3] [M].北京:北京航空航天大學(xué)出版社, 2010[4] 李善平,劉文峰,[M].北京:清華大學(xué)出版社, ~139[5] [M].北京:北京航空航天大學(xué)出版社, ~87[6] 王黎明,陳雙嬌,閆曉玲,史毓達(dá),[M].北京:北京航空航天大學(xué)出版社, ~453[7] 聶俊航,邱 [J].微處理機(jī),~84[8] amp。除了bootloader基本的加載內(nèi)核鏡像的功能,還增加了對串口(使用XMODEM協(xié)議)的支持。Bootloader是因嵌入式系統(tǒng)的蓬勃發(fā)展而應(yīng)運(yùn)而生的。(2) 配置bootloader,進(jìn)入到剛才解壓的目錄中,然后輸入“make menuconfig”命令:(3) 進(jìn)入到bootloader配置界面,使用默認(rèn)配置即可,然后選擇“Exit”選項(xiàng),回車?yán)^續(xù):(4) 然后出現(xiàn)是否保存配置選項(xiàng),選擇“Yes”選項(xiàng)繼續(xù):(5) 編譯bootloader,輸入“make zImage”命令,回車后,就會開始編譯了:(6)編譯結(jié)束后,會在“/opt/EmbedSky/bootloader/”目錄下生成一個(gè)BIOS文件,把它拷貝出來,燒寫到目標(biāo)板上就可以用它引導(dǎo)Linux系統(tǒng)了。 /* get the devices list going. */ (6) 進(jìn)入命令循環(huán),通過調(diào)用“main_loop()”函數(shù),接受用戶命令,做出相應(yīng)的響應(yīng)。 ++reg) { gdbdbi_enet1addr[reg] = s ? simple_strtoul (s, amp。 }ifdef CONFIG_HAS_ETH1 i = getenv_r (eth1addr, tmp, sizeof (tmp))。 reg 6。 char tmp[64]。endif /* CONFIG_VFD */ /* IP Address */ gdbdbi_ip_addr = getenv_IPaddr (ipaddr)。 size = lcd_setmem (addr)。 //HJ nand_init()。 memset ((void *) mem_malloc_start, 0, mem_malloc_end mem_malloc_start)。(2) 進(jìn)行內(nèi)存初始分配。relocate: /* relocate UBoot to RAM */ adr r0, _start /* r0 current position of code */ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */ cmp r0, r1 /* don39。mrc p15, 0, r0, c1, c0, 0 bic r0, r0, 0x00002300 bic r0, r0, 0x00000087 orr r0, r0, 0x00000002 orr r0, r0, 0x00001000 mcr p15, 0, r0, c1, c0, 0(5)清空TLB,Caches以及寫緩沖區(qū),當(dāng)系統(tǒng)冷啟動時(shí)所有的保留數(shù)據(jù)都以無效處理,因此都要清空,況且cache都已經(jīng)關(guān)閉。(1)定義CPU工作模式為管理模式,工作狀態(tài)為ARM狀態(tài)并且關(guān)閉普通中斷(IRQ)和快速中斷(FIQ)。為了在兩者之間做到兼顧,本課題既支持啟動加載模式,也支持下載模式,具體思路為:在bootloader做完一些硬件初始化工作后,而在加載內(nèi)核鏡像之前,先在一定的時(shí)間內(nèi)等待有沒有用戶有鍵盤輸入,如果沒有,則為啟動加載模式,直接加載內(nèi)核鏡像進(jìn)行啟動;如果有,則進(jìn)入命令行格式,這時(shí)開發(fā)者就可以根據(jù)自己的需要以及bootloader的支持情況,做一些其他的工作。當(dāng)Bootloader放到FLASH的起始處后,系統(tǒng)加電或者復(fù)位后,CPU將首先執(zhí)行bootloader程序。 地址規(guī)劃設(shè)計(jì)當(dāng)bootloader階段設(shè)計(jì)好之后,需要考慮的是鏡像存儲的地址分配:總鏡像保存在什么地方,階段2對應(yīng)的鏡像會被拷貝到什么地方;內(nèi)核鏡像原先存放在什么地方,bootloader會把它又重新加載到什么地方;如何進(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ā)工具 (1)操作系統(tǒng) 論文中操作系統(tǒng)使用的是開放源碼的Linux操作系統(tǒng),因此最終bootloader的實(shí)現(xiàn)是針對Linux操作系統(tǒng)的,加載的kernel鏡像也是Linux kernel生成?!? 加強(qiáng)的ARM體系結(jié)構(gòu)MMU用于支持WinCE,EPOC 32和Linux。每個(gè)都是由具有8字長的行組成。它采用了新的總線架構(gòu)Advanced Micro controller Bus Architecture (AMBA)。論文中,其具體的實(shí)現(xiàn)與驗(yàn)證都需要具體的硬件環(huán)境,硬件平臺是圍繞S3C2440A搭建起來的?!? Cache和MMU的設(shè)置:MMU必須關(guān)閉; 數(shù)據(jù)cache必須關(guān)閉; 指令cache可以關(guān)閉也可以開啟; Bootloader中所有對地址的操作都是使用物理地址,是實(shí)在的實(shí)地址,不存在虛擬地址,因此MMU必須關(guān)閉。(2)初始化串口(可選,推薦):bootloader應(yīng)該要初始化以及使能至少一個(gè)串口,通過它與控制臺聯(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可以更多地增加對具體系統(tǒng)的板級支持,即增加一些硬件模塊功能上的使用支持,以方便開發(fā)人員進(jìn)行開發(fā)和調(diào)試。從主機(jī)下載的文件通常首先被bootloader保存到目標(biāo)機(jī)的RAM中,然后被bootloader寫到目標(biāo)機(jī)上的FLASH類固態(tài)存儲設(shè)備中。但從最終用戶的角度看,bootloader的作用永遠(yuǎn)就是用來加載操作系統(tǒng),而并不存在所謂的啟動加載模式與下載工作模式的區(qū)別。Bootloader的啟動過程可以是單階段的,也可以是多階段的。通過這段小程序,我們可以初始化必要的硬件設(shè)備,創(chuàng)建內(nèi)核需要的一些信息并將這些信息通過相關(guān)機(jī)制傳遞給內(nèi)核,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),最終調(diào)用操作系統(tǒng)內(nèi)核,真正起到引導(dǎo)和加載內(nèi)核的作用。我們熟悉的PC中的引導(dǎo)程序一般由BIOS和位于MBR的OS bootloader(例如LILO或者GRUB)一起組成。 4 Bootloader的概念本文在實(shí)現(xiàn)以及驗(yàn)證上都以開放源代碼的linux為操作系統(tǒng),因此,在眾多舉例以及圖表描述中,多以linux系統(tǒng)為例子?!? 將程序計(jì)數(shù)器值PC設(shè)置成該異常中斷的中斷向量地址,從而跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。下面是ARM體系中各異常中斷向量的描述表: 異常中斷向量表 A
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1