poll()函数 poll 方法是poll 和select 这两个系统调用的后端实现,用来查询设备是否可读或可写,或是否处于某种特殊状态,原型为:
unsigned int (*poll) (struct file *, struct poll_table_struct *); |
我们将在"设备的阻塞与非阻塞操作"一节对该函数进行更深入的介绍。
设备"gobalvar"的驱动程序的这些函数应分别命名为gobalvar_open、gobalvar_ release、gobalvar_read、gobalvar_write、gobalvar_ioctl,因此设备"gobalvar"的基本入口点结构变量gobalvar_fops 赋值如下:
struct file_operations gobalvar_fops = { read: gobalvar_read, write: gobalvar_write, }; |
上述代码中对gobalvar_fops的初始化方法并不是标准C所支持的,属于GNU扩展语法。
完整的globalvar.c文件源代码如下:
#include <linux/module.h> #include <linux/init.h> #include <linux/fs.h> #include <asm/uaccess.h> MODULE_LICENSE("GPL");
#define MAJOR_NUM 254 //主设备号
static ssize_t globalvar_read(struct file *, char *, size_t, loff_t*); static ssize_t globalvar_write(struct file *, const char *, size_t, loff_t*);
//初始化字符设备驱动的file_operations结构体 struct file_operations globalvar_fops = { read: globalvar_read, write: globalvar_write, }; static int global_var = 0; //"globalvar"设备的全局变量
static int __init globalvar_init(void) { int ret;
//注册设备驱动 ret = register_chrdev(MAJOR_NUM, "globalvar", &globalvar_fops); if (ret) { printk("globalvar register failure"); } else { printk("globalvar register success"); } return ret; }
|
|