linux设备模型详解

linux设备模型详解

ID:13912282

大小:67.50 KB

页数:9页

时间:2018-07-24

linux设备模型详解_第1页
linux设备模型详解_第2页
linux设备模型详解_第3页
linux设备模型详解_第4页
linux设备模型详解_第5页
资源描述:

《linux设备模型详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、linux设备模型详解1.背景随着设备拓扑结构越来越复杂,需要为内核建立一个统一的设备模型,对系统结构做一般性的抽象描述。有了该抽象结构,可支持多种不同的任务:-电源管理完成电源管理工作需要对系统结构的理解,且有严格的顺序,如:一个USB宿主适配器,在处理完所有与其相连接的设备面前是不能关闭的;-与用户空间通信由/sysfs虚拟文件系统展示设备的属性-热插拔设备-对象生命周期2.sysfs虚拟文件系统sysfs是一个特殊的文件系统,类似于/proc。sysfs不仅象/proc一样允许用户空间访问内核的数

2、据,而且它以更结构化的方式向用户提供内核数据信息。sysfs的一个目的就是展示设备驱动模型中各组件的层次关系。其顶级目录包括:-block-device-bus-drivers-class-power-firmware每个目录代表一个kobject对象,每个文件代表kobject的属性。3.Kobject、Kset和subsystemKobjectKobject是组成设备模型的基本结构。类似于C++中的基类,它嵌入于更大的对象的对象中--所谓的容器--用来描述设备模型的组件。如bus,devices,d

3、rivers都是典型的容器。容器有了kobject之后,允许内核:n保存对容器的引用计数n保存容器之间的层次关系n为每个容器的属性提供一个用户视图structkobject{char*k_name;charname[20];structk_refkref;structlist_headentry;structkobject*parent;structkset*kset;structktype*ktype;structdentry*dentry;};structkobj_type{void(*releas

4、e)(structkobject*);structsysfs_ops*sysfs_ops;structattribute**default_attrs;};Kset一个kset是嵌入相同类型结构的kobject集合。structkset{structsubsystem*subsys;structkobj_typektype;structlist_headlist;structkobjectkobj;structkset_hotplug_ops*hotplug_ops;};Subsystem一系列的kse

5、t就组成了subsystem.subsystem可以包括不同类型的kset,它只有两个成员structsubsystem{structksetkset;structrw_semaphorerwsem;};2.设备驱动模型的组件devicestructdevice{structlist_headnode;structlist_headbus_list;structlist_headdriver_list;structlist_headchildren;structdevice*parent;structk

6、objectkobj;char[]bus_id;structbus_type*bus;structdevice_driver*driver;void*driver_data;void*platform_data;.....void(*)(struct*device)release;};driverstructdevice_driver{char*name;structbus_type*bus;structsemaphoreunload_sem;structkobjectkobj;structlist_h

7、eaddevices;structmodule*owner;int(*probe)(structdevice*);int(*remove)(structdevice*);void(*shutdown)(structdevice*);int(*suspend)(structdevice*unsignedlong,unsignedlong);int(*resume)structdevice*,unsignedlong);};busstructbus_type{char*name;structsubsyste

8、msubsys;structksetdrivers;structksetdevices;structbus_attribute*bus_attrs;structdevice_attribute*dev_attrs;structdriver_attribute*drv_attrs;int(*match)(structdevice*,structdevice_driver*);int(*hotplug)(structdevice*,char**

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。