1、烧写概念
bin 文件烧写到哪里呢?使用 STM32 的时候烧写到内部 FLASH,6ULL 没有内部 FLASH,是不是就不能烧写呢?不,6ULL 支持 SD卡、EMMC、NAND FLASH、NOR FLASH 等方式启动,在裸机学习的工程中,选择 SD卡启动,所以将 bin 文件烧写到 SD卡中。
烧写并不是将 bin 文件直接拷贝到 SD卡中,而是将 bin 文件烧写到 SD卡的绝对地址上,而且对于 I.MX,不能直接烧写 bin 文件,需要添加一个头部,会使用到正点原子的 imxdownload 软件,将 imxdownload 拷贝到工程根目录下;
2、向 SD 卡烧写 bin 文件
使用 imxdownload 向 SD 卡烧写 led.bin 文件,命令格式如下;
./imxdownload <.bin file> <SD Card>
2.1、查看 SD卡
在 Ubuntu 下向 SD卡烧写裸机 bin 文件,需要将 SD卡连接 Ubuntu,参考链接:【Linux】Ubuntu 磁盘管理 。Ubuntu 下所有的设备文件都在目录“/dev”里面,所以插上 SD 卡以后也会出现在“/dev”里面,其中存储设备都是以“/dev/sd”开头的,我们要先看一下不插 SD 卡的时候电脑都有哪些存储设备,以防插入 SD 卡以后分不清谁是谁;
对比之下可以看出,sdb 是插入的 SD卡。
2.2、给予 imxdownload 可执行权限
我们直接将软件 imxdownload 从 Windows 下复制到 Ubuntu 中以后,imxdownload 默认是没有可执行权限的,我们需要给予 imxdownload 可执行权限;
chmod u+x imxdownload
imxdownload 已经具有了可执行权限。
2.3、 烧写
./imxdownload <.bin file> <SD Card>
在工程目录下多了一个 losd.imx 的文件,之前一直说头部,其实是给 led.bin 添加头部之后个生成一个新的 losd.imx,load.imx 被烧到 SD卡里面。
2.4、验证
将 SD卡插入到开发板中,启动方式选择 SD卡,即把拨码开关的 1 和 7 拨上去;
I.MX6ULL-MINI_led
上电之后,可以看到,led1(红色的)过一会才亮起;
2.5、优化编写 Makefile
led.bin: leds.s
arm-linux-gnueabihf-gcc -g -c leds.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 -f *.o led.bin led.elf led.dis
Makefile 需要注意首行空出来的地方使用 TAB 键 !!!
修改一下 leds.s 为 led.s;