Linux设备驱动程序 之 字符设备的注册

内核内部使用struct cdev结构来标识字符设备,在内核调用设备的操作之前,必须分配并注册一个或者多个上述结构,为此,我们的代码需要包含<linux/cdev.h>,其中定义了这个结构以及相关的辅助函数;

分配和初始化

分配和初始化上述结构的方式分为两种:

1. 如果打算在运行的时候获取一个独立的cdev,需要使用下面代码:

2. 如果将cdev结构嵌入到自己的设备特定结构中,这种情况下需要使用下面的代码初始化已经分配的结构;

另外:不管哪种初始化,都需要设置cdev->owner字段为THIS_MDOULE;

添加设备

在cdev结构设置好之后,最后的步骤是通过下面的调用告诉内核结构的信息:

p-cdev结构指针,dev-该设备对应的第一个设备编号,count-应该和该设备关联的设备编号数量,经常取值为1,但是在某些情况下,会有多个设备编号对应一个特定的设备;

使用cdev_add时,需要牢记重要的一点;首先,这个调用可能失败,如果它返回一个负的错误码,则设备不会被添加到系统中,但是这个调用几乎总会返回成功;然后,只要cdev_add成功返回了,我们的设备就工作了,它的操作就会被内核调用,因此在驱动程序没有完全准备好处理该设备上的操作时,就不能调用cdev_add;

移除设备

要从系统中移除一个字符设备,需要做如下调用:

在cdev结构传递到cdev_del之后,就不应该在访问cdev结构了;

本文链接:Linux设备驱动程序 之 字符设备的注册

转载声明:转载请注明来源:Linux TCP/IP Stack,谢谢!


发表评论

电子邮件地址不会被公开。 必填项已用*标注