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运行域。那么这个过程是如何来实现的?

• |Image$$RO$$Base|; Base of ROM code
|Image$$RO$$Limit| ; End of ROM code
(=start of ROM data)
|Image$$RW$$Base| ; Base of RAM to
ini a l ise
|Image$$ZI$$Base| ; Base and limit of area
|Image$$ZI$$Limit| ;

分散装载技术

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



  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值