Linux字符设备驱动结构

在Linux设备驱动开发中,分为三种驱动形式:字符驱动、块驱动、网络驱动。其中,最简单的是字符驱动,虽然三种驱动存在差异,但是其开发思想是相通的。下文主要介绍字符驱动开发的一些流程。
关于字符驱动开发,最重要的两个数据结构为cdev和file_operations,驱动的具体操作就是在操作这两个结构体。
1. cdev 结构体
struct cdev{
struct kobject kobj;
struct module *owner;
struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
};
在结构体中,dev_t定义了字符设备的设备号,为32位,其中高12位为主设备号,低20位为次设备号。我们可以采用下列宏从dev_t中获得主、次设备号。
MAJOR(dev_t dev) 获取主设备号
MINOR(dev_t dev) 获取次设备号 同样可以利用宏MKDEV(int major, int minor) 来获取设备号dev_t.
2. file_operations 结构体
file_operations结构体中的成员函数是字符设备驱动程序设计的主体内容,这些函数实际会在应用程序进行Linux的open()、read()、write()、close()、等系统调用时最终被调用。
struct file_operations xxx_fopes{
.owner = THIS_MODULE;
.read = xxx_read;
.write = xxx_write;
.ioctl = xxx_ioctl;

 };

3. 关联cdev与file_operations的重要函数void cdev_int(struct cdev , struct file_operations );
void cdev_init(struct cdev *cdev, struct file_operations *fops)
{
memset(cdev, 0, sizeof *cdev);
INIT_LIST_HEAD(&cdev->list);
kobject_init(&cdev->kobj, &ktype_cdev_default);
cdev->ops = fops;
}

这是我的第一篇博文,写的很不好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值