OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4528|回复: 5

ARM裸机开发,关于链接地址部分有一点疑问

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-7-23
在线时间
2 小时
发表于 2020-7-30 17:54:35 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 atZeal 于 2020-7-30 20:53 编辑

学习完MX6U开发手册中的裸机程序烧写和.imx文件头部分之后,关于芯片上电程序运行和链接地址部分还是有一点不清楚,找了很多帖子,但都感觉没有说得很清楚。这里贴一下自己的理解和疑问并寻求大神的指导这里把我理解的芯片上电加载程序的过程写一下,希望有大神对我里面的疑问做一下解答
1. 芯片复位或者上电,MX6U内部已经是集成有一个ROM和RAM(参考手册8.4.1节)。ROM的起始地址就是0x00000000,一共96KB。iRAM的起始地址是0x00900000,一共128KB。ROM里面保存了一些相关信息和所谓的boot ROM也就是一个上电之后的程序。这个是不是可以类比于PC上的BIOS,也是一个烧写在硬件上的程序。
2. 硬件电路会先完成一些设备初始化比如时钟初始化,然后硬件电路会根据boot Mode寄存器和用户选择的boot device(开发板上是eMMC)这些是通过IO引脚和外部电路决定的。
3. 硬件电路会把ROM中的boot ROM程序拷贝到iRAM的指定部分开始执行(我这样理解是正确的吗?程序是放在RAM上执行的,那么ROM中的程序肯定要拷贝到RAM上,假设这里由硬件完成,此使PC寄存器是不是也要由硬件设置?PC寄存器上电后应该是从0地址执行?)
这里还有另外一个问题,ROM不是一个存储设备吗,为什么参考手册在system boot那一章好像把ROM当成一个程序了?
4. boot ROM会把外部存储设备(eMMC)的前4KB拷贝到iRAM上(此时DDR还没有初始化)然后检查IVT,boot Data和DCD。(在参考手册8.5.3.1节里有说到boot程序会把boot 设备前4KB拷贝到iRAM上面,然后通过IVT的头部0XD1这个标志位找到IVT然后继续检查boot data和DCD)5. 从这里开始我就有点不太明白,DDR需要初始化,所以DCD应该在iRAM上面就已经起作用了(配置DDR和各种寄存器),但是IVT里面保存的几个指针(IVT、boot data、DCD)却都是在DDR上面的实际地址,这里有点晕。因为一开始boot ROM就已经把eMMC前4KB的数据也就刚好是文件头载入到iRAM里面,文件头的各种配置现在就已经可以读取了,为什么文件头里面关于IVT、DCD的地址保存的却是在DDR上面的地址?感觉这些地址没有意义。
6. boot ROM从iRAM上面读取IVT和boot data、DCD之后,是不是回过头把整个load.imx(包括头部4KB)整个再载入内存中?在boot Data里面已经配置程序大小是2MB,所以应该是直接把整个load.imx载入到内存,载入的地址是在链接程序的时候用链接脚本指定的,也就是bin文件的起始地址是0x87800000.由于IVT里面配置好了entry,所以程序计数器PC可以配置成entry的地址开始执行程序。

参考手册8.5.3.1节

参考手册8.5.3.1节



最佳答案

查看完整内容[请看2#楼]

首先你的第3条,BootROM代码是不需要拷贝到iRAM中运行的,因为这个ROM一般是Nor Flash,nor flash是支持XIP(片上运行),他没必要拷贝到iRAM里边去。至于说把ROM当成一个程序,这个本来就没什么问题,ROM里边本来就存放了代码,这只是一种例化的说明而已。 第4条,IVT里边保存的几个指针(地址),这不是DDR的地址,你搞错了,这是外存设备当中的地址(或者是偏移地址),它必须得通过这些地址才能找到load.imx这个文件中不 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2179
金钱
2179
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-7-30 17:54:36 | 显示全部楼层
atZeal 发表于 2020-7-30 20:48
以上就是我的一些理解和疑问,这部分内容应该跟STM32的芯片上电是一样的,但是我以前没有做过STM32和其它嵌 ...

首先你的第3条,BootROM代码是不需要拷贝到iRAM中运行的,因为这个ROM一般是Nor Flash,nor flash是支持XIP(片上运行),他没必要拷贝到iRAM里边去。至于说把ROM当成一个程序,这个本来就没什么问题,ROM里边本来就存放了代码,这只是一种例化的说明而已。

第4条,IVT里边保存的几个指针(地址),这不是DDR的地址,你搞错了,这是外存设备当中的地址(或者是偏移地址),它必须得通过这些地址才能找到load.imx这个文件中不同的部分端存放在哪里? 这个你想一想就明白;你说的DDR实际地址,这个应该是人家手册给你举的例子,假如这个load.imx文件拷贝到DDR之后,它们的一个对应关系。

第6条,至于这个是拷贝整个load.imx 还是 除了IVT头之外的部分, 都是可以的,不过没关系,只要你的u-boot起始地址对着实际的DDR地址即可,这个的话bootROM代码会自己计算。
森罗万象
回复

使用道具 举报

3

主题

187

帖子

0

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
558
金钱
558
注册时间
2019-5-22
在线时间
267 小时
发表于 2020-7-30 20:43:42 | 显示全部楼层
虽然解答不了,还是对你求知的心点赞。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-7-23
在线时间
2 小时
 楼主| 发表于 2020-7-30 20:48:56 | 显示全部楼层
以上就是我的一些理解和疑问,这部分内容应该跟STM32的芯片上电是一样的,但是我以前没有做过STM32和其它嵌入式开发,所以想把这个部分搞明白。如果大家有什么能够讲得清楚的帖子也请贴上指教我一下,谢谢
回复

使用道具 举报

0

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
442
金钱
442
注册时间
2019-5-16
在线时间
143 小时
发表于 2020-8-3 10:32:01 | 显示全部楼层
帮顶
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-7-23
在线时间
2 小时
 楼主| 发表于 2020-8-3 21:51:02 | 显示全部楼层

啊啊啊,好想有人能够来解答一下啊。感觉开源资料做得很好,但是这个社区发展不起来啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 07:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表