zoukankan      html  css  js  c++  java
  • Linux设备驱动程序 之 字符设备的注册

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

    分配和初始化

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

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

    1 struct cdev *my_cdev = cdev_alloc();
    2 my_cdev->ops = &my_ops;

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

    1 void cdev_init(struct cdev *cdev, struct file_operations *fops);

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

    添加设备

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

    1 int cdev_add(struct cdev *p, dev_t dev, unsigned count)

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

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

    移除设备

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

    1 void cdev_del(struct cdev *p)

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

  • 相关阅读:
    网上商城设计
    制造业ERP项目设计摘录
    ERP项目
    .NET 连接Oracl 数据库
    Ninject IOC容器 依赖注入 ,控制反转。
    ASP.NET中小型软件系统中复合条件的查询
    Winform 界面设置
    XML DOCUMENT 读写文件
    如何才能更好的阅读别人的源代码
    我的类库之添加水印类
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/11759678.html
Copyright © 2011-2022 走看看