有了模块的基础,可以开始编写驱动程序了,那么驱动程序又如何编写呢?
驱动程序在linux内核中是以面向对象的思想来编写的,C语言知识面向过程的语言,怎么面向对象呢?
答案是有的,C语言虽然不能实现成员函数,但是可以实现函数指针;C语言虽没有类的概念,但是C有结构体。将结构体作为一个对象,里面的成员就是个体的属性,再在结构体中实现指针函数不就可以实现对象的概念吗?
好了,在linux内核中,驱动程序是按照一定的格式来编写的。因为驱动程序采用了面向对象的思想,把物体的共性抽象出来,再有的是驱动程序采用了分层的思想,当然下面的例子中没有分层,共性的都给内核实现了,那么驱动程序实现的是自己需要加入的硬件的异性。
下面的例子,来看看驱动程序的一般步骤: 1、分配结构体 2、设置 3、注册 4、硬件操作
#include <linux/module.h>
#include <linux/init.h>
static int first_init(void)
{
/* 1、分配结构体 */
/* 2、设置 */
/* 3、注册 */
return 0;
}
static void first_exit(void)
{
/* 卸载 */
}
module_init(first_init);
module_exit(first_exit);
MODULE_LISECEN("GPL");
下面来写个简单的点灯驱动程序: