驱动程序的原理
在嵌入式系统中,通常只要实现几个设备驱动程序中的接口函数就能完成系统所需要的功能。
首先要先加载驱动程序,在加载过程中设备要进行注册,register_chrdev(dev_Major, “module_name”, * fs ),注册之后才能正常的使用。这就相当于上学必须经过“到某学校报到”这一关才能在这个学校进行各种正常的学生活动。在这时候还有一个主设备号和次设备号的概念。一般每个学校各个学院还有一个特殊的编号,学生也有一个学号,主设备号相当于你注册的学院号码,从设备号相当于你在学院内部的学号(这个号码在各个学院之间有可能重复,暂且这么理解吧),这两个号就能唯一确定你这个人了。这通过module_init()来实现。
init 加载驱动程序时,内核自动调用
其次实现几个设备驱动程序中的接口函数,即file_operations 结构的实现。
read 从设备中读取数据
write 向字符设备中写数据
ioctl 控制设备,实现除读写操作以外的其他控制命令
open 打开设备并进行初始化
release 关闭设备并释放资源
通过以下方式来实现:
static struct file_operations demo_fops = {
owner: THIS_MODULE,
write: demo_write,
read: demo_read,
ioctl: demo_ioctl,
open: demo_open,
release: demo_release,
};
最后还要实现卸载,即卸载驱动程序时,内核自动调用,这里要进行与注册相反的操作,即
unregister_chrdev(dev_Major, “module_name”, * fs ),这通过在module_exit()调用的函数内部来实现。
exit 卸载驱动程序时,内核自动调用。
阅读(349) | 评论(0) | 转发(0) |