[i.MX] i.mx6启动image头信息

[复制链接]
1922|13
 楼主| dannys0302 发表于 2014-5-6 16:06 | 显示全部楼层 |阅读模式
在i.mx6执行的第一条语句(代码第一条,可能并非CPU执行的第一条)之前,有1760个字节的头信息
其中前1024(0x400)个字节,开头4字节是0xB6 0x01 0x00 0xEA (反汇编后看到意思是 b        278006e0 <_start>),就是跳转到第1760个字节。
接下来的数据是IVT+DCD之类的数据。

     调试过程:
         1.复制可以运行的uboot.bin的开头1760个字节
         2.自己写了个控制GPIO的汇编代码,编译并objcopy成2进制文件,编译的链接地址为0x0
         3.合并两个数据,即把我写的代码放到1760地址处(0x6E0)。
         4.用MFGtools把合成的bin烧写到TF卡启动

     结果:代码被成功运行,GPIO接上一个LED,可以看到LED在闪烁。

我的Makefile:
        arm-none-linux-gnueabi-gcc -c Start.S
        arm-none-linux-gnueabi-ld -Ttext 0 -o boot.elf Start.o
        arm-linux-objcopy --gap-fill=0xff -O binary boot.elf myboot.bin
        cat 1.bin myboot.bin> u-boot.bin
这里的1.bin就是从uboot截取的头数据,我使用的链接地址是-Ttext 0

疑问:
1.  b        278006e0 <_start>这条指令在最开始,它有没有被执行?
由于uboot的链接地址是0x27000000,所以截取的uboot的头信息的这条语句,是跳转到0x278006e0,但我编译的代码链接地址是0,所以这条指令应该不能跳转到我的代码
并且手册指出,芯片从SD启动的时候,开始地址应该是0x400,就是IVT head的地址,但就算如此,整个IVT使用的链接地址都是0x27000000(boot data的值也是相对于0x27000000),那么我的代码是如何被执行的?
FSL_TICS_Rita 发表于 2014-5-6 16:49 | 显示全部楼层
你好,请问你使用的板子型号以及使用的BSP版本是什么?
 楼主| dannys0302 发表于 2014-5-7 00:29 | 显示全部楼层
板子型号是一个叫E9的卡片电脑,芯片是i.mx6q,BSP是他们光盘带的,这个不重要啦,我主要想知道启动流程
FSL_TICS_A 发表于 2014-5-9 10:04 | 显示全部楼层
dannys0302 发表于 2014-5-7 00:29
板子型号是一个叫E9的卡片电脑,芯片是i.mx6q,BSP是他们光盘带的,这个不重要啦,我主要想知道启动流程 ...

你好,楼主!
为避免工程师错过你的回复信息。
请点击工程师回复的那一楼的回复按钮进行回复,不然工程师无法及时得知最新的回复信息。
FSL_TICS_Rita 发表于 2014-5-9 13:59 | 显示全部楼层
dannys0302 发表于 2014-5-7 00:29
板子型号是一个叫E9的卡片电脑,芯片是i.mx6q,BSP是他们光盘带的,这个不重要啦,我主要想知道启动流程 ...

楼主你好,你是想要了解i.mx6的启动流程么?还是指的别的?
 楼主| dannys0302 发表于 2014-5-12 11:09 | 显示全部楼层
是的   就是启动流程,我看了下手册,没搞明白细节,主要是想知道,启动的时候,CPU是如何执行到我的代码的,就是主题所说的内容
 楼主| dannys0302 发表于 2014-5-12 11:10 | 显示全部楼层
FSL_TICS_Rita 发表于 2014-5-9 13:59
楼主你好,你是想要了解i.mx6的启动流程么?还是指的别的?

是的   就是启动流程,我看了下手册,没搞明白细节,主要是想知道,启动的时候,CPU是如何执行到我的代码的,就是主题所说的内容
 楼主| dannys0302 发表于 2014-5-12 11:11 | 显示全部楼层
FSL_TICS_A 发表于 2014-5-9 10:04
你好,楼主!
为避免工程师错过你的回复信息。
请点击工程师回复的那一楼的回复按钮进行回复,不然工程师 ...

好的  谢谢提醒
 楼主| dannys0302 发表于 2014-5-13 13:48 | 显示全部楼层
别沉了~~~~
FSL_TICS_Rita 发表于 2014-5-13 14:37 | 显示全部楼层
dannys0302 发表于 2014-5-13 13:48
别沉了~~~~

楼主你这个问题,由于你使用的是E9板子,并且BSP也是他们公司的,这里建议你到他们公司的网站找他们的技术支持,或者论坛上寻求答案,这样会比较快捷。他们是在我们的基础上修改的,不知道已经修改了哪些内容。
FSL_TICS_Rita 发表于 2014-5-13 14:39 | 显示全部楼层
还有,我看到你也在我们官网上提交了技术服务请求,我们的工程师也会给你一些建议的,请注意查看给你的回复~~
 楼主| dannys0302 发表于 2014-5-13 15:10 | 显示全部楼层
FSL_TICS_Rita 发表于 2014-5-13 14:37
楼主你这个问题,由于你使用的是E9板子,并且BSP也是他们公司的,这里建议你到他们公司的网站找他们的技 ...

其实这个问题与BSP无关,是芯片的启动流程,与代码无关的,就是想知道从芯片上电的那一刻,芯片怎么执行代码的
FSL_TICS_Rita 发表于 2014-5-14 18:08 | 显示全部楼层
dannys0302 发表于 2014-5-13 15:10
其实这个问题与BSP无关,是芯片的启动流程,与代码无关的,就是想知道从芯片上电的那一刻,芯片怎么执行 ...

你好,关于芯片的工作流程,你要看一下IMX6DQRM.pdf的Chapter 8 System Boot,里面讲的很清楚的。
 楼主| dannys0302 发表于 2014-5-19 20:56 | 显示全部楼层
终于搞明白了,原来启动的时候芯片会根据头信息去初始化DDR并且把代码拷贝到外部内存
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

34

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部