基于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

提交评论