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