2014-04-19 设备管理之设备模型

起初时为了支持电源管理等新特性的需求,建立一种设备的拓扑结构。Linux内核在2.6版时,增加了对设备模型的抽象,现在它具有非常强大的功能;它的引入类似于C++的抽象机制,总结出设备驱动程序的共性,提取总线和核心层。


(1)kobject是组成设备模型的基本结构,包括对象的引用计数kref(为0时就可删除);parent指向object的父对象;sysfs其实用来表示kobject对象的层次结构;它通常是嵌入到其他结构中的,单独意义其实不大,如cdev中就嵌入了kobject,于是就有了kobject提供的标准功能,嵌入的kobject可以成为对象层次结构的一部分,cdev->obj.parent,cdev->obj.entry插入到对象层次结构中。它还包含kobj_type。


(2)kobj_type是关联对象的一种特殊类型,描述一族kobject所具有的普遍特性,如此,不需要为每一个object定义自己的特性;sysfs_ops描述了sysfs文件的读写时的特性;release是指向konject引用计数为0时的析构函数;default_attrs是一个attribute结构体的数组,描述了给定对象的特征,在kobject导出到sysfs时,这些属性都将相应的作为文件导出。


(3)kset是kobject对象的集合体,将他们集中到同一个集合中,是与ktype不同的,其实具有相同的type是可以分组到不同的kset中;list_head,list_lock分别用于连接对象和保护;kobj代表该集合的基类,自己的;uvent_ops提供了与用户空间热插拔通信机制,在kobject在创建或删除时就会产生热插拔事件。        


(4)kobject是隐藏在sysfs虚拟文件系统后的机制,对于sysfs中的每一个目录,内核中都有一个对应的kobject(包含多个属性);调用kobject_add时就能在sysfs中显示kobject;默认属性是有kobject_type提供的;非默认,二进制属性可分别有对应创建而生成。


(5)总线是处理器与一个或多个设备之间通信的通道;在设备模型中,所有的设备都通过总线相连;一个总线包含两个kset,分别表示插入总线的drivers和devices;每一个总线都有自己的子系统,但并不在sysfs的顶层出现,还是在bus总线子系统下出现;总线层也有属性(bus_attribute)和总线方法(match,hotplug等)。


(6)linux中的每一个设备都用device结构来表示,如device_register就可注册设备;设备也有操作和属性(device_attribute;设备驱动程序device_driver的思想类似。


(7)类class是一个设备的高层视图,抽象除了低层的实现细节,如统一化磁盘(SCSI,ATA);在/sys/class目录中,你可以找到所有的输入设备/sys/class/input,/sys/block较特殊;类成员一般是由上层代码控制的,它是向用户空间导出信息的最好方法;


(8)udev依赖于sysfs输出到用户空间的所有设备信息,以及当时设备添加或删除时,sbin/hotplug对它的通知;用户可以在/etc/udev/rules.d/定义自己对设备的特点设置规则。


         


                  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值