- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux设备管理机制要点
linux 设备模型简介 设备模型概述(1) Linux 2.6内核最初为了应付电源管理的需要,提出了一个设备模型来管理所有的设备。在物理上,外设之间是有一种层次关系的,比如把一个U盘插到笔记本上,实际上这个U盘是接在一个USB Hub上,USB Hub又是接在USB 2.0 Host Controller (EHCI)上,最终EHCI又是一个挂在PCI Bus上的设备。这里的一个层次关系是:PCI-EHCI-USB Hub-USB Disk。如果操作系统要进入休眠状态,首先要逐层通知所有的外设进入休眠模式,然后整个系统才可以休眠。因此,需要有一个树状的结构可以把所有的外设组织起来。这就是最初建立Linux设备模型的目的。 设备模型概述(2) Linux设备模型给我们带来的便利远不止如此。既然已经建立了一个组织所有设备和驱动的树状结构,用户就可以通过这棵树去遍历所有的设备,建立设备和驱动程序之间的联系,根据类型不同也可以对设备进行归类,这样就可以更清晰的去“看”这颗枝繁叶茂的大树。另外,Linux驱动模型把很多设备共有的一些操作抽象出来,大大减少了重复造轮子的可能。同时Linux设备模型提供了一些辅助的机制,比如引用计数,让开发者可以安全高效的开发驱动程序。达成了以上这些好处之后,我们还得到了一个非常方便的副产品,这就是sysfs----一个虚拟的文件系统。sysfs给用户提供了一个从用户空间去访问内核设备的方法,它在Linux里的路径是/sys。这个目录并不是存储在硬盘上的真实的文件系统,只有在系统启动之后才会建起来 sysfs文件系统 sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息,从而时用户空间程序可以设置内核属性 内核kobject(1) sysfs是内核提供给用户的一个设备层次结构的视图,而内核设备层次构建的最基本单元就是kobject 类似于C++中的基类,它嵌入于更大的对象的对象中--所谓的容器--用来描述设备模型的组件。如bus,devices, drivers 都是典型的容器。这些容器就是通过kobject连接起来了,形成了一个树状结构。这个树状结构就与sysfs向对应。 内核kobject(2) kobject主要提供三方面功能: 1) 引用计数 2) sysfs表示:每个在内核中注册的kobject都对应于sysfs文件系统的一个目录,目录下的文件代表kobject的属性 3) 设备热插拔 内核kobject(3) struct kobject { const char *name;//名称 struct list_head entry;//同类kobjects的链表 struct kobject *parent;//父对象 struct kset *kset;//所属集合 struct kobj_type *ktype;//对象类型 struct sysfs_dirent *sd;//sysfs文件系统中与该对象对应的文件节点路径指针 struct kref kref;//引用计数 unsigned int state_initialized:1; unsigned int state_in_sysfs:1; unsigned int state_add_uevent_sent:1; unsigned int state_remove_uevent_sent:1; unsigned int uevent_suppress:1; }; 内核kobject(4) 内核kobject(5) 添加属性文件: int sysfs_create_file(struct kobject *kobj,const struct attribute *attr); 删除属性文件: void sysfs_remove_file(struct kobject *kobj , const struct attribute *attr); 内核kobject(6) 内核kset struct kset { struct list_head list;/*连接所包含的kobject对象的链表首地址*/ spinlock_t list_lock;/*用于避免竞态的自旋锁*/ struct kobject kobj; /*嵌入的kobject*/ struct kset_uevent_ops * uevent_ops; /*指向热插拔操作表的指针*/ }; kobject通过kset组织成层次化结构,kse
您可能关注的文档
最近下载
- 数字水务智慧水务整体解决方案.docx VIP
- 高中物理力学探究活动设计.doc VIP
- 温州大学432统计学2020---2021年考研专业课初试真题.pdf VIP
- 海底捞绩效考核海底捞绩效考核.doc
- 海南大宗商品交易所.pptx VIP
- 2020年温州大学考研真题432统计学(2020年) .pdf VIP
- 石河子大学2023-2024学年第1学期《宏观经济学》期末考试试卷(A卷)附标准答案.docx
- 2025届全国各地高三模拟试题分类精编01集合与常用逻辑用语学生版.pdf VIP
- 储能系统并网发电启动试运行方案.pdf VIP
- 食品饮料行业深度报告:社会减糖大势所趋,明星产品呼之欲出-241114-东北证券-56页.pdf VIP
文档评论(0)