您的位置:首页 > 运维架构 > Linux

linux字符设备驱动框架(一)

2017-01-31 16:57 239 查看
字符设备框架主要有四个主要数据结构

1. struct cdev

2. struct file_operations

3. struct inode
4. struct file

cdev 和file_operations之间的调用关系可用下图来表法



首先定义一个自己的结构体如:

struct my_test_dev{

struct cdev cdev;//这个就是要上图中的cdev,在驱动中是必不可少的

int  i;

char a;

}

cdev结构体中有三个项要用到,

struct cdev{

struct module *owner;//所属模块,一般赋值为THIS_MODULE

dev_t  dev;//设备号

struct file_operations  *ops;//文件操作结构体

}

然后定义自己的文件操作结构体模板:

struct file_operations my_test_fops={

.owner = THIS_MODULE,

.read = my_test_read,

.write=my_test_write,

.ioctl=my_test_ioctl,

....

....

}

,注意:上面各项是用逗号分隔而不是分号。

my_test_dev->cdev和my_test_fops通过初始化函数联系在一起:void cdev_init(struct cdev 
* , struct   file_operations  *);

示例:

struct my_test_dev  *p_my_test_dev;//定义一个指针,还要分配空间,这里省略

cdev_init(&p_my_test-dev->dev,  &my_test_fops);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: