最最基本的驱动程序,应该包含初始化函数和所遵守的协议
module_init(first_drv_init);
module_exit(first_drv_exit);
MODULE_LICENSE("GPL");
在first_drv_init函数中,应该向内核注册一个文件操作的结构体,
register_chrdev(111, "first_drv", &first_drv_fops);
其中的成员可以根据自己的需要确定,基本的操作包含open,close,read,write
static struct file_operations first_drv_fops = {
.owner = THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */
.open = first_drv_open,
.write = first_drv_write,
};
open和wirte函数可以为空函数
这样就完成了一个最基本的驱动程序,虽然这是一个空的驱动。
驱动是有了,但是自己也没啥意义,那么就需要一个应用程序来调用。
于是可以简单的open和write某个文件——这个文件的路径(待验证)、文件名可以随便写,但是必须要有一致的主设备号,
这样才能在open和write这个文件的时候,调用到自己提供的open和write函数,虽然,通过write函数写入的值可
能压根儿就没有在驱动中处理。
这样,就完成了驱动程序的“点灯” 。