当前位置:   article > 正文

I.MX6U从SD卡启动程序过程_l.mxull sd卡链接地址

l.mxull sd卡链接地址

编译程序

①、使用arm-linux-gnueabihf-gcc将.c .s文件变为.o

②、将所有的.o文件连接为elf格式的可执行文件。

③、将elf文件转为bin文件。

④、将elf文件转为汇编,反汇编。

链接:

链接就是将所有.o文件链接在一起,并且链接到指定的地方。链接的时候要指定链接起始地址。链接起始地址就是代码运行的起始地址

对于6ULL来说,链接起始地址应该指向RAM地址。RAM分为内部RAM和外部RAM,也就是 DDR。6ULL内部RAM地址范围0X900000~0X91FFFF。也可以放到外部DDR中,对于I.MX6U-ALPHA开发板,512MB字节DDR版本的核心板,DDR范围就是0X80000000~0X9FFFFFFF。对于256MB的DDR来说,那就是0X80000000~0X8FFFFFFF

本系列视频,裸机代码的链接起始地址为0X87800000。要使用DDR,那么必须要初始化DDR,对于I.MX来说bin文件不能直接运行,需要添加一个头部,这个头部信息包含了DDR的初始化参数,I.MX系列SOC内部boot rom会从SD卡,EMMC等外置存储中读取头部信息,然后初始化DDR,并且将bin文件拷贝到指定的地方。

Bin的运行地址一定要和链接起始地址一致。位置无关代码除外。

总结:

1.链接文件要指定链接起始地址,生成bin二进制文件

2.链接起始地址指向DDR,要使用DDR必须要初始化,故还要加入一个包含DDR初始化参数的头部

3.I.MX系列SOC内部boot rom会从SD卡,EMMC等外置存储中读取头部信息,然后初始化DDR,并且将bin文件拷贝到指定的地方。

4.实际烧写最终生成的.imx文件,而不是bin文件。再.imx文件组成有IVT+Boot data+Device configuration data+用户执行文件(.bin)

IVT:提供IVT、boot data、dcd和用户代码的地址 

1.header

2.用户代码地址,也即是链接地址,镜像第一行指令所在位置

3.保留

4.dcd地址:由于IVT+Boot data+DCD一共为3KByte(1KByte=1024Byte),则dcd地址为0x87800000-0xC00+32Byte(IVT)+12Byte(Boot data) = 0x877FF42C

5.boot data地址:0x877FF42C-12Byte = 0x877FF420

6.self:自己IVT的地址 0x87800000-3Kbyte = 0x877FF400

7.csf:不需要安全引导,设置为NULL

8.保留

Boot data:提供整个.imx在DDR的起始地址

1.start:整个 load.imx 的起始地址,包括前面 1KByte 的地址偏移。0x877FF000

2.length:镜像大小,这里设置不超过2MByte

3.插件

DCD:就是I.MX6U寄存器地址和相应配置信息的集合,一条寄存器地址,一条配置信息。会开启某些外设时钟,初始化DDR等等。DDR必须初始化后才能使用,代码是在DDR中运行的

在这里插入图片描述

代码在DDR3中的地址排序 

200000 = 2MB  的堆栈,用来存放代码执行中的变量

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/772704
推荐阅读
相关标签
  

闽ICP备14008679号