之前写了一篇移植2.4寸TFT驱动到树莓派的文章,那篇博文中的驱动代码是国外大牛写的,看了一下,还是有很多地方没理解,是得好好再学习一下内核驱动的编写,这里就从字符设备驱动开始,采用最简单的LED驱动来建立内核驱动移植的驱动框架.
个人原创,转载请注明原文出处:
http://blog.csdn.net/embbnux/article/details/17712547
参考文章:
http://blog.csdn.net/hcx25909/article/details/16860725
内核驱动与普通单片机模块驱动的差别就是在于,写内核驱动的时候,要提供内核调用的接口,使内核能找到相应的驱动入口,用户通过告诉内核要干嘛,内核再去调用那个驱动,驱动的最底层和单片机模块是一样的,同样是对GPIO的操作,配置输入输出,以及某些特殊的寄存器. LED的点亮就是对GPIO的操作 .
对于ARM的GPIO调用需要通过IO映射的方法,要操作内存上对应的地址.
对于bcm2708上的io对应关系,可以查看bcm2835的手册,和stm32基本上是一样的,因为同为ARM体系:
我参考的那博客讲这个比较清楚,可以参考下,由于树莓派的内核以及很好的提供了GPIO调用的接口,即把内存操作封装了很好,这里就不像那篇博客那样再自己写函数通过内存操作来进行GPIO操作,觉得有点麻烦,但是对于学好底层很有用.
一 首先上个驱动程序
这里直接把该程序添加到内核的源码目录里面,也可在自己的目录下,但是要写Makefile.
在/drivers/char/新建rasp_led.c,内核中的kconfig文件和makefile文件,参照前一篇文章