LINUX-I.MX6U从零开始之1.3--I.MX6U的烧录实现

一,烧录步骤

以LED.s(汇编点灯)为例

1.1编译
arm-linux-gnueabihf-gcc -g -c led.s -o led.o

会生成led.o

1.2链接地址
arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf

会生成led.elf

1.3.1转换格式
arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

会生成led.bin(烧录bin文件)

1.3.2反汇编(烧录用不到)
arm-linux-gnueabihf-objdump -D led.elf > led.dis

会生成led.dis

1.4烧录bin文件

“imxdownload”是原子编写的
1.4.1赋予imxdownload权限

chmod 777 imxdownload

1.4.2确定SIM卡是哪个

ls /dev/sd*

1.4.3向SD卡烧录

./imxdownload led.bin /dev/sdb //我的是sdb

最后一行会显示烧写大小、用时和速度,如果这个烧写速度大于几十 MB/s、甚至几百 MB/s 那么肯定是烧写失败了!

二,makefile简化操作
2.1创建makefile
touch makefile

会生成makefile

2.2简单编写makefile
led.bin:led.s
	arm-linux-gnueabihf-gcc -g -c led.s -o led.o
	arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
	arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
	arm-linux-gnueabihf-objdump -D led.elf > led.dis
clean:
	rm -rf *.o led.bin led.elf led.dis
2.3.1编译
make

生成.o,.elf,.bin,.dis

2.3.2清除编译结果
make clean
三,镜像编写(imxdownload)

前面说了,imxdownload是原子写的,现在来看看这玩意是怎么写的。imxdownload 会在 led.bin前面添加一些头信息,重新生成一个叫做 load.imx 的文件,最终实际烧写的是 laod.imx。

3.1文件.imx组成(IVT+Boot data+DCD+.bin)

、Image vector table,简称 IVT,IVT 里面包含了一系列的地址信息,这些地址信息在 ROM中按照固定的地址存放着。
、Boot data,启动数据,包含了镜像要拷贝到哪个地址,拷贝的大小是多少等等。
、Device configuration data,简称 DCD,设备配置信息,重点是 DDR3 的初始化配置。
、用户代码可执行文件,比如 led.bin。
3.1.1 IVT 数据和Boot Data 数据
IVT 包含了镜像程序的入口点、指向 DCD 的指针和一些用作其它用途的指针。
内部 Boot ROM 要求 IVT 应该放到指定的位置,不同的启动设备位置不同,而 IVT 在整个 load.imx 的最前面,其实就相当于要求 load.imx 在烧写的时候应该烧写到存储设备的指定位置去。
详见原子手册9.4.1
3.1.2 DCD 数据
复位以后,I.MX6U 片内的所有寄存器都会复位为默认值,但是这些默认值往往不是我们想要的值,而且有些外设我们必须在使用之前初始化它。
详见原子手册9.4.2

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值