前言
在学习Linux开发板时,我们在Ubuntu或者CentoS时当中只能使用单纯汇编或者汇编+C语言的方式进行程序编写,今天我们就来看看利用汇编+C语言的方式进行程序编写。(这里我用的是VS code,其他的也差不多)
说明
我们大多数人都是从32单片机过来的,对于汇编的概念和使用可谓是知之甚少,起始在32或者51单片机中就一直伴随汇编程勋的编写,只不过我们大多数用户在使用时根本不需要关注汇编程序这种底层的东西。汇编编程一般用于最底层的驱动文件,像51和32的启动文件就全是通过汇编程序就行单片机的驱动。这都是ST公司在出厂之前就已经编程好,我们只需要拿着用就行,而Linux开发板是A系列的板子,对应的也就没有像ST系列的单片机那样拿着驱动文件就用,在Linux中需要我们自己编写。
编程过程
1、和纯汇编方式一样需要创建文件和工作区,在VS code中打开相应的文件,接着将其工作区另存在该文件目录下。
2、上面提到了驱动需要我们自己编写,所以接下来是编写驱动程序,在工作区新建xxx.S的文件进行程序编写。
3、这里就是我们最熟悉的C文件,和2一样创建xxx.c和xxx.h文件,这里和32的用法一模一样,这里就不多讲了
4、最后一步就是程序写好之后的烧写,这里我们运用Makefile进行模块化的烧写,省去一些不必要的麻烦。新建一个Makefile文件,将烧写命令模块化编写之后就可以烧写完毕
在终端里面运行下面代码就可以正常烧写
make
最后下载到SD卡里面就完成了
./imxdownload xxx.bin /dev/sdx
/*这里的xxx.bin是上面make运行之后烧写完成之后的文件,/dev/sdx是SD卡所在的目录*/
总结
第4步的烧写过程使用Makefile的方式进行烧写是我们比较常用的一种方式,如果没用习惯,亦可以将其中的代码一段一段的进行运行,最后也能得到xxx.bin文件。
以下就是分段烧写文件的命令
1 、arm-linux-gnueabihf-gcc 编译文件
arm-linux-gnueabihf-gcc -g -c xxx.s -o xxx.o2 、arm-linux-gnueabihf-ld 链接文件
arm-linux-gnueabihf-ld -Ttext 0X87800000(起始地址) xxx.o -o xxx.elf3 、arm-linux-gnueabihf-objcopy 格式转换
arm-linux-gnueabihf-objcopy -O binary -S -g xxx.elf xxx.bin4 、arm-linux-gnueabihf-objdump 反汇编
arm-linux-gnueabihf-objdump -D xxx.elf > xxx.dis./imxdownload xxx.bin /dev/sdx(这里如果运行有问题就是imxdownload权限的问题,使用chmod 777 imxdownload的命令赋予其权限再运行)