ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:643KB ,
资源ID:23201866      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23201866.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于MINI2440的Bootloader设计与实现.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于MINI2440的Bootloader设计与实现.docx

1、基于MINI2440的Bootloader设计与实现目 录摘要 1关键词 1Abstract 1Key words 1引言 11 Bootloader的基础知识 11.1什么是Bootloader 11.2为什么需要Bootloader 21.3 Bootloader研究现状 21.4 Bootloader的操作模式 21.5 Bootloader概念的扩展 21.6 ARM Bootloader的共性 21.7 Bootloader的通信设备和协议 22 ARM体系结构 22.1 ARM存储器 32.2ARM工作模式 32.3 ARM寄存器 32.4 ARM体系的异常中断 52.5 ARM指

2、令集 63 Bootloader的设计与实现 63.1 S3C MINI2440的片上资源 63.2实验工具 73.3设计过程 74 实验过程与结果 104.1硬件的链接 104.2 NandFlash的分区 114.3烧写bootloader到NanaFlash 114.4下载内核 114.5下载文件系统 125测试 126总结与展望 13致谢 13参考文献 14基于MINI2440的Bootloader设计与实现网络工程专业学生 李东海指导教师 吴俊华摘要:现在嵌入式系统划为Bootloader、内核、文件系统和用户应用程序四大部分,Bootloader设计是一个重要的环节。引入Bootl

3、oader的目的是为了更好的组织片上资源、初始化硬件和方便加载内核镜像文件,以实现操作系统的启动。本文采用汇编语言和C语言设计Bootloader,实现了禁止关门狗、存储空间分配、中断向量配置和堆栈配置等功能,能够完成硬件的初始化、应用程序的堆栈划分以及加载内核的功能,方便用户程序的增减与移植,在降低应用程序开发难度的同时提高了开发效率。关键词:Bootloader 启动 嵌入式 加载内核Design and Implementation of Bootloader Based on MINI2440Student Majoring in Network Engineering Li Dong

4、haiTutor Wu JunhuaAbstract: The embedded system is divided into four sections, such as bootloader, kernel, file systems and user application program. Bootloader design is an important part. The purpose of introducing the bootloader is to organize chip resources better, initialize hardware and load k

5、ernel image files conveniently when booting the operating system. The bootloader is designed with assembly language and C language, which implement many functions such as prohibition of closed dog, distribution of storage space, configuration of interrupt vectors and stack and etc. The design can im

6、plement the initialization of hardware, partition of stacks in application program and load kernel. It is convenient for user to increase, decrease and transplant programs. The developing efficiency is improved and developing difficulty is reduced.Key words: Bootloader; Boot; Embedded; Load the kern

7、el引言随着IT技术的发展,各种微处理器的功能越来越强大,消费者对嵌入式产品的性能也越来越关注。如何使嵌入式系统具有更好的任务管理、资源管理以及更好的资源分配成为嵌入式产品开发的一大问题,裸板上的应用程序已经不能满足消费者日益增长的性能要求,因此嵌入式系统逐渐分为Bootloader、内核、文件系统和用户应用程序四部分。Bootloader就是在操作系统运行前的启动代码,作为嵌入式硬件和操作系统之间连接的桥梁,成为了嵌入式开发首要面临的问题。1 Bootloader的基础知识 1.1什么是BootloaderBootloader是操作系统启动前执行的程序,有点类似于PC中的BIOS,嵌入式系统

8、通过这段程序来初始化硬件、建立内存空间映射等把系统的软硬件环境带到一个合适的环境。当系统加电或复位时,从指定的地址读取的第一条指令就是Bootloader的指令,通过Bootloader来完成初始化工作。Bootloader的启动过程可以是单阶段的,也可以是多阶段的。通常多阶段的Bootloader能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的Bootloader大多数是两个阶段的启动过程,即启动过程可以分为Stage 1和Stage 2两部分。1.2为什么需要BootloaderCPU刚上电时,会从指定的地址取第一条指令来执行。但此时PLL没有启动,存储空间都还没有驱动,非

9、常低的外部输入晶振频率作为CPU的工作频率,无法确定中断设置、堆栈指针和CPU工作模式等,因此,必须在第一条指令处完成以上的初始化工作,做好加载内核镜像的准备。1.3 Bootloader研究现状Bootloader作为嵌入式系统运行的第一程序,如何为嵌入式产品搭建一个完善的运行环境成为各大IC企业的研究热点。有些Bootloader的功能非常强大,它们能支持多种架构的CPU,移植性非常好。但Bootloader的实现是严重依赖于CPU体系架构的,针对不同CPU编写的汇编部分代码不能移植到其它不同结构的CPU上。现在嵌入式产品日新月异,即使是采用相同架构的CPU,如果采用不同的板级设备也会产生

10、相应的Bootloader,因此构建一个完全通用的Bootloader基本上是不可能的,在资源有限的嵌入式世界里面,追求的是短小精悍中的高性能。因此,Bootloader就像嵌入式产品一样丰富多彩,但由于这部分程序的要求非常高,一般由各大芯片厂商提供。目前著名的Bootloader有:U-BOOT、RedBoot、Vivi、Blob等。1.4 Bootloader的操作模式大多数的Bootloader有启动加载和下载1两种工作模式,启动加载模式也称自主模式,这个启动过程没有用户的介入,Bootloader自动从目标机的某个存储设备上拷贝操作系统到RAM中,产品在发布的时候都是工作在启动加载模式

11、,一般开发人员接触的是下载模式。Bootloader下载到目标板之后,可以选择从串口或者网络等通信手段下载内核和文件系统等,下载过来的文件先保存在RAM中,接着再由Bootloader将其写到固态存储设备上。下载模式一般在安装内核和根文件系统时或者系统更新时使用。 1.5 Bootloader概念的扩展Bootloader最基本的功能是初始化硬件和加载操作系统。随着嵌入式的发展,Bootloader的功能不断的扩展,不断的增加对具体系统的板级支持,更方便开发人员进行开发和调试。不断进行功能扩展的Bootloader已经逐渐成为一个系统级的代码包。1.6 ARM Bootloader的共性虽然B

12、ootloader的设计和实现是根据具体的CPU和硬件设备紧密相关的,但其都是为了引导和加载内核,一般来说对ARM Bootloader的操作具有以下的共性:初始化RAM,因为程序要在RAM上运行,初始化串口,控制台与串口连接能方便的进行Debug工作和通信以及指定内核的启动,正确引导系统启动。无论是RAM 还是FLASH启动,都必须满足一定的系统状态。首先,启动系统内核时传递参数的三个寄存器要设置为R00,R1机器类型,R2启动参数标记列表在RAM中的起始地址。其次,CPU模式设置为SVC模式,关闭中断。最后,必须关闭MMU和数据cache,指令Cache可以关闭也可以开启。其中,中断的实现

13、一般是内核机制或设备驱动管理的范畴,Bootloader没有必要实现中断,另外Bootloader只对物理地址进行操作,因此关闭MMU,镜像数据要完整的写回SDRAM中,为防止脏数据的回写,因此关闭数据Cache。1.7 Bootloader的通信设备和协议在协议2的控制下,两个对等实体间的通信是本层能够向上一层提供服务。最常见的情况就是,目标机上的Bootloader通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发。当然,在串口上也可以采用Xmodem/Ymodem/Zmodem协议以及在以太网上采用TFTP协议3。2 ARM体系结构Bootloader是根据CPU芯片和板级设

14、备来设计的,S3C MINI2440是一款基于ARM920T的开发板。ARM既是一个英国公司的名字,也是一类微处理器的通称,同时是一种技术的名字。ARM体系结包含ARM处理器的存储器、数据类型、工作模式和寄存器等。2.1 ARM存储器在ARM体系结构中,ARM920T有32位的地址线,最大可寻址空间为4GB,数据类型有字、半字和字节三种,每个字单元包含两个半字单元或四个字节单元,每个半字单元包含两个字节单元。在字单元中,有大端格式和小端格式两种,小端格式是指字数据的高字节存放在高地址,低字节存放在低地址的格式,大端格式是指字数据的高字节存放在低地址,低字节存放在高地址的格式。2.2ARM工作模

15、式ARM处理器有7种工作模式:系统模式、用户模式、快速中断模式、普通中断模式、管理模式、数据访问中止模式、未定义指令中止模式7种工作模式。其中除了用户模式外,其他统称为特权模式,特权模式中除系统模式外,其他统称为异常模式,如图2-1所示。 图 2- 1 ARM处理器的7种工作模式2.3 ARM寄存器ARM处理器7种运行模式的描述如表2-1所示。表 2- 1运行模式处理器模式处理器模式描述用户模式正常程序执行时的工作模式系统模式用于运行特权级的系统任务管理模式一种保护模式,加电、复位、SWI时进入普通中断模式低优先级中断产生时进入,用于普通的中断处理快速中断模式高优先级中断产生时进入,用于高速数

16、据传输或通道处理数据访问中止模式存储异常时进入该模式,用于虚拟存储和存储保护未定义指令中止模式执行位定义指令时进入该模式ARM 处理器有37个32位的寄存器,其中有31个通用寄存器,6个状态寄存器,这些寄存器根据不同的工作模式被分为若干个组,其中15个通用的寄存器为R1-R14和程序计数器在每种工作状态下都可见,状态寄存器有一个或两个可见,如表2-2。表 2- 2 ARM处理器各工作模式下的寄存器FIQUser/SYSIRQSVCUNDABT别名R0a1R1a2R2a3R3a4R4v1R5v2R6v3R7v4R8R8v5R9R9v6R10R10slR11R11fpR12R12ipR13R13R

17、13R13R13R13spR14R14R14R14R14R14lrR15pcCPSRSPSRSPSRSPSRSPSRSPSR由表2-2可知:1) R0-R7是未分组寄存器,所有工作模式下都使用同一个物理寄存器,其中R0-R3常用作子程序调用时参数的传递4。 2) 分组寄存器R8-R12,使用两个不同的物理寄存器,除了快速中断模式使用R8_fiq-R12_fiq外,其它的工作模式都是使用R8_usr-R12_usr。3) 分组寄存器R13-R14,使用6个不同的物理寄存器,除了系统模式和用户模式共用共有一个外,其它5种工作模式都使用自己的对应的寄存器,其中R13常用作堆栈指针SP,R14用作链接

18、寄存器LR。4) 程序器R15又称为PC,ARM采用流水线机制,PC指向的是当前执行指令的下两条指令。由于ARM指令是按字对齐的,所以PC值的第0位和第1位总为0。5) 另外还有两个特殊的寄存器CPSR和SPSP,一个为当前程序状态寄存器,另一个为备份程序状态寄存器,它们都包含了中断禁止位、当前处理器模式标志位和状态位等。其中CPSR可以在任何处理器模式下被访问。除了用户模式和系统模式外,其他工作模式都有自己的SPSR。当特定的异常中断发生时,SPSR将得到CPSR中的内容,当异常中断返回退出时,将用SPSR中保存的值来恢复CPSR。用户模式或者系统模式下访问SPSR,将会产生不可预知的结果。

19、图2-2给出PSR寄存器的相关定义,表2-3给出了特殊位的具体含义,表 2-4给出了标志位的具体含义,ARM指令根据这些条件标志位来选择性地执行。31 30 29 28 27 26 25 8 7 6 5 4 3 2 1 0图 2- 2 SPSR与CPSR的格式表 2- 3 特殊位的含义N负数标志Z结果为0标志C溢出标志V借位标志I为0时IRQ使能F为0时FIQ使能T0为ARM,1为THUMBM4:0 0b10000usr模式M4:0 0b10001fiq模式M4:0 0b10010irq模式M4:0 0b10011svc模式M4:0 0b10111abt模式M4:0 0b11011und模式M

20、4:0 0b11111sys模式表 2- 4 标志含义助字符后缀标 志含 义EQZ置位相等NEZ清零不相等CSC置位无符号数大于或等于CCC清零无符号数小于MIN置位负数PLN清零正数或零VSV置位溢出VCV清零未溢出HIC置位Z清零无符号数大于LSC清零Z置位无符号数小于或等于GEN等于V带符号数大于或等于LTN不等于V带符号数小于GTZ清零带符号数大于LEZ置位带符号数小于或等于AL忽略无条件执行2.4 ARM体系的异常中断在ARM体系中通常用顺序执行、正常跳转和异常跳转3种方式控制程序的执行流程。顺序执行是指程序在执行的过程中,遇到一条ARM指令,PC值加4,遇到一条THUMB指令,PC

21、值加2,整个过程都没有发生跳转。正常执行是指程序通过跳转指令,跳到特定标号或者子程序中执行,异常跳转是指有异常中断发生时,系统保存当前状态,跳到相应的异常处理函数去执行,当异常处理函数处理完成后返回中断发生前的下一条指令继续执行。当正常的程序执行流程发生暂时的停止时称之为异常,例如处理一个外部的中断请求。中断功能能够在当前指令执行结束时响应中断。发生中断时微控制器将CPU寄存器的值压入堆栈保存,进入中断处理函数。在中断处理函数结束时,将保存的值弹出堆栈,继续执行进入中断以前的程序5。ARM处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。ARM体系所支持的异常中断类型和异常向量描述如

22、表2-5所示。表 2- 5异常中断类型和异常向量中断向量偏移地址 异常中断类型 异常中断模式 优先级 0x0000 0000 复位 管理模式 1(最高)0x0000 0004 未定义未定义指令中止模式60x0000 0008 软件中断管理模式60x0000 000C 指令预取中止数据数据中止模式 50x0000 0010 数据访问中止数据访问中止模式 20x0000 0014 保留保留保留0x0000 0018 普通中断请求普通中断模式 40x0000 001C 快速中断请求快速中断模式 3由表2-5可知中断向量表就是各类型中断处理程序的入口地址表6,每种异常中断类型都在中断向量表中占四个字节

23、的空间,这四个字节空间里存放这一条跳转指令,程序通过这个跳转指令跳到相应的异常中断处理函数处执行。一般的中断处理过程为7:1) 关中断,进入不可再次响应的状态,有硬件自动实现。2) 保存断点和现场。3) 判别中断源,转向中断服务程序。4) 开中断,因为接下来就要执行中断服务程序,开中断将允许更高级中断得到响应,实现中断嵌套。5) 执行中断服务程序。6) 退出中断。在退出时,又进入不可中断状态,即关中断,恢复现场,恢复断点,然后开中断,返回原程序执行。ARM处理器对异常中断的响应过程和上述中断过程原理相同,如下:1) 将CPSR的内容复制到相应的SPSR中,保存处理器的当前状态、中断屏蔽位以及各

24、条件标志位等。2) 设置CPSR中相应的位,禁止IRQ中断,当进入FIQ模式时,禁止FIQ模式,根据异常中断的类型,设置CPSR的运行模式位,使处理器进入相应的执行模式。3) 将当前指令的下一条指令的地址存入相应的LR,保证异常中断返回时能接着正确的运行。4) 将相应异常中断向量的地址放入PC,强制程序跳转到相应的异常中断处理函数处执行。2.5 ARM指令集ARM指令集属于RISC指令系统,具有等长的指令。ARM最大的特点之一就是使用大量的寄存器,加之指令少,能充分的利用流水线技术。大多数ARM CORE同时支持ARM指令和Thumb指令,ARM指令每条都是32位,Thumb指令每条都是16位

25、。Thumb指令集的整体执行速度要优于ARM指令集,ARM指令支持多种寻址方式:寄存器寻址、立即数寻址、寄存器间接寻址等。ARM的指令都是条件执行的,根据条件标志位的不同编码来决定指令的执行。条件标志位位于程序代码字节的Cond位,ARM指令的编码格式9如图2-3所示。图 2- 3指令格式描述图3 Bootloader的设计与实现3.1 S3C MINI2440的片上资源CPU主频400MHz,最高533Mhz + SDRAM 64M 32Bit数据总线,时钟频率高达100MHz + 128M Nand Flash + 2M Nor Flash + 3 个串行口 + 1 个2.0mm 间距10

26、 针JTAG 接口 + 4 USER Leds + 12M 无源晶振。图3-1给出了ARM920T 内核结构,图3-2给出了MINI 2440结构。图 3-1 ARM920T CORE图 3-2 S3C2440结构图3.2实验工具硬件:MINI2440学习开发板 + 交叉网线一条 + USB线一条 + JTAG小板一块+串口线一根。软件:ADS1.2 + AXD + dnw + H-JTAG + 超级终端。3.3设计过程3.3.1初始化中断控制器,关闭中断mrs r0,cpsr/读取CPSR中的值到R0中bic r0,r0,#0x1F /对R0的的后五位清零orr r0,r0,#0xD3 /R

27、0异或上0xD3msr cpsr,r0 /将R0的值写回CPSR,禁止IRQ和FIQ 3.3.2 关闭看门狗ldr r0, =0x53000000 /看门狗控制器的地址mov r1, #0x0 /R1写0str r1, r0 /将R1的值写入R0地址处,禁止看门狗3.3.3初始化CPU速度,刚启动时启动时CPU工作在外接晶振12MHz频率下非常低,通过设置PLL来提高频率,使其达到FCLK=400MHz,HCLK=100MHz,PCLK=50MHz。ldr r0, =0x4C000014 /CLKDIVN寄存器的地址mov r1, #0x05 /分频比例FCLK:HCLK:PCLK = 1:4

28、:8str r1, r0 / CLKDIVN分频FCLK:HCLK:PCLK = 1:4:8mrc p15,0,r0,c1,c0,0 orr r0,r0,#0xC0000000 mcr p15,0,r0,c1,c0,0ldr r0, =0x4C000004 /MPLLCON 寄存器ldr r1, =0x0005C011 /(9212)|(14)|(1)str r1, r0 /主频FCLK设置为400 MHz 3.3.4初始化内存mov r1, #0x48000000 /内存控制起始地址add rl r2, mem_cfg_val /内存大小add r3, r1, #521:ldr r4, r2

29、, #4 /读取r2设置值,并让r2自增4str r4, r1, #4 /将r4写入寄r1,并让r1加4cmp r1, r3 / 设置13个寄存器bne 1b /直到操作完成3.3.5定义异常向量表b Reset /发生复位异常跳转向量地址b HandleUndef /未定义指令中止模式跳转向量地址b HandleSWI /SWI指令模式跳转向量地b HandlePrefetchAbort /预取终止异常跳转向量地址b HandleDataAbort /访问终止导异常跳转向量地b HandleNotUsed /保留b HandleIRQ /中断模式跳转向量地址b HandleFIQ /快中断模

30、式跳转向量地址3.3.6设置指令集GBLL THUMBCODE /定义全局逻辑变量 CONFIG = 16 /16位的Thumb指令THUMBCODE SETL TRUE CODE32 /32位的ARM指令 |THUMBCODE SETL FALSE /使用32位的ARM指令集3.3.7关闭MMU、指令/数据高速缓存MMU、ICache、Dcache状态都由CP15协处理器的C1寄存器控制,复位的时候这三者都会自动关闭。3.3.8设置堆栈指针UserStack EQU(_STACK_BASEADDRESS-0x3800)/用户模式的堆栈地址SVCStack EQU (_STACK_BASEADDRESS-0x280

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1