chLinux文件系统与设备文件系统讲解.pptVIP

  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文档。上传文档
查看更多
Container_of(pointer,type,member) 举例: Struct A_T{ Char a; int b; } Struct A_T A; Int *b_p=(A.b); 使用如下方法可从数据结构的一个元素出发,得到整个数据结构的指针。 struct A_t *A_p=container_of(b_p,struct A_t,b); Kobject结构 Include/linux/kobject.h Struct { const char *k_name; //指向设备名称的指针 char name[KOBJ_NAME_LEN]; //设备名称 struct kref kref; //引用计数 struct list_head entry; //挂接到所在KSET中的单元 struct kobject *parent; //指向父对象的指针 struct kset *kest; //所属kset的指针 struct kobj_type *ktype;//指向提取对象类型描述符的指针 struct sysfs_dirent *sd; wait_queue_head_t poll; } kobj_type结构 kobj_type是具有相同操作的kobject的集合。他负责这一类kobject在文件系统下的操作(show,store). Include/liunx/kobject.h Struct kobj_type{ void (*release)(struct kobject *); struct sysfs_ops *sysfs_ops; struct attribute **default_attrs; }; Release是注销函数指针。 attribute 是该kobject的默认属性列表。 在sysfs中,kobject对应目录,属性对应文件。 sysfs_ops是如何读写的函数指针。 Kset结构 Kobject的集合。Kobject通过Kset组织成层次化的结构。 Kset 是有相同类型的Kobject的集合, Kobject相当于叶子节点Kset 相当于内节点,两者连接形成一个树状结构。 Kobj_type结构关注的是对象的类型,而kset结构关心的是对象的集合。可认为kset是kobjects的顶层容器类。 Struct kset { struct kobj_type *ktype; struct list_head list; spinlock_t list_lock; struct kobject kobj; struct kset_uevent_ops *uevent_ops; } Kobject和kset的简单关系 linux设备模型-上层建筑 总线(bus)、设备(device)、驱动(device_driver) 3个数据结构构成了设备模型的上层建筑。 struct bus_type { const char??* name; struct subsystem subsys;//代表自身 struct kset??drivers;? ?//当前总线的设备驱动集合 struct kset??devices; //所有设备集合 struct klist??klist_devices; struct klist??klist_drivers; struct bus_attribute * bus_attrs;//总线属性 struct device_attribute * dev_attrs;//设备属性 struct driver_attribute * drv_attrs; 总线(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);//热拔插事件 int??(*probe)(struct device * dev); int??(*remove)(struct device * dev); void??(*shutdown)(struct device * dev); int??(*suspend)(struct device * de

文档评论(0)

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

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

1亿VIP精品文档

相关文档