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

正文內(nèi)容

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

2024-08-10 04:08本頁(yè)面
  

【正文】 您治學(xué)嚴(yán)謹(jǐn),學(xué)識(shí)淵博,思想深邃,視野雄闊,為我營(yíng)造了一種良好的精。 偉人、名人為我所崇拜,可是我更急切地要把我的敬意和贊美獻(xiàn)給一位平凡的人—我的導(dǎo)師。L inux嵌入式系統(tǒng)BootLoader的研究與設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用與軟件,~99 致 謝四年的讀書(shū)生活在這個(gè)季節(jié)即將劃上一個(gè)句號(hào),對(duì)于我的人生卻只是一個(gè)逗號(hào),我將面對(duì)又一次征程的開(kāi)始。參考文獻(xiàn)[1] 譚浩強(qiáng). C語(yǔ)言程序設(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。由于時(shí)間的限制,實(shí)現(xiàn)的bootloader,擴(kuò)展功能僅局限于上面所提及的。除了bootloader基本的加載內(nèi)核鏡像的功能,還增加了對(duì)串口(使用XMODEM協(xié)議)的支持?,F(xiàn)在的bootloader,更多的像一個(gè)小系統(tǒng)。Bootloader是因嵌入式系統(tǒng)的蓬勃發(fā)展而應(yīng)運(yùn)而生的。由于bootloader是與具體的硬件系統(tǒng)緊密相關(guān)的,所以在具體的實(shí)現(xiàn)上,主要以ARM9 核心的S3C2440AL處理器構(gòu)建的硬件系統(tǒng)為硬件平臺(tái),以L(fǎng)inux為操作系統(tǒng)來(lái)闡明一個(gè)bootloader的設(shè)計(jì)過(guò)程。(2) 配置bootloader,進(jìn)入到剛才解壓的目錄中,然后輸入“make menuconfig”命令:(3) 進(jìn)入到bootloader配置界面,使用默認(rèn)配置即可,然后選擇“Exit”選項(xiàng),回車(chē)?yán)^續(xù):(4) 然后出現(xiàn)是否保存配置選項(xiàng),選擇“Yes”選項(xiàng)繼續(xù):(5) 編譯bootloader,輸入“make zImage”命令,回車(chē)后,就會(huì)開(kāi)始編譯了:(6)編譯結(jié)束后,會(huì)在“/opt/EmbedSky/bootloader/”目錄下生成一個(gè)BIOS文件,把它拷貝出來(lái),燒寫(xiě)到目標(biāo)板上就可以用它引導(dǎo)Linux系統(tǒng)了。) { main_loop ()。 /* get the devices list going. */ (6) 進(jìn)入命令循環(huán),通過(guò)調(diào)用“main_loop()”函數(shù),接受用戶(hù)命令,做出相應(yīng)的響應(yīng)。 if (s) s = (*e) ? e + 1 : e。 ++reg) { gdbdbi_enet1addr[reg] = s ? simple_strtoul (s, amp。 for (reg = 0。 }ifdef CONFIG_HAS_ETH1 i = getenv_r (eth1addr, tmp, sizeof (tmp))。e, 16) : 0。 reg 6。 s = (i 0) ? tmp : NULL。 char tmp[64]。 ulong reg。endif /* CONFIG_VFD */ /* IP Address */ gdbdbi_ip_addr = getenv_IPaddr (ipaddr)。endif /* CONFIG_LCD */(5) 條件編譯初始化網(wǎng)絡(luò)設(shè)備。 size = lcd_setmem (addr)。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。 //HJ nand_init()。if (CONFIG_COMMANDS amp。 memset ((void *) mem_malloc_start, 0, mem_malloc_end mem_malloc_start)。 mem_malloc_end = dest_addr + CFG_MALLOC_LEN。(2) 進(jìn)行內(nèi)存初始分配。(1) 在階段1的基礎(chǔ)上進(jìn)一步初始化:CPU的初始化,中斷異常初始化,環(huán)境初始化,波特率初始化,顯示初始化等。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。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è)置堆棧。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以及寫(xiě)緩沖區(qū),當(dāng)系統(tǒng)冷啟動(dòng)時(shí)所有的保留數(shù)據(jù)都以無(wú)效處理,因此都要清空,況且cache都已經(jīng)關(guā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í)器,清中斷位。(1)定義CPU工作模式為管理模式,工作狀態(tài)為ARM狀態(tài)并且關(guān)閉普通中斷(IRQ)和快速中斷(FIQ)。綜合起來(lái),整個(gè)bootloader的實(shí)現(xiàn)流程可以如下圖所示: stage1 圖 stage2Flash啟動(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)有用戶(hù)有鍵盤(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)行一些必要的初始化工作,是一些依賴(lài)于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)。它采用了新的總線(xiàn)架構(gòu)Advanced Micro controller Bus Architecture (AMBA)。S3C2440A采用了ARM920T的內(nèi)核。論文中,其具體的實(shí)現(xiàn)與驗(yàn)證都需要具體的硬件環(huán)境,硬件平臺(tái)是圍繞S3C2440A搭建起來(lái)的。★ 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)閉; 指令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)必須得到滿(mǎn)足:★ CPU寄存器的設(shè)置:R0=0; R1=機(jī)器類(lèi)型; 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ì)于A(yíng)RM 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)的共性,而這僅僅局限于理論上。 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ì)向它的中斷用戶(hù)提供一個(gè)簡(jiǎn)單的命令行接口。從主機(jī)下載的文件通常首先被bootloader保存到目標(biāo)機(jī)的RAM中,然后被bootloader寫(xiě)
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1