ARM启动代码原理和分析

2020-01-16来源: eefocus关键字:ARM  启动代码  存储器

内容大纲


内容关键字:


映像文件


RO代码段

ZI未初始化数据段

RW数据段

Load Address加载地址

Execu o n A ddress 执行地址

Stack Pointer栈空间指针


Boot相关硬件


• Flash Rom(可作为bootrom的存储器)

Boot相关硬件

Boot相关硬件


Boot的主要功能


• 建立异常向量表

• 初始化中断

• 初始化硬件设备

• 初始化应用程序执行环境


• 跳转到主应用程序

初始化硬件

• 软件的运行离不开硬件,boot必须对硬件进

行初始化。硬件的初始化主要通过配置特

殊控制寄存器来完成,包括下面几部分:

关闭开门狗

屏蔽所有的中断

初始化PLL和时钟。

初始化储存系统


初始化应用程序的执行环境


• Elf文件的类型:可执行文件、可重定位文

件、共享库object(又叫做共享库)文件。

• Elf文件的功能:

1、用作链接器的输入生成可执行的映像文件

2、可装载到内存里运行,完成特定功能的文件。


elf文件的物理结构


• Elf文件头

• Sec o n: .text .d ata .b ss. sym t ab

• Program header

• 可重定位文件与可执行文件的区别:

区与段的概念

program header

可执行映像文件的逻辑结构


由几个可重定位的目标文件的相同属性区组

成了可执行映像的段,那么段有组成什么?

在逻辑结构里,段组成了更大的组织:域


装载域和运行域

• 域又组成什么呢?当然就是组成可执行文件了,一个映像文件可以包含一到多个域。与看起来有些多余,实际上更为重要的是用域来描述输出区运行前和运行时在存储系统上的位置。所以,域分为装载域和运行域。装载域描述运行前输出段在rom/ram中的分布状态,运行域描述运行时输出段在rom/ram中的分布状态

• 大多数情况下,映像文件在执行前把它装载到rom中,而当运行时域里 的有些输出段必须复制到ram中,程序才能正常运行,所以,在装载和运行时,有些段处在不同的位置(地址空间)。

• 由图可以看出,映像文件zi段在装载域里是不存在的,在运行域里才建立的;映像文件在运行时,第一件工作就是把rw输出段复制到ram里的正确位置,第二件工作就是建立zi输出段并初始化为0。这就是应用程序执行环境的初始化。然而,在运行时,代码和数据分布到了不同的地址空间,形成了三个运行域:ro运行域、rw运行域、zi运行域。那么这个过程是如何来实现的?


RO

RO

Base|; Base of ROM code


RO

RO

Limit| ; End of ROM code

(=start of ROM data)


RW

RW

Base| ; Base of RAM to

ini a l ise


ZI

ZI

Base| ; Base and limit of area


ZI

ZI

Limit| ;


分散装载技术


• 分散装载技术可以把用户的应用程序分割成多个RO运行域和RW运行域,并且给他们指定不同的地址,这在嵌入式系统的实际应用中有很多的好处。在一个嵌入式系统中,fl a sh 、16位ram、32位ram都可能存在于系统中,所以将不同功能的代码定位于特定的位置上会大大提高系统的运行效率。



关键字:ARM  启动代码  存储器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic485856.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:Arm中main()和_main()的区别
下一篇:ARM在进入main函数之前会做什么

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ARM嵌入式学习--OK6410裸板程序--1.GPIO控制LED
;  mov pc, lrMakefile: 1 led.bin: start.o 2         arm-linux-ld -Ttext 0x50008000 -o led.elf $^ 3         arm-linux-objcopy -O binary led.elf led.bin 4         arm-linux-objdump -D led.elf > led_elf.dis 5 %.o
发表于 2020-01-09
ARM嵌入式学习--OK6410裸板程序--1.GPIO控制LED
移植mysql到arm平台
最近需要将一个程序移植到arm平台上,程序调用了MySQL数据库,所以就牵扯到将MySQL数据库移植到ARM平台上面,所以在网上大量查阅资料。在baidu文库发现了一篇文档,是wlzxlc上传的文档名称为:《编译ARM平台的QtEmbedded的MySQL插件和移植MySQL》。下面说明里面介绍到:ARM平台下的QtEmbedded所需mysql插件,及MySQL的移植。我的整个移植过程参考了这篇文档,但是遇到了很多的问题,所以又上网搜寻其它资料。现在我已经移植成功,回头看这篇文档,就发现里面有很多疏漏甚至是错误。这些东西如果不详细注明出来,更多的新手绝对还会重蹈我的覆辙,所以在这里将mysql 的arm+linux移植
发表于 2020-01-09
ARM Linux.2.6.34内核移植
ARM-LINUX-GCC版本4.3.2.以安装在/usr/local/arm/4.3.2下.第一步:修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改ARCH ? =arm  CROSS_COMPILE ?=/usr/local/arm/4.3.2/bin/arm-linux-第二步:修改平台输入时钟修改平台的时钟频率,修改内核源码“arch/arm/mach-s3c2440/mach-smdk2440.c”把时钟初始化中(S3C24XX_init_clocks(16934400 ))的16934400 改为12000000,因为我们的开发板上为12M第三步:修改
发表于 2020-01-09
编译基于ARM LINUX的驱动模块的Makefile
KERNELDIR = /home/wenhao/platform/linux-2.6.34PWD := $(shell pwd)CROSS_COMPILE = /usr/local/arm/4.3.2/bin/arm-linux-CC    = $(CROSS_COMPILE)gccobj-m := key.o modules:    $(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean:    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c
发表于 2020-01-09
GNU ARM汇编快速入门
以前用ARM的IDE工具,使用的是ARM标准的汇编语言。现在要使用GNU的工具,当然要了解一点GNU ARM汇编的不同之处。其实非常的简单,浏览一下文档然后再看看程序就完全可以搞定了,或者你硬着头皮看GNU ARM的汇编程序,用不了多少时间你就就可以无师自通了。ARM汇编语言源程序语句 ,一般由指令、伪操作、宏指令和伪指令作成。ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令。 目前常用的ARM编译环境有2种:ARMASM: ARM公司的IDE中使用了CodeWarrior的编译器,绝大多数windows下的开发者都在使用这一环境,完全按照ARM的规定;GNU ARM ASM:GNU工具的ARM版本
发表于 2020-01-09
交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
自己之前一直没搞清楚这两个交叉编译器到底有什么问题,特意google一番,总结如下,希望能帮到道上和我有同样困惑的兄弟…..一. 什么是ABI和EABI1) ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口.ABI涵盖了各种细节,如:数据类型的大小、布局和对齐;调用约定(控制着函数的参数如何传送以及如何接受返回值),例如,是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数参数;通过栈传递的第一个函数参数是最
发表于 2020-01-08
小广播
何立民专栏 单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved