- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章1.总线设备驱动模型
} struct bus_type { 总线描述 const char struct bus_attribute struct device_attribute struct driver_attribute *name; /*总线名称*/ *bus_attrs; /*总线属性*/ *dev_attrs; /*设备属性*/ *drv_attrs; /*驱动属性*/ int (*match)(struct device *dev, struct device_driver *drv); int (*uevent)(struct device *dev, struct kobj_uevent_env *env); int (*probe)(struct device *dev); int (*remove)(struct device *dev); void (*shutdown)(struct device *dev); int (*suspend)(struct device *dev, pm_message_t state); int (*suspend_late)(struct device *dev, pm_message_t state); int (*resume_early)(struct device *dev); int (*resume)(struct device *dev); struct dev_pm_ops *pm; struct bus_type_private *p; 总线注册/删除 总线的注册使用: bus_register(struct bus_type * bus) 若成功,新的总线将被添加进系统,并可在 sysfs 的 /sys/bus 下看到。 总线的删除使用: void bus_unregister(struct bus_type *bus) 总线方法 int (*match)(struct device * dev, struct device_driver * drv) 当一个新设备或者驱动被添加到这个总线 时,该方法被调用。用于判断指定的驱动程 序是否能处理指定的设备。若可以,则返回 非零值。 总线方法 int (*uevent)(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size) 在为用户空间产生热插拔事件之前,这个 方法允许总线添加环境变量。 总线属性 总线属性由结构bus_attribute 描述,定义如下: struct bus_attribute { struct attribute attr; ssize_t (*show)(struct bus_type *, char * buf); ssize_t (*store)(struct bus_type *, const char * buf, size_t count); } 总线属性 v bus_create_file(struct bus_type *bus, struct bus_attribute *attr) 创建属性 v bus_remove_file(struct bus_type *bus, struct bus_attribute *attr) 删除属性 实例分析 Bus_basic.c } 设备描述 Linux 系统中的每个设备由一个 struct device 描述: struct device { …… …… …… …… …… …… struct kobject kobj; char bus_id[BUS_ID_SIZE]; /*在总线上唯一标识该设备的字符串 */ struct bus_type *bus; /* 设备所在总线 */ struct device_driver *driver; /*管理该设备的驱动*/ void *driver_data; struct klist_node struct class /*该设备驱动使用的私有数据成员 * knode_class; *class; struct attribute_group **groups; void (*release)(struct
文档评论(0)