引用 ARM开发,对entry point的含义

发布者:数字梦行最新更新时间:2016-07-20 来源: eefocus关键字:ARM开发  entry  point 手机看文章 扫描二维码
随时随地手机看文章

 

从事了这么久的ARM开发,对entry point的含义一知半解,今日再次拿出一本写得还算不错的ARM教材来翻,书中这一段仅仅是把英文手册单纯翻译成中文,并没有讲到真正的实质。不是ARM公司手册写得不详细,而是多数中文教材的编写采用的方式是: english--华文 mapping,但英文手册是有系列组织的suite,而书本往往翻译自系列中的一篇,容易使得读者管中窥豹。

摘要:ARM link的时候-entry ‘行标号’ 选项用于指定程序的入口地址,其实就是ICE把代码load完之后自动跳入的地址,最后的程序中这个工作是由bootloader来完成的,当然bootloader也可以跳到别的入口地址去。几乎所有的成品ARM芯片都有内置的bootloader,因此开发者看到的程序入口点就是entry point。对于FPGA上的ARM系统调试,ARM复位后跳转到一个固化地址,就需要自己写bootloader代码并通过scatter加载到rom中(我们的EAS片上存储器包括rom在内全部用FPGA的ram实现,tape out的时候bootloader代码会被固化到chip的rom中)

1.entry point在编译中的指定

   看了make file,entry point的指定是在link的时候用命令行参数的方式告诉编译器的,

armlink ... -Entry reset_handler

如果采用RVDS或ADS,工程属性中有entry point选项可供设置,但最终还是作为参数传递给armlink。

这样, 在连接ICE并loadimage之后,ICE会通过JTAG把代码映像搬移到内存中,然后把当前PC指针指向reset_handler,但引出了一个问题:在最终的产品中不存在ICE和JTAG,ARM上电复位后跳向固化的复位地址,如0xFFFF0000,那么由谁来让PC指针指向我们指定的entry point呢?答案是:由bootloader代码来完成,进一步引出2个问题:1,谁来生成bootloader?2,怎么把bootloader定位到硬件复位地址?

2. 自己写bootloader并通过scatter文件将之定位到硬件复位地址。

或许某些开发工具会自动的为我们生成bootloader,这里介绍的是自力更生的方法。

首先介绍bootloader,这里仅实现中断向跳转:

        AREA Vect, CODE, READONLY     ;编译器伪指令,scatter根据这些属性来组织程序映像

        ENTRY   ;这个entry和本文中的entry point是没有关系的,它表示的是汇编程序代码部分的开始

        LDR PC, Reset_Addr

        LDR PC, Undefined_Addr

        LDR PC, SWI_Addr

        LDR PC, Prefetch_Addr

        LDR PC, Abort_Addr

        NOP                         ; Reserved vector

        LDR PC, IRQ_Addr

        LDR PC, FIQ_Addr

        Reset_Addr          DCD Reset_Handler

        Undefined_Addr   DCD Undefined_Handler

        SWI_Addr             DCD SWI_Handler

        Prefetch_Addr      DCD Prefetch_Handler

        Abort_Addr           DCD Abort_Handler

        IRQ_Addr            DCD IRQ_Handler

        FIQ_Addr            DCD FIQ_Handler

Reset_Handler

        LDR PC, =0x00000000;

然后是scatter文件:

ROM_LOAD 0x00000000

{

    ROM_EXEC 0x00000000             

    {

          * (InRoot$$Sections); 实现搬移scatter的代码,编译器自动生成

         *(+RO) ; 除了bootloader的所有代码段放这里

    }

    D-TCM 0x00400000 0x003FFFFF

    {

        * (+RW,+ZI);这里放所有的RW段(char ch=4;)和ZI段(char ch; ch会被初始化零)。

    }

}

ROM2 0xFFFF0000

{

   BOOTLOAD 0xFFFF0000

    {

        bootloader.o(+RO) ;bootloader的程序段放这里

    }

}

scatter也是在link的时候通过参数‘-scatter 文件名’传递的。

3.总结

在以上条件下,比较使用ICE和最终产品中的启动顺序:当使用ICE调试时,ICE读入映像文件,找到其中的scatter信息,通过JTAG把代码段和数据段放到指定的位置,然后把PC设为-entry所指定的标号,这就是为什么当我们loadimage之后看到的是在entry point中指定的行号所在的源代码。当脱离ICE运行时,ARM上电后跳转到硬件复位地址0xFFF0000 (ROM),我们已事先在那里烧入了我们的bootloader,bootloder从外设中读入加载映像文件(如片外nand,I2C,UART等)并放入scatter的加载域中(0x00000000),然后跳转到0x000000,由于我们已在scatter中将InRoot$$Sections定位在那里,所以它被执行,它负责把映像文件从加载域搬移到执行域中,然后跳转到__main,__main是arm编译器自动生成的,它负责清零ZI段和初始化C库,最后__main跳向C代码的入口main()


关键字:ARM开发  entry  point 引用地址:引用 ARM开发,对entry point的含义

上一篇:s3c2410物理地址和虚拟地址空间
下一篇:ARM的存储器映射与存储器重映射

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

德州仪器面向ARM® Cortex™-M4微控制器开发推出Tiva™ C 系列TM4C123G USB+CAN开发套件
日前,德州仪器 (TI)宣布推出新款 Tiva™ C 系列 TM4C123G USB+CAN 开发套件,从而让采用 Tiva™ C 系列微控制器 (MCU) 进行的设计工作变得前所未有的简便。该套件采用的 Tiva C 系列 MCU 具有集成了连接与传感器聚合解决方案的 ARM® Cortex™- M4 内核,可帮助设计人员便捷地评估 Tiva C 系列 TM4C123x MCU 的外设和输入/输出 (I/O),充分满足工业、运动控制、自动化、人机接口 (HMI)、照明和消费类电子产品等众多应用的需求。 该开发套件包含了设计人员开展全面系统评估所需的一切组件,如主机和设备 USB 线缆、板载调试接口,以及支持低功耗休眠模式
[嵌入式]
如何选择合适的ARM开发
  第一,要注意硬件资源(包括:CPU、ROM、RAM、各种接口)其中NanD Flash、Nor Flash和SDRAM的大小一定要满足自已开发的要求。   第二,软件资源对一个初学者来说一定注意的,因为不同的开发板提供的软件资源差别很大。一般必须包括:嵌入式开发操作系统以及相应的驱动(最好有源代码)、开发工具、调试工具、学习用源代码、底板原理图、有相应的技术支持等等。   第三,供应商的技术支持力度如何。嵌入式行业是客户研发和售后支持具有高度互动性的行业,供应商的技术支持有时就会成为用户产品上市的关键因素,在供应商的技术支持能力方面,一定要慎重考察。   考察一个供应商能不能提供充分的支持,一个有效的方法就是
[单片机]
微软或开发基于Arm的SoC,用于Surface和服务器
  苹果的 M1 芯片可能已经成为许多准备投资,并开始开发自己基于 ARM 芯片的科技公司的动力。 根据最新报告,微软就是其中之一,其定制的芯片将在公司未来的 Surface 系列及其服务器中找到。   微软的许多Surface型号均采用英特尔处理器,只有Surface Laptop 3与AMD芯片一起推出。但是,微软确实转用了与高通公司合作的名为SQ1的基于ARM的芯片,以引入便携式和高端的Surface Pro X。遗憾的是,Surface Pro X上乏善可陈的软件优化意味着它只是另一款价格过高,但表现不佳的产品。   据彭博社报道,微软正在为Surface部门开发单独的芯片,但是目前尚不清楚它的名字,以及该公司将与
[嵌入式]
内核裁剪,arm_mini2440开发板中增删自己写的驱动
1、把编译通过的buttons1711.c文件放入 /home/mini2440/linux-2.6.32.2/drivers/char/ 2、修改Makefile 在同一个目录下(第1步中放入.c文件的目录/home/mini2440/linux-2.6.32.2/drivers/char/)打开Makefile: (法1)(不推荐):在obj-y += 后面加上buttons1711.o 然后重新在/home/mini2440/linux-2.6.32.2/中make zImage,再把生成的zImage烧写进开发板就可以用了。 (法2)在底下添加(可找原来类似的位置) obj-$(CONFIG_
[单片机]
2018 Arm人工智能开发者全球峰会召开在即
首届Arm 人工智能 开发者 全球峰会将于2018年9月14日在上海举办。此次开发者峰会由上海市徐汇区政府指导,Arm中国及Arm人工智能生态联盟AIEC联合主办,旨在通过汇聚Arm AI生态圈的主流框架(TensorFlow / Caffe / MxNet / Paddle / ArmNN / Tengine等)、芯片和算法领域的顶尖精英,与AI开发者就如何共同创新核心AI技术、建设开放AI生态、推动前端和边缘AI的普及和普惠进行现场互动和深度交流。   开发者是AI领域最重要的群体和最主要的推动力量。此次开发者峰会将汇聚600位全球人工智能领域技术精英、超过140家AIEC联盟成员与中国重量级的人工智能公司,既有来自Googl
[嵌入式]
ARM_linux开发环境建立(2)
安装FTP、SSH、NFS服务器软件 apt-get. 安装VMwareTools以及实现本机和虚拟机文件共享 安裝VMWare Tools有几个优点: .Host OS与Guest OS传档时,只需鼠标拖曳即可。鼠标在Host OS与Guest OS切换时,不需再按Ctrl + Alt。 此次安装VMWare Tools的目的是第三点:为了本机和centos切换时,可以直接切换,不需再按ctrl+Alt,这样会觉得方便许多哦,呵呵, 这里介绍的是主机是windows,客户机是linux下的设置。   1,安装vmtools for linux   选择vmware workstation 程序菜单中vm install
[单片机]
Qemu搭建ARM vexpress开发环境(一)
嵌入式开发离不开硬件设备比如:开发板、外设等,但是如果只是想学习研究Linux内核,想学习Linux内核的架构,工作模式,需要修改一些代码,重新编译并烧写到开发板中进行验证,这样未必有些复杂。然而Qemu的使用可以避免频繁在开发板上烧写版本,如果进行与外设无关,仅仅是内核方面的调试,Qemu模拟ARM开发环境完全可以完美地胜任。 下面简单介绍下我的Qemu开发环境搭建过程: 1. 环境 由于在开发过程中也需要Windows系统下的一些工具,于是放弃了以前搭建的双系统环境而采用在PC的Windows10系统下通过VirtualBox虚拟机安装Xubuntu系统进行开发,避免了双系统开发中需要不断重启切换PC系统的问题。Xub
[单片机]
用NFS服务开发ARM Linux程序的方法介绍
NFS简单配置 NFS是实现两机间进行通讯访问的一种简单方法。在嵌入式Linux实验过程中,我们通过配置NFS实现PC机和实验箱ARM-Linux平台之间的访问。 原理是在PC机Linux中开启LFS服务,设置一个共享目录(这里是/arm2410),所有的源码编辑改动都可以在PC机中进行方便的修改,在ARM-Linux实验环境中,将PC-Linux的/arm2410目录远程mount到本地,实现两机间的同步读写访问,这样程序就可以方便的在ARM-Linux中运行测试。简单说来,目的就是设置一个共享目录,在PC-Linux中进行编辑,在ARM-Linux中进行运行调试。 配置过程:(默认NFS都已经进行安装,PC-Linux的
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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