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


史海拾趣
|
我现在在做魅族M8的蓝牙开发程序,对于配对想通过自己的程序实现,其中需要用到BthGetPINRequest等函数。这些函数在bt_api.h中是存在的,但是编译的时候不能通过,查阅MSDN需要加入btdrt.lib。但是SDK中并没有提供。而且我在网上搜不到。不知道我应 ...… 查看全部问答> |
|
我使用的是smdk 6410 三星的开发板 + wince R2,BSP也是三星直接提供的,现在我要将我的屏幕旋转90,我的做法是 直接修改注册表的[HKEY_LOCAL_MACHINE\"System\"GDI\"Rotation],修改\"Angle\"=dword:5A, 这样修改之 ...… 查看全部问答> |
|
我是新手,以下代码是三星K9F5608的读芯片ID代码,和芯片手册上的时序如何对应上,希望大侠们多多指点,小弟不盛感激! /*============================================================================= //参 数: unsigned int id 送出NandFlash I ...… 查看全部问答> |
|
最近公司有个项目要搞,正好拿luminary练一下手。看到了DK-LM3S9B96开发板这个板子不错,功能很强大。唯一不足的是没有485输出。可能是我从参加工作到目前搞的产品有关,几乎是每个板子都需要485接口的。而且我感觉,在实际工作中,各种工控产品, ...… 查看全部问答> |
|
有谁做过用G2553或者其他430系列,通过74HC595,来驱动8个LED么?希望能指导一下,最近在写这个程序,但是,没法让LED灯亮,找不到问题的原因。贴上595的代码,高手帮忙看看对么这样写。 void writ_595(uchar dat) { uchar i; &nbs ...… 查看全部问答> |
|
元芳:大人!大人醒醒! 狄:元芳……我怎么会在这?(从一堆仪器和电路板中爬起) 元芳:大人昨夜三更就从寝室来到工作室……接通了所有仪器和单板…… 狄:(看着地上一团团的草纸画满了各种符号)唔……看来又夜游了…… 元芳:大人,昨天 ...… 查看全部问答> |
|
一个项目外包,使用fpga或cpld进行温度控制要求控制精度0.1~0.2度 RT FPGA通过rs232接受主控CPU设定的指定温度,并返回实时温度。 1,使用热敏电阻传感,加热使用的是2cmX5cm的铝片(24v,1A) 2,控制温度范围20°~100° 3,温度浮动范围正负0.5度(最多不能超过1度) 4,一分钟内将铝片加热到指定温度,且整 ...… 查看全部问答> |
|
不知道为什么度娘里找不到powerjack的信息,中文名字是叫电源插口吗?我想问一下,它的三个管脚都应该接什么? 为什么电路图里会这么画?都接地了,还怎么给电源?(= =b) … 查看全部问答> |




