浅谈裸机开发的重要性
在拿到一款新的开发板后,编写裸机驱动程序将会是一个非常不错的学习的选择,下面给出推荐原因:
1. 了解开发板和CPU
首先是了解开发板如何从汇编的第一行代码开发运行,以及开发板内部的启动流程。学习ARM开发板中非常重要的一点就是开发板是如何启动的,第一行代码被搬移到那里开始运行,运行的过程又是如何的。其次是了解开发板的资源和对应资源的配置,了解各个模块资源的基本操作。
2. 从汇编过渡到C的原理
之所以这么解释是因为现在的交叉编译器都支持汇编和C的混合编程,在u-boot或者Linux中都有两者的混合代码。但是这两者的程序在硬件上设置的区别又是什么?都需要自己慢慢的搞清楚。比如在汇编中一般不需要特别的设置堆栈寄存器,但是由于C语言对函数的调用具有多层次性,所以需要特别的设置堆栈地址。如果使用中断,那么中断的堆栈地址又该如何设置,在汇编时都需要/都可以弄清楚。
3. 了解各个硬件模块工作细节
由于u-boot和Linux中都对设备驱动具有一定的框架,如果不够了解这些框架的原理和机制,那么在编写驱动时就会遇到困难。如果你写过裸机驱动,那么你就可以在了解硬件工作原理的基础上去研究框架下的驱动开发,同时如果出现错误也可以帮助你快速的定位错误位置。
4. 调试和测试
测试的话可以看如下例子:硬件是否损坏,某个模块是否可以正常工作等等。
我在使用u-boot时,错误的操作了nand flash的OOB区域,导致u-boot把这些块识别为错误块,但是这些块并没有任何问题。虽然可以使用强暴的 nand scrup 来格式化整个的nand flash,但是这会擦除厂家写入的错误块标志。所以我使用了裸机的方法写了NAND FLASH的驱动程序,直接发送擦除命令来擦除该错误操作的块,通过这种方法成功的解决了u-boot中比较难以解决的问题。