ARM bootloader程序的理解

发布者:ByteChaser最新更新时间:2016-07-28 来源: eefocus关键字:ARM  bootloader程序 手机看文章 扫描二维码
随时随地手机看文章
       作为一个嵌入式工程师,如果不能写bootloader程序,那就不能成为一个真正的嵌入式工程师.以前做linux driver,常对bootloader程序是一知半解,其实要写好bootloader程序还得好好去研读一下处理器 architecture.

      ARM 处理器是一种很热门的嵌入式处理器,现在绝大部分的嵌入式产品都用到了ARM处理器,其低廉的价格和丰富的性能都受到的消费者的青睐.下面针对ARM处理器来具体谈一下ARM bootloader程序.

      首先简单的了解一下ARM architecture.ARM主要由ARM内核单元,vector interface ,coprocessor,两种cache(instruction and data),两种TCM(instruction and data), MMU, power management等. cache是为了平衡数据之间的速度而使用的,而TCM是为了存储一些频繁使用的数据,如中断向量等,MMU主要处理虚拟地址到物理地址的转换,起到了对数据的保护作用,用在操作系统的体系中,很显然,bootloader程序就是要为后来的程序提供一个良好的运行环境,这里对ARM architecture的几个组成单元进行必要的配置.

      综上所述,ARM bootloader程序主要完成下面几个功能:

      1)初始化栈.

      2)中断向量表的复制.

      3)TCM 和cache的配置,如果有操作系统的话,就应该设置MMU.

      4)建立一个程序执行文境.(具体一点,就是根据image文件的属性来处理image段的数据).

      5)对内存如mddr,sram进行简单的测试.

      6)需要设置一些外围设备,一般来说需要配置一下串口.

 一、初始化栈:

       应该对irq,firq,svc的栈进行指定,分别操作这几中模式的寄存器。如对irq模式.

       mov  r0 ,  #0x12; irq mode

       msr  CPSR , r0; set irq mode

       ldr   sp,  =0x800;  irq steak address

二、中断向量表的复制:

       Boot_Def
      ldr PC,Arm_Addr_Ini        ;0x00
      ldr PC,Arm_Addr_Und        ;0x04
      ldr PC,Arm_Addr_Swi        ;0x08
      ldr PC,Arm_Addr_Pre        ;0x0C
      ldr PC,Arm_Addr_Abt        ;0x10
      nop            ;0x14
      ldr PC,Arm_Addr_Irq        ;0x18
      ldr PC,Arm_Addr_Fiq        ;0x1C

      Arm_Addr_Ini DCD bootstrap_entry + 0x00   ;0x20
      Arm_Addr_Und DCD undefined_exception_handler  ;0x24
      Arm_Addr_Swi DCD software_interrupt_handler  ;0x28
      Arm_Addr_Pre DCD prefetch_exception_handler  ;0x2C
      Arm_Addr_Abt DCD abort_exception_handler   ;0x30
      Arm_Addr_Irq DCD irq_interrupt_handler   ;0x34
      Arm_Addr_Fiq DCD fiq_interrupt_handler   ;0x38

      DCD 0x12345678  ;   0x3c

      ...

      ldr r0,=Boot_Def
      ldr r1, =0x0 ;address 0x0
      mov r2,#0x3C
      add r2, r2, r1

0
      cmp r1, r2
      bge %b1
      ldrcc r3,[r0],#4
      strcc r3,[r1],#4
      b %B0
1

三、TCM的配置

      TCM和cache是有区别的,虽然都是为了加快速度,但是TCM必须给它指定地址,TCM和cache的用途也不样,TCM保存常用到的数据如中断向量表和realtime数据,而cache只是为了加快处理器和外设之间的数据处理。

      
      ldr r0, =0x0;
      mrc p15, 0, r1, c9, c1, 1;读coprocessor instruction tcm region register.
      orr r0, r0, r1;
      mov r1, #1
      orr r1, r1, r0;instruction tcm bit_o 置1,enable insturction tcm.
      mcr p15,0,r1,c9,c1,1;写入

     其它的cache配置也类似,主要读懂ARM document.

四、建立一个程序运行文境:

      image(bin文件)包括俩部分:RO and RW,RO部分一般我们在加载前后的位置都不用变化,但是RW必须在加载后把他放到RAM中执行,所以RW部分我们把它映射到RAM地址中。

      IMPORT |Image$$RO$$Base| ;image RO 开始地址
      IMPORT |Image$$RO$$Limit|
      IMPORT |Image$$RO$$Length|
      IMPORT |Image$$RW$$Base|
      IMPORT |Image$$RW$$Limit|
      IMPORT |Image$$RW$$Length|
      IMPORT |Image$$ZI$$Base|
      IMPORT |Image$$ZI$$Limit|
      IMPORT |Image$$ZI$$Length|

      ldr r0,=|Image$$RO$$Limit|
      ldr r1,=|Image$$RW$$Base|
      ldr r2,=|Image$$RW$$Limit|
 
3
     cmp r1,r2
     bge %B3
     ldrcc r3,[r0],#4;从RO段的结束地址+1load rw段数据
     strcc r3,[r1],#4;重新写入到rw段
     b %B4
4

     ldr r0,=|Image$$ZI$$Base|;处理ZI段数据
     ldr r1,=|Image$$ZI$$Length|
     add r1, r1, r0
     ldr r1, =0X2000
     ldr r2,=0
5
     cmp r0, r1
     bge %B6
     strcc r2,[r0],#4;初始化ZI段数据为0
     b %B5
6

五、对内存进行测试:

      由于系统中有各种各样的内存,可以对内存进行简单测试。

六、UART的配置:

      UART在嵌入式系统中很重要,虽然它很简单,但是在早期开发中,UART是必须的设备之一。UART作为下一篇中将进一步详细讨论。

关键字:ARM  bootloader程序 引用地址:ARM bootloader程序的理解

上一篇:ARM: Code,RO-data,RW-data,ZI-data 意义
下一篇:arm和armel的差异

推荐阅读最新更新时间:2024-03-16 15:02

ARM-Linux驱动--DM9000网卡驱动分析(三)
ARM-Linux驱动--DM9000网卡驱动分析(二)硬件平台:FL2440(s3c2440) 内核版本:2.6.35 主机平台:Ubuntu11.04 内核版本:2.6.39 交叉编译器:arm-linuc-gcc4.3.2 原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/6615027 本文接上文 ARM-Linux驱动--DM9000网卡驱动分析(一) ARM-Linux驱动--DM9000网卡驱动分析(二) 下面开始看网卡设备的打开、关闭函数和操作函数 view plainprint? static const struct net_
[单片机]
<font color='red'>ARM</font>-Linux驱动--DM9000网卡驱动分析(三)
ARM和FPGA搭建神经网络处理器通信方案
  引言   人工神经网络在很多领域得到了很好的应用,尤其是具有分布存储、并行处理、自学习、自组织以及非线性映射等特点的网络应用更加广泛。嵌入式便携设备也越来越多地得到应用,多数是基于ARM内核及现场可编程门阵列FPGA的嵌入式应用。某人工神经网络的FPGA处理器能够对数据进行运算处理,为了实现集数据通信、操作控制和数据处理于一体的便携式神经网络处理器,需要设计一种基于嵌入式ARM内核及现场可编程门阵列FPGA的主从结构处理系统满足要求。   1人工神经网络处理器   1.1人工神经网络模型   人工神经网络是基于模仿大脑功能而建立的一种信息处理系统。它实际上是由大量的、很简单的处理单元(或称神经元),通过广泛的互相连接而形成
[单片机]
用<font color='red'>ARM</font>和FPGA搭建神经网络处理器通信方案
ARM的AREA指令的使用
AREA指令指示汇编程序汇编新的代码节或数据节。节是不可分的已命名独立代码或数据块,它们由链接器处理。有关详细信息,请参阅ELF节和AREA指令。 语法 AREA sectionname{,ATtr}{,ATtr}... 其中: sectionname 是将要指定的节名。 可以为节选择任何名称。但是,以数字开始的名称必须包含在竖杠内,否则会产生一个缺失节名错误。 例如,|1_DATaArea|。有些名称是习惯性的名称。 例如,|.text| 用于表示由 C 编译器生成的代码节,或以某种方式与 C 库关联的代码节。 ATtr 是一个或多个用逗号分隔的节属性。有效的属性有: ALIGN=expression_r 缺省情况下,EL
[单片机]
基于ARM平台的GPRS CQT测试系统的设计
  GPRS作为中国移动据数业务的承载网,支持多种数据业务,涉及不同的网元,任何一个网元出故障都会直接影响数据业务的正常使用,保证用户端到端使用就显得非常重要。   GPRSDT/CQT测试模拟终端用户的使用情况,将数据业务的使用过程用时间图、事件列表、层三信令等工具来表述,有助于工程师对测试中遇到的问题进行准确定位与分析。以往CQT测试主要是以人工测试的方式进行,先制定测试计划交由测试人员到指定地点进行测试,测试工具一般为信号测试专用手机,这种测试所得的数据都是由测试人员手工记录而来,再进行统计整理、制作分析报告,存在很大的主观性,缺乏真实性和准确性。目前移动通信中基站架设的特点是数量大、分布广,不可能对大量的基站和其覆盖的范围
[测试测量]
基于<font color='red'>ARM</font>平台的GPRS CQT测试系统的设计
基于ARM嵌入式系统的SPI驱动程序设计
嵌入式系统已被广泛应用于国防电子、数字家庭、工业自动化、汽车电子等多种领域。在嵌入式开发过程中,许多系统通常使用串口驱动来满足通信要求,但在实际应用中,使用SPI通信方式会更加高效和快捷。SPI接口是一种高速、高效的串行接口技术,因而SPI设备在数据通信应用中十分方便。本文基于ARM9芯片的S3C2440和Linux操作系统,设计了一种SPI驱动程序,该驱动程序功能可靠灵活、易于移植,可应用于多种嵌入式平台,实现arm与设备之间的通信。 1 硬件说明 1.1 S3C2440开发平台 采用三星公司的SoC芯片S3C2440 作为核心处理器,主频为400 MHz,并与64 MB SDRAM和64 MB NAND Flash共同组成
[单片机]
基于ARM的煤矿瓦斯涌出量预测系统的设计
  随着微电子技术和计算机技术的发展,嵌入式技术得到了广阔的发展空间。特别是进入20世纪90年代以来,嵌入式技术的发展和普及更为引人注目,已经成为现代工业控制、通信类和消费类产品发展的方向。在煤炭开采工业中,瓦斯是危害矿井安全生产的重要因素之一。目前的煤矿瓦斯预测系统大多是将影响瓦斯涌出的物理量如浓度、湿度、风速等发送至井上的中心管理系统中进行分析预测,预测信息难以及时反应到井下作业人员及系统,从而导致不能在第一时间作出反应。基于嵌入式的瓦斯涌出量预测系统便于在井下不同的开采区安装,对当前开采区传感器数据进行处理分析,并预测出该开采区的瓦斯涌出量信息,各个开采区之间不但彼此可以相互通信,而且可以与上位机进行实时交互。 1 总体设计
[测试测量]
基于<font color='red'>ARM</font>的煤矿瓦斯涌出量预测系统的设计
摆脱高通/ARM束缚 三星紧随苹果自研GPU
今年苹果发布会上,除了发布具有重大突破的iPhone X外,还有一大亮点是它们自研的A11芯片,这颗芯片首次集成了苹果自研GPU。继苹果之后,三星也要加入自研GPU行列了。三星招聘信息显示,它们正在寻找杰出的软件和硬件人才。同时三星透露它们位于奥斯汀和圣何塞的GPU团队正在开发定制GPU,将部署在三星移动产品中。 从上面不难看出,三星未来芯片有望集成自研GPU并应用在自家手机上,这对于供应商来说,又少了一个铁饭碗。 我们知道目前三星主要采购的是ARM Mali,三星目前的旗舰芯片Exynos 8895 GPU便是20核心的Mali-G71。 对于三星来说,自研GPU就像苹果那样,可以让自己的核心供应链更加可控。自研不仅是
[半导体设计/制造]
聚焦AI,探析边缘智能新动向,研华AI on Arm合作伙伴会议开启报名!
研华Arm人工智能合作伙伴会议将于3月28日于上海古井假日酒店召开,此次会议将汇集芯片厂家和软件生态合作伙伴,共同探讨Arm平台的AI技术创新及服务升级,开拓边缘智能在多行业全方位的应用机会。 议程一览: 上午主会场:边缘运算未来趋势 迎接新兴产业应用新时代 下午分会场1:硬件设计构建AI可靠基础 下午分会场2:软件服务助力AI应用落地 演讲嘉宾: 本次活动邀请到来自高通,瑞芯微,Hailo,瞰瞰智能,微软,麒麟,海华为各位带来关于生态伙伴AI技术的新成果分享和落地应用经验。 活动亮点: 与业界专家面对面交流,了解Arm平台AI技术的新动态。 分享研华硬件可靠性设计经验,探索工控行业品质标兵。
[工业控制]
聚焦AI,探析边缘智能新动向,研华AI on <font color='red'>Arm</font>合作伙伴会议开启报名!
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved