zoukankan      html  css  js  c++  java
  • Linux 内核 struct device 设备

    在最低层, Linux 系统中的每个设备由一个 struct device 代表:

    struct device { struct device *parent; struct kobject kobj; char bus_id[BUS_ID_SIZE]; struct bus_type *bus; struct device_driver *driver; void *driver_data; void (*release)(struct device *dev); /* Several fields omitted */ };

    有许多其他的 struct device 成员只对设备核心代码感兴趣. 但是, 这些成员值得了解: struct device *parent

    327

    设备的 "parent" 设备 -- 它所附着到的设备. 在大部分情况, 一个父设备是某种 总线或者主控制器. 如果 parent 是 NULL, 设备是一个顶层设备, 这常常不是你 所要的.

    struct kobject kobj;

    代表这个设备并且连接它到层次中的 kobject. 注意, 作为一个通用的规则, device->kobj->parent 等同于 device->parent->kobj.

    char bus_id[BUS_ID_SIZE];

    唯一确定这个总线上的设备的字符串. PCI 设备, 例如, 使用标准的 PCI ID 格式, 包含域, 总线, 设备, 和功能号.

    struct bus_type *bus; 确定设备位于哪种总线.

    struct device_driver *driver;

    管理这个设备的驱动; 我们查看 struct device_driver 在下一节. void *driver_data;

    一个可能被设备驱动使用的私有数据成员. void (*release)(struct device *dev);

    当对这个设备的最后引用被去除时调用的方法; 它从被嵌入的 kobject 的 release 方法被调用. 注册到核心的所有的设备结构必须有一个 release 方法, 否则内核打印出慌乱的抱怨.

    最少, parent, bus_id, bus, 和 release 成员必须在设备结构被注册前设置.

  • 相关阅读:
    招聘里常见的沟通能力到底是什么
    C++服务器linux开发环境管理
    网络游戏通信协议双向迭代加密
    win10控制台程序printf死锁问题
    手游系统逻辑档案之通信协议
    STL插入删除和查询测试
    MATLAB复制图片时边框大的问题
    2019网易笔试题C++--丰收
    暴力求解最长公共子串
    顺时针打印矩阵
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11147710.html
Copyright © 2011-2022 走看看