摘要:学习开发板都会从简单地点灯实验开始对开发板或单片机的学习之路,这里也不例外,因为点灯的步骤不像普通的32那样简单,需要对步骤做一定的记录,方便后面需要的时候在拿出来看。
编译代码
-
arm-linux-gnueabihf-gcc 编译文件
arm-linux-gnueabihf-gcc -g -c led.s -o led.o
这里生成一个.o文件,需要将.o文件链接起来组合成可执行文件。 - arm-linux-gnueabihf-ld 链接文件
arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
这里的链接.o文件到.elf文件,是类似于STM32中被封装好的.o文件指向芯片ROM地址。同样的我们这里的.o文件也需要链接地址,这里的0X87800000就是需要链接的地址(全都链接在DDR中),在参考手册中,这个地址是Uboot的地址(统一的)
-
arm-linux-gnueabihf-objcopy 格式转换
arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
这里将.elf文件转换为.bin可执行文件
-
arm-linux-gnueabihf-objdump 反汇编
arm-linux-gnueabihf-objdump -D led.elf > led.dis
这个是需要查看汇编代码来调试代码,所以进行反汇编的(里面都是汇编代码,还有内存分配情况),事实上我们写Makefile的时候的目标还是可执行文件.bin文件。
Makefile使用:
在如果需要修改上面的.s文件,那么就需要把上面的代码重新敲一遍,所以Makefile会简化这种操作。首先简单介绍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
这里Makefile按照一定的格式写的,从CSDN上复制了一个方便理解的。我们的led.s就是我们需要的可执行文件,也就是目标target,这里的有源文件只有led.s一个,也就是depend依赖,下面的就是command命令。
# 举例: 有源文件 a.c b.c c.c head.h, 需要生成可执行程序 app
################# 例1 #################
app:a.c b.c c.c
gcc a.c b.c c.c -o app
################# 例2 #################
# 有多个目标, 多个依赖, 多个命令
app,app1:a.c b.c c.c d.c
gcc a.c b.c -o app
gcc c.c d.c -o app1
################# 例3 #################
# 规则之间的嵌套
app:a.o b.o c.o
gcc a.o b.o c.o -o app
# a.o 是第一条规则中的依赖
a.o:a.c
gcc -c a.c
# b.o 是第一条规则中的依赖
b.o:b.c
gcc -c b.c
# c.o 是第一条规则中的依赖
c.o:c.c
gcc -c c.c
在工程文件中,我们输入touch Makefile创造一个文件,在里面写之前的代码,然后就可以保存退出。出来敲make就能运行四行程序,敲make clean就能清除多余的文件。
注意:在敲Makefile代码的时候一定要用TAB键代替空格键,如果不习惯就去搜一下如何修改(建议还是用tab)。
代码烧写:(因为疫情,开发板在实验室,所以等疫情后再补上这部分内容。先把步骤写下来)
- 将Ubuntu下烧写工具imxdownload复制到项目文件中,与可执行文件led.bin文件一个目录
- 给予imxdownload可执行权限
chmod 777 imxdownload
,文件会变成绿色,证明权限给予成功 - 确定烧写的SD卡,拔插实验
- 向SD卡烧写bin文件
./imxdownload led.bin /dev/sdd //不能烧写到/dev/sda 或 sda1 设备里面!那是系统磁盘
,生成一个load.imx文件 - 代码验证,将板子上的BOOT——CFG拨码,1和7拨上去。按下复位键,一秒后灯亮起。