UT4412BV0开发板学习Linux设备驱动模型(二).docxVIP

UT4412BV0开发板学习Linux设备驱动模型(二).docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
UT4412BV0开发板学习Linux设备驱动模型(二)

UT4412BV03开发板学习Linux设备驱动模型(二)设备驱动模型有三个重要部分,分别是总线(bus_type),设备(device),驱动(driver)下面对三个组件分别进行介绍。总线从硬件上来讲,物理总线有数据总线和地址总线,在设备驱动模型中所有设备都是通过总线相连接的,驱动程序依附在总线上,下面将表示总线,设备,驱动三者之间的关系。了解了总线的结构之后,下面具体说明总线中用到的一些结构体及相关的函数。#include asm/device.h1.总线的数据结构bus_typestruct bus_type?{?const char *name; //总线的名字?struct bus_attribute *bus_attrs; //总线属性和导出到sysfs中的方法?struct device_attribute *dev_attrs; //设备属性和导出到sysfs中的方法?struct driver_attribute *drv_attrs; //驱动程序属性和导出到sysfs中的方法?int (*match)(struct device *dev, struct device_driver *drv);//匹配函数,检验参数二的驱动是否支持参数一的设备?//当一条总线上新设备或新驱动被添加时,会一次或多次调用该函数,? // 如果指定的驱动能适用于指定的设备,那么该函数返回非0,否则返回0?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; //总线私有数据};2.总线属性数据结构struct bus_attribute?{?struct attribute attr; //总线属性的变量?ssize_t (*show)(struct bus_type *bus, char *buf); //属性读函数?ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count); //属性写函数};struct attribute {?const char *name; //属性名字?struct module *owner;?mode_t mode; //属性读写权限};3.初始化bus_attribute结构体用的宏#define BUS_ATTR(_name, _mode, _show, _store) \struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)例: static BUS_ATTR(config, 0644, ap_config_time_show,ap_config_time_store);对此宏进行扩展为? ?struct bus_attribute bus_attr_config_time={? ? ? ?.attr={.name=config_time,.mode=0644},? ? ? ?.show=ap_config_time_show,? ? ? ?.store=ap_config_time_store,? ? ? ?}4.创建总线属性的函数int bus_create_file(struct bus_type *bus, struct bus_attribute *attr){?int error;?if (bus_get(bus)) {? error = sysfs_create_file(bus-p-subsys.kobj, attr-attr);? bus_put(bus);?} else

文档评论(0)

yuerang3062 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档