【正文】
種啟動方式,下面的系統(tǒng)狀態(tài)必須得到滿足:★ CPU寄存器的設(shè)置:R0=0; R1=機器類型; R2=啟動參數(shù)標記列表在RAM中的起始地址; 這三個寄存器的設(shè)置是在最后啟動內(nèi)核時通過啟動參數(shù)來傳遞完成的。S3C2440A采用了ARM920T的內(nèi)核。S3C2440A微處理器體系結(jié)構(gòu)特征如下:★ 為手持設(shè)備和通用嵌入式應(yīng)用提供片上系統(tǒng)解決方案。 (3)編譯環(huán)境本文所使用的編譯工具均為GNU的編譯工具。階段1主要用匯編語言,它主要進行與CPU核以及存儲設(shè)備密切相關(guān)的處理工作,進行一些必要的初始化工作,是一些依賴于CPU體系結(jié)構(gòu)的代碼,為了增加效率以及因為涉及到協(xié)處理器的設(shè)置,只能用匯編編寫,這部分直接在FLASH中執(zhí)行;階段2用一般的C語言,來實現(xiàn)一般的流程以及對板級的一些驅(qū)動支持,這部分會被拷貝到RAM中執(zhí)行。所以bootloader在啟動時以及加載內(nèi)核時通常要考慮這一點。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定時器,清中斷位。(1) 在階段1的基礎(chǔ)上進一步初始化:CPU的初始化,中斷異常初始化,環(huán)境初始化,波特率初始化,顯示初始化等。if (CONFIG_COMMANDS amp。endif /* CONFIG_LCD */(5) 條件編譯初始化網(wǎng)絡(luò)設(shè)備。 s = (i 0) ? tmp : NULL。 for (reg = 0。) { main_loop ()。現(xiàn)在的bootloader,更多的像一個小系統(tǒng)。參考文獻[1] 譚浩強. C語言程序設(shè)計[M].北京:清華大學出版社, 2007[2] 張茹,孫松林,[M].北京:北京郵電大學出版社, 2006[3] [M].北京:北京航空航天大學出版社, 2010[4] 李善平,劉文峰,[M].北京:清華大學出版社, ~139[5] [M].北京:北京航空航天大學出版社, ~87[6] 王黎明,陳雙嬌,閆曉玲,史毓達,[M].北京:北京航空航天大學出版社, ~453[7] 聶俊航,邱 [J].微處理機,~84[8] amp。Bootloader是因嵌入式系統(tǒng)的蓬勃發(fā)展而應(yīng)運而生的。 /* get the devices list going. */ (6) 進入命令循環(huán),通過調(diào)用“main_loop()”函數(shù),接受用戶命令,做出相應(yīng)的響應(yīng)。 }ifdef CONFIG_HAS_ETH1 i = getenv_r (eth1addr, tmp, sizeof (tmp))。 char tmp[64]。 size = lcd_setmem (addr)。 memset ((void *) mem_malloc_start, 0, mem_malloc_end mem_malloc_start)。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。(1)定義CPU工作模式為管理模式,工作狀態(tài)為ARM狀態(tài)并且關(guān)閉普通中斷(IRQ)和快速中斷(FIQ)。當Bootloader放到FLASH的起始處后,系統(tǒng)加電或者復位后,CPU將首先執(zhí)行bootloader程序。在設(shè)計時,我們將bootloader分為兩個階段:階段1和階段2。 軟件環(huán)境以及軟件開發(fā)工具 (1)操作系統(tǒng) 論文中操作系統(tǒng)使用的是開放源碼的Linux操作系統(tǒng),因此最終bootloader的實現(xiàn)是針對Linux操作系統(tǒng)的,加載的kernel鏡像也是Linux kernel生成。每個都是由具有8字長的行組成。論文中,其具體的實現(xiàn)與驗證都需要具體的硬件環(huán)境,硬件平臺是圍繞S3C2440A搭建起來的。(2)初始化串口(可選,推薦):bootloader應(yīng)該要初始化以及使能至少一個串口,通過它與控制臺聯(lián)系進行一些debug的工作;甚至與PC通信。但是隨著嵌入式系統(tǒng)的發(fā)展,bootloader已經(jīng)逐漸在基本功能的基礎(chǔ)上,進行了擴展,bootloader可以更多地增加對具體系統(tǒng)的板級支持,即增加一些硬件模塊功能上的使用支持,以方便開發(fā)人員進行開發(fā)和調(diào)試。但從最終用戶的角度看,bootloader的作用永遠就是用來加載操作系統(tǒng),而并不存在所謂的啟動加載模式與下載工作模式的區(qū)別。通過這段小程序,我們可以初始化必要的硬件設(shè)備,創(chuàng)建內(nèi)核需要的一些信息并將這些信息通過相關(guān)機制傳遞給內(nèi)核,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),最終調(diào)用操作系統(tǒng)內(nèi)核,真正起到引導和加載內(nèi)核的作用。4 Bootloader的概念本文在實現(xiàn)以及驗證上都以開放源代碼的linux為操作系統(tǒng),因此,在眾多舉例以及圖表描述中,多以linux系統(tǒng)為例子。下面是ARM體系中各異常中斷向量的描述表: 異常中斷向量表 ARM處理器對異常中斷的響應(yīng)過程如下: ★ 保存處理器當前狀態(tài)、中斷屏蔽位以及各條件標志位?!? 通過跳轉(zhuǎn)指令,程序可以跳轉(zhuǎn)到特定的地址標號處執(zhí)行,或者跳轉(zhuǎn)到特定的子程序處執(zhí)行。★ S 位20,表示結(jié)果是否影響狀態(tài)寄存器標志位:1影響,0不影響。因此ARM指令中還包括了多條協(xié)處理器指令,使用多達16個協(xié)處理器,允許將其他處理器通過協(xié)處理器接口進行緊耦合;ARM還包括幾種內(nèi)存管理單元的變種,包括簡單的內(nèi)存保護到復雜的頁面層次。這種存儲器格式如下圖所示: bigendian格式的存儲系統(tǒng)在littleendian格式中,地址為A的字單元包括字節(jié)單元A、A+A+A+3,其中字節(jié)單元由高位到低位字節(jié)順序為A+A+A+A;地址為A的字單元包括半字單元A、A+2,其中半字單元由高位到低位字節(jié)順序為A+A;地址為A的半字單元包括字節(jié)單元A、A+1,其中字節(jié)單元由高位到低位字節(jié)順序為A+A。該地址空間的大小232個8位字節(jié)。大部分的ARM指令可以根據(jù)CPSR中的這些條件標志位來選擇性地執(zhí)行。CPSR(當前程序狀態(tài)寄存器)可以在任何處理器模式下被訪問。R13寄存器對應(yīng)6個不同的物理寄存器,即除了前面提過的用戶模式與系統(tǒng)模式共用一個寄存器外,其它模式都有相應(yīng)的物理寄存器;一般地,R13寄存器在ARM中通常用作棧指針,在ARM指令中這只是一種習慣的用法,并沒有任何指令強制性的使用R13作為棧指針。在每一種異常模式中都有一組寄存器,供相應(yīng)的異常處理程序使用,這樣就可以保證在進入異常模式時,用戶模式下的寄存器(保證了程序運行狀態(tài))不被破壞。 ARM處理器模式ARM處理器共有7種運行模式,:表格 ARM處理器模式 除了用戶模式之外的其他6種處理器模式稱為特權(quán)模式(Privileged Modes)。ARM為提高運算速度,則采用兩位乘法的方法,根據(jù)乘數(shù)的2位來實現(xiàn)“加一移位”運算 ;ARM高速乘法器采用328位的結(jié)構(gòu),這樣,可以降低集成度(其相應(yīng)芯片面積不到并行乘法器的1/3)。3 ARM體系結(jié)構(gòu)介紹在介紹具體的ARM Bootloader的實現(xiàn)之前,首先介紹一下ARM的體系結(jié)構(gòu),因為Bootloader是與處理器芯片緊密相連的?!?大量使用寄存器,數(shù)據(jù)處理指令只對寄存器進行操作,只有加載/ 存儲指令可以訪問存儲器,以提高指令的執(zhí)行效率?! ntel StrongARM處理器是便攜式通訊產(chǎn)品和消費類電子產(chǎn)品的理想選擇,已成功應(yīng)用于多家公司的掌上電腦系列產(chǎn)品(6)Intel Xscale微處理器系列有關(guān)Intel Xscale微處理器系列,會在后面相關(guān)篇幅中進行介紹?!?支持VFP10浮點處理協(xié)處理器?!?主頻最高可達300MIPS?! RM9E系列微處理器的主要特點如下:★ 支持DSP指令集,適合于需要高速數(shù)字信號處理的場合?!?支持32位的高速AMBA總線接口。 ★ 主頻最高可達130MIPS,高速的運算處理能力能勝任絕大多數(shù)的復雜應(yīng)用。ARM體系有變種,也就是說有些版本具備特定功能,在各個版本的版本號上可以體現(xiàn)出來,說明如下:T: 支持16位壓縮指令集Thumb; D: 支持片上Debug;M:內(nèi)嵌硬件乘法器(Multiplier),增加用于長乘法操作的指令; I: 嵌入式ICE,支持片上斷點和調(diào)試點;E:增強型DSP指令;ARM構(gòu)架誕生至今,已經(jīng)產(chǎn)生了多次變革,每一次都帶來性能上的極大飛躍,其過程包括:★ V1構(gòu)架(ARM1) 基本的數(shù)據(jù)處理指令(無乘法) 字節(jié)、半字和字的Load/Store指令轉(zhuǎn)移指令,包括子程序的調(diào)用和鏈接指令軟件中斷指令尋址空間64MB★ V2構(gòu)架(ARM2,ARM3)增加乘法和乘法指令增加支持協(xié)處理器的操作增加快速中斷模式增加SWP/SWPB的存儲器和寄存器交換指令★ V3構(gòu)架(ARM6)增加了MRS/MSR指令,訪問新增的CPSR/SPSR寄存器增加了異常處理返回尋址空間4GB★ V4構(gòu)架(ARM7, ARM9)增加符號化和非符號化半字及符號化字節(jié)的存取指令增加16位的Thumb指令完善軟件中斷SWI指令★ V5構(gòu)架(ARM10)帶有鏈接和交換的轉(zhuǎn)移BLX指令計數(shù)前導零CLZ指令BRK中斷指令增加了一些信號處理的指令★ V6構(gòu)架增加了SIMD功能擴展,為包括音頻/視頻處理在內(nèi)的應(yīng)用系統(tǒng)提供優(yōu)化功能接下來就簡要介紹一下各主要系列處理器的特點。特別是,隨著近年來,微處理器結(jié)構(gòu)由RISC(精簡指令集)全面取代傳統(tǒng)的CISC(復雜指令集),因為ARM是著名的RISC的擁護者。如何實現(xiàn)bootloader的基本功能,如何針對基于ARM體系的微處理器來實現(xiàn)bootloader,就成為本課題的一個基本論題。世界上幾乎所有的主要半導體廠商都生產(chǎn)基于ARM體系結(jié)構(gòu)的通用芯片,如TI,Motorola,Intel,NS,Ateml,Philips,SAMSUNG等。通常,應(yīng)用系統(tǒng)對嵌入式軟件的基本要求是體積小、執(zhí)行速度快、具有較好的可剪裁性和可移植性。 ARM。本文所要研究的就是基于ARM嵌入式系統(tǒng)bootloader的設(shè)計與實現(xiàn)。作者簽名: 日 期: 摘 要隨著移動設(shè)備的流行和發(fā)展,嵌入式系統(tǒng)已經(jīng)成為一個熱點。作 者 簽 名: 日 期: 指導教師簽名: 日 期: 使用授權(quán)說明本人完全了解 大學關(guān)于收集、保存、使用畢業(yè)設(shè)計(論文)的規(guī)定,即:按照學校要求提交畢業(yè)設(shè)計(論文)的印刷本和電子版本;學校有權(quán)保存畢業(yè)設(shè)計(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務(wù);學??梢圆捎糜坝?、縮印、數(shù)字化或其它復制手段保存論文;在不以贏利為目的前提下,學??梢怨颊撐牡牟糠只蛉績?nèi)容。究其原因,它的以精簡指令構(gòu)架為主又不放棄與復雜指令平衡的設(shè)計,使得在獲得高性能的同時又能做到低功耗。s reduced instruction set architecture and plex instructions not to give a balanced design, makes do while achieving high performance with low power consumption. This paper is to study the ARMbased embedded system design and implementation of is the implementation of embedded systems in the period before the operating system kernel code, and its basic function is to load the kernel image. In practice platform, the subject of hardware S3C2440A used as the ARM9 family processor, w