历史上的今天
返回首页

历史上的今天

今天是:2025年01月16日(星期四)

正在发生

2020年01月16日 | ARM启动代码原理和分析

2020-01-16 来源:eefocus

内容大纲


内容关键字:


映像文件


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都可能存在于系统中,所以将不同功能的代码定位于特定的位置上会大大提高系统的运行效率。



推荐阅读

史海拾趣

科达嘉CODACA公司的发展小趣事

科达嘉电子创建于2001年,起初是一家专注于功率电感、共模电感的研发、生产与销售的初创企业。在电子行业激烈的市场竞争中,科达嘉凭借对电感技术的深入研究和不断创新,逐渐赢得了市场的认可。公司团队经过近二十年的努力,从一个小型创业公司发展成为拥有多家子公司的集团企业,员工总数超过900人,厂房总面积达到30000平方米。

Frolyt Condensers & Elements GmbH公司的发展小趣事

随着业务规模的扩大,Frolyt Condensers & Elements GmbH意识到全球化布局的重要性。2010年,公司制定了全球化战略,首先在亚洲设立了生产基地,以利用当地丰富的资源和低廉的劳动力成本。随后几年间,Frolyt还通过一系列并购活动,收购了多家在特定市场具有影响力的电容器制造商,进一步巩固了其在全球市场的地位。这些并购不仅扩大了Frolyt的产品线,还增强了其技术研发能力和市场服务能力。

Densei-Lambda (TDK)公司的发展小趣事

在电子元件领域,Frolyt Condensers & Elements GmbH起初是一家专注于电容器研发的小型制造商。2005年,公司研发团队成功开发出一种新型高性能铝电解电容器,该电容器在耐高温、长寿命和低阻抗方面表现出色,迅速吸引了市场的关注。通过持续的技术创新和严格的品质控制,Frolyt的电容器产品在汽车电子、通信设备等多个领域得到广泛应用,公司因此实现了市场份额的快速增长。

AAT [Advanced Analog Technology, Inc.]公司的发展小趣事

随着业务规模的扩大,Frolyt Condensers & Elements GmbH意识到全球化布局的重要性。2010年,公司制定了全球化战略,首先在亚洲设立了生产基地,以利用当地丰富的资源和低廉的劳动力成本。随后几年间,Frolyt还通过一系列并购活动,收购了多家在特定市场具有影响力的电容器制造商,进一步巩固了其在全球市场的地位。这些并购不仅扩大了Frolyt的产品线,还增强了其技术研发能力和市场服务能力。

ddm hopt + schuler GmbH & Co KG公司的发展小趣事

为了保持技术领先地位和市场竞争力,ddm hopt + schuler公司积极开展跨界合作和创新发展。公司与多所知名高校和研究机构建立了产学研合作关系,共同研发新技术、新产品。此外,公司还积极参与国际交流与合作,引进国际先进技术和管理经验。这些合作不仅为公司带来了更多的创新资源,也提升了公司的国际影响力和竞争力。

Holt Integrated Circuits公司的发展小趣事

Holt在支持ARINC 429标准方面展现出了强大的实力。其ARINC 429 IC产品系列从简单的线路接收器到集成RAM的完整协议解决方案,覆盖了业内最广泛的范围。这些产品设计精巧,能够在单个3.3V电源上运行,显著降低了系统复杂性和板空间,为航空电子系统带来了更高的效率和可靠性。Holt的这一系列创新产品,不仅满足了航空制造商的严格需求,也推动了ARINC 429标准在全球范围内的广泛应用。

问答坊 | AI 解惑

btdrt.lib问题

我现在在做魅族M8的蓝牙开发程序,对于配对想通过自己的程序实现,其中需要用到BthGetPINRequest等函数。这些函数在bt_api.h中是存在的,但是编译的时候不能通过,查阅MSDN需要加入btdrt.lib。但是SDK中并没有提供。而且我在网上搜不到。不知道我应 ...…

查看全部问答>

smdk6410开发板屏幕旋转?

我使用的是smdk 6410 三星的开发板 + wince R2,BSP也是三星直接提供的,现在我要将我的屏幕旋转90,我的做法是 直接修改注册表的[HKEY_LOCAL_MACHINE\"System\"GDI\"Rotation],修改\"Angle\"=dword:5A,        这样修改之 ...…

查看全部问答>

三星K9F5608时序

我是新手,以下代码是三星K9F5608的读芯片ID代码,和芯片手册上的时序如何对应上,希望大侠们多多指点,小弟不盛感激! /*============================================================================= //参 数: unsigned int id 送出NandFlash I ...…

查看全部问答>

求救:用TPS62040做C5502内核1.26V电源,遇到问题

LZ是怎么解决的?能不能说出来共享一下? 我用的是LDO,输出电压可调的那种。…

查看全部问答>

关于DK-LM3Sxxxx开发板的一点建议

最近公司有个项目要搞,正好拿luminary练一下手。看到了DK-LM3S9B96开发板这个板子不错,功能很强大。唯一不足的是没有485输出。可能是我从参加工作到目前搞的产品有关,几乎是每个板子都需要485接口的。而且我感觉,在实际工作中,各种工控产品, ...…

查看全部问答>

430G2553通过74HC595驱动8个LED

有谁做过用G2553或者其他430系列,通过74HC595,来驱动8个LED么?希望能指导一下,最近在写这个程序,但是,没法让LED灯亮,找不到问题的原因。贴上595的代码,高手帮忙看看对么这样写。 void writ_595(uchar dat) {   uchar i; &nbs ...…

查看全部问答>

元芳,你对此电路有何看法?(2)

元芳:大人!大人醒醒! 狄:元芳……我怎么会在这?(从一堆仪器和电路板中爬起) 元芳:大人昨夜三更就从寝室来到工作室……接通了所有仪器和单板…… 狄:(看着地上一团团的草纸画满了各种符号)唔……看来又夜游了…… 元芳:大人,昨天 ...…

查看全部问答>

一个项目外包,使用fpga或cpld进行温度控制要求控制精度0.1~0.2度

RT FPGA通过rs232接受主控CPU设定的指定温度,并返回实时温度。 1,使用热敏电阻传感,加热使用的是2cmX5cm的铝片(24v,1A) 2,控制温度范围20°~100° 3,温度浮动范围正负0.5度(最多不能超过1度) 4,一分钟内将铝片加热到指定温度,且整 ...…

查看全部问答>

急招电子标签工程师

急招电子标签工程师 具体要求: 1、大专以上学历,有两年相关工作经验 1、了解RFID产业方向,熟悉RFID市场及产品厂商; 2、 至少两年以上电子标签行业工作经验,对RFID/DR/RF/EAS產品有清晰理解; 3、掌握RFID系统原理、结构及技术标准等相关 ...…

查看全部问答>

关于powerjack的问题

不知道为什么度娘里找不到powerjack的信息,中文名字是叫电源插口吗?我想问一下,它的三个管脚都应该接什么? 为什么电路图里会这么画?都接地了,还怎么给电源?(= =b) …

查看全部问答>