学习裸机驱动开发也有一阵子,终于是把几种裸机驱动方法学完了,总体来说难度并不大。因为毕竟有基础在,能大概看懂数据手册和知道如何是控制寄存器。
驱动方法目前所学共有四种:
1.纯汇编驱动
2.汇编驱动头文件,剩下的使用C语言来驱动
3.模仿STM32的方式来进行驱动
4.移植NXP的官方SDK来进行驱动
四种方法有共同点和不同点,下面我来 一 一总结:
共同点:
1.无论怎么样,都必须使用汇编语言来启动头文件。选择了启动方式之后如果不使用汇编语言来启动头文件,任你后面的代码再怎么写你也驱动不了开发板。驱动代码对于接下来的所有方法都是相同的!
2.编译程序的步骤都是大同小异的。第一步先把软件代码写好,第二步将.C(源文件) .S(汇编文件)文件转换为.O(已编译不可执行)文件。第三步将所有的.O文件链接为elf格式的可执行文件。最后将.elf文件转换成.bin文件。这个.bin文件会和头文件一起被写入你所选择的启动方式里面去。我建议还可以在这里再加上一步,反汇编elf文件。为什么呢?因为反汇编最重要的就是可以看到你文件的开头文件,一定要是.S文件开头,只有汇编文件开头启动一些外设,其他文件才有写入的可能!
下面附上:个C语言代码源文件需要经过如图四个步骤,才能变成可以被计算机执行的文件。
3.Makefile。这个肯定是毋庸置疑很好用的make工具。使用它可以省去很多的操作步骤和少些很多的代码。而且如果需要修改一部分链接文件的代码,可以直接修改,然后编译。如果不使用,修改.C .S文件之后,又要重新走一遍编译程序的步骤,很繁琐不建议!而且最重要的一天,以后要学习的大头:系统移植和uboot都是要经常使用Makefile的!
CROSS_COMPILE ?= arm-linux-gnueabihf-
NAME ?= ledc //如果以后其他模块需要使用,只需要改名字就好了
CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)ld
OBJCOPY :