基于S3C2410開發板的BootLoader實現_第1頁
基于S3C2410開發板的BootLoader實現_第2頁
基于S3C2410開發板的BootLoader實現_第3頁
基于S3C2410開發板的BootLoader實現_第4頁
基于S3C2410開發板的BootLoader實現_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.:.;3.3 基于S3C2410開發板的BootLoader實現本節將以實例講述基于S3C2410開發板的BootLoader的詳細實現,主要分兩個方面進展引見,一是引見基于U-Boot的移植,二是引見DIY方式開發BootLoader。要移植或開發BootLoader首先要清楚詳細的硬件系統,在這里就是要了解我們運用的目的板S3C2410開發板。3.3.1 S3C2410開發板引見本書中所設計的開發板相關的實例都是基于S3C2410開發板設計和測試的。S3C2410開發板是非常通用的一款ARM 9開發板,讀者運用任何類型的ARM 9開發板都能參考書中的實例。S3C2410開發板的根本配置如

2、下: CPU采用三星的S3C2410 ARM920T,主頻203MHz。集成有SDRAM內存控制器、NAND Flash控制器、SD卡控制器、USB Host和USB Device控制器、LCD控制器、IIC總線控制器、IIS控制器、SPI接口等多種接口。 存儲器64MB的SDRAM;64MB的NAND Flash注1。* 以太網控制器10MB網口、CS8900Q3、帶聯接和傳輸指示燈。 串行接口系統提供兩個串行收發DB9母口銜接器,上面分別表示COM0、COM1。 USB Host接口兩個USB1.1HOST接口;一個USB 1.1Device接口。 存儲接口一個SD卡接口;一個十針的AD接

3、口;一個IDE接口。 LCD和觸摸屏接口 一個50芯LCD接口引出了LCD控制器和觸摸屏的全部信號。提供TFT真彩LCD的接口,LCD模塊不需求外接電源等,插入該接口直接可以運用。接口另外還帶觸摸屏的接口。 調試及下載接口20針Multi-ICE規范JTAG接口,支持SDT2.51和ADS1.2調試。 音頻接口采用IIS接口芯片UDA1341,一路立體聲音頻輸出接口可接耳機或音箱;支持錄音,開發板自帶主機體話筒可直接錄音,另有一路話筒輸入接口可接麥克風。 電源接口5V電源供電,帶電源開關和指示燈。 操作系統支持Linux 2.4或以上系統,支持Windows CE。開發板上包括1片64M8位數

4、據寬度的NAND FlashK9F1208和2片16M16位數據寬度的SDRAM,地址范圍為 0 x300000000 x34000000。S3C2410將系統的存儲空間分為8組Bank,每組大小為128MB,共1GB。Bank0到Bank5之間的開場地址是固定的,用于ROM 或SRAM;Bank6和Bank7用于ROM、SRAM或SDRAM,這兩個組是可編程且大小一樣的。S3C2410具有3種啟動方式,經過OM1:0管腳進展選擇。 OM1:0 = 00時,處置器經過NAND Flash啟動; OM1:0 = 01時,處置器經過16位寬的ROM啟動; OM1:0 = 10時,處置器經過32位寬

5、的ROM啟動。由于NAND Flash有容量大,比Nor Flash廉價等優勢,所以經常選擇NAND Flash啟動。當從Nor Flash啟動時,要把Flash芯片的首地址映射到0 x00000000位置,系統啟動后,啟動程序本身把本人從Flash搬運到RAM中去。當從NAND Flash啟動時,S3C2410會自動把NAND Flash的前4KB數據搬到本人內部的RAM中去,并把內部RAM的首地址設為0 x00000000,CPU從0 x00000000地址開場運轉。本章選擇的實現啟動方式就是經過NAND Flash啟動。如圖3.1所示為經過Nor Flash啟動和NAND Flash啟動

6、兩種方式存儲空間的分配,圖a是nGCS0片選 的Nor Flash啟動方式存儲分配圖;圖b是NAND Flash啟動方式的存儲分配圖。其中SFR為Special Function Register的縮寫,即特殊功能存放器。3.3.2 U-Boot分析與移植本節以運用非常廣泛的U-Boot為例講述基于S3C2410開發板的BootLoader分析與移植。解壓u-boot-1.1.6.tar.bz2包,查看其目錄構造如下所示:# tree L 1 -d.|- board|- common|- cpu|- disk|- doc|- drivers|- dtt|- examples|- fs|- in

7、clude|- lib_arm|- lib_avr32|- lib_blackfin|- lib_generic|- lib_i386|- lib_m68k|- lib_microblaze|- lib_mips|- lib_nios|- lib_nios2|- lib_ppc|- nand_spl|- net|- post|- rtc- tools26 directories(a) (b)圖3.1 兩種啟動方式內存映射的比較(a) Not using NAND Flash for booting ROM; (b) Using NAND Flash for booting ROM大多數Boot

8、Loader都包含“啟動加載方式和“下載方式,U-Boot作為一款強大的Boot- Loader也支持這兩種任務方式,并且允許用戶在這兩種方式之間切換。同時U-Boot也分為Stage1和Stage2兩個階段,其中依賴于CPU體系構造的代碼通常都放在Stage1里,并且通常用匯編言語實現;Stage2通常用C言語實現,可以實現更復雜的功能,并且有更好的移植性和可讀性。1U-Boot Stage1分析U-Boot的Stage1通常是在start.S文件中實現的,并且都是用匯編言語編寫的。一個可執行性image文件必需有一個入口點,并且只能有一個全局入口點,通常這個入口點的地址放在ROMFlash

9、0 x0位置,因此必需使編譯器知道這個入口地址,該過程通常經過修正銜接器的腳本文件來完成。由于S3C2410開發板與smdk2410開發板的配置接近,所以此處參考smdk2410的U-Boot實現程序。翻開board/smdk2410/ u-boot.lds文件,該腳本文件的內容如下所示:OUTPUT_FORMAT(elf32-littlearm, elf32-littlearm, elf32-littlearm)OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS . = 0 x00000000; . = ALIGN(4); .text : cpu/arm920t/st

10、art.o (.text) *(.text) . = ALIGN(4); .rodata : *(.rodata) . = ALIGN(4); .data : *(.data) . = ALIGN(4); .got : *(.got) . = .; _u_boot_cmd_start = .; .u_boot_cmd : *(.u_boot_cmd) _u_boot_cmd_end = .; . = ALIGN(4); _bss_start = .; .bss : *(.bss) _end = .;其中,ENTRY(_start)在cpu/arm920t/start.S文件定義了入口點,入口地

11、址為0 x00000000。在cpu/arm920t/config.mk文件中定義了代碼區基地址TEXT_BASE = 0 x33F80000。接下來分析U-Boot的Stage1的中心文件start.S。1設置異常向量表ARM處置器普通包括復位、未定義指令、SWI、預取終止、數據終止、IRQ、FIQ等異常,關于ARM處置器這些異常在后面會有專門的引見,其中U-Boot中關于異常向量的定義如下,當發生異常時執行cpu/arm920t/ interrupts.c文件。.globl _start_start: b reset ldr pc, _undefined_instruction ldr p

12、c, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq2設置CPU方式為SVC方式Reset即復位,在系統中經常會用到,該操作是異常處置的第一個操作,其主要目的是設置CPU方式為SVC方式。在此有必要引見一下ARM處置器的7種任務方式。 用戶方式usr ARM處置器正常的程序執行形狀; 快速中斷方式fiq 用于高速數據傳輸或通道處置; 外部中斷方式irq 用于通用的中斷處置; 管理方式svc 操作系統運用的維護方式; 數據訪問終止

13、方式abt 當數據或指令預取終止時進入該方式,可用于虛擬存儲及存儲維護; 系統方式sys 運轉具有特權的操作系統義務; 未定義指令中止方式und 當未定義的指令執行時進入該方式,可用于支持協處置器的軟件仿真。ARM微處置器共有37個32位存放器,其中31個為通用存放器,6個為形狀存放器。但是這些存放器不能被同時訪問,詳細哪些存放器是可編程訪問的,取決于微處置器的任務形狀及詳細的運轉方式。但在任何時候,通用存放器R0R14、程序計數器PC、一個或兩個形狀存放器都是可訪問的。通用存放器包括R0R15,可以分為3類。 未分組存放器R0R7 在一切的運轉方式下,未分組存放器都指向同一個物理存放器,它們

14、未被系統用作特殊的用途。因此,在中斷或異常處置進展運轉方式轉換時,由于不同處置器的運轉方式均運用一樣的物理存放器,能夠會呵斥存放器中數據的破壞,這一點在進展程序設計時應引起留意。 分組存放器R8R14 對于分組存放器,它們每一次所訪問的物理存放器與處置器當前的運轉方式有關。對于R8R12來說,每個存放器對應兩個不同的物理存放器,當運用fiq方式時,訪問存放器R8_fiqR12_fiq;當運用除fiq方式以外的其他方式時,訪問存放器R8_usrR12_usr。對于R13、R14來說,每個存放器對應6個不同的物理存放器,其中的一個是用戶方式與系統方式共用,另外5個物理存放器對應于其他5種不同的運轉

15、方式。 程序計數器PC(R15) 在ARM形狀下,位1:0為0,位31:2用于保管PC;在Thumb形狀下,位0為0,位31:1用于保管PC。雖然可以用作通用存放器,但是有一些指令在運用R15時有一些特殊限制,假設不留意,執行的結果將是不可預料的。在ARM形狀下,PC的0和1位是0,在Thumb形狀下,PC的0位是0。留意,Thumb形狀下的存放器集是ARM形狀下存放器集的一個子集,程序可以直接訪問8個通用存放器R7R0、程序計數器PC、堆棧指針SP、銜接存放器LR和CPSR。同時,在每一種特權方式下都有一組SP、LR和SPSR。設置CPU方式為SVC方式操作的詳細實現代碼如下,其中CPSR是

16、Current Program Status Register的縮寫,即當前程序形狀存放器,存放器 R16 用作CPSR,CPSR可在任何運轉方式下被訪問,它包括條件標志位、中斷制止位、當前處置器方式標志位,以及其他一些相關的控制和形狀位。每一種運轉方式下又都有一個公用的物理形狀存放器,稱為SPSR是Saved Program Status Register的縮寫,即備份程序形狀存放器,當異常發生時,SPSR用于保管CPSR的當前值,從異常退出時那么可由SPSR來恢復CPSR。與CPU相關的存放器設置需求參考S3C2410的用戶手冊來實現。mrs r0,cpsrbic r0,r0,#0 x1forr r0,r0,#0 xd3msr cpsr,r03封鎖看門狗看門狗即watchdog timer,是一個定時器電路,普通有一個輸入叫喂狗,一個輸出到MCUMicro Controller Unit,多點控制單元的RST端復位端。MCU正常任務的時候,每隔一段時間輸出一個信號到喂狗端,給 WDTwatchdog timer的簡寫清零,假設超越規定的時間不喂狗,普通在程序跑飛時WDT 定時超越,就會給出一個復位信號到MCU,然后MCU復位

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論