天嵌 ARM开发社区

 找回密码
 注册
查看: 3994|回复: 1

i.mx6启动image头信息

[复制链接]
dannys0302 发表于 2014-5-7 16:34:19 | 显示全部楼层 |阅读模式
在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),那么我的代码是如何被执行的?
zyh2014 发表于 2014-11-15 16:31:37 | 显示全部楼层
不知道,抢过沙发,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-3-28 20:54 , Processed in 1.046882 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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