linux sysfs(4)

通过上一节,我们使用公司模型来理解设备驱动,我们基本上建立一个运动会模型。
KObject就是基本的人,/sys下面的每一个目录必须是KObject
Kset也是一个人,不好意思,她不是公司,她只是公司请来的礼仪小姐
Bus,一个礼仪小姐,扛着一个牌子写着bus名称
devices,不好意思,这个是真的员工了。
driver,这个我们比作家长或者说亲属。
但是,除了这几个东西外,我们看系统编队中,好像还漏了一些东西?那些东西?比如uevent,drivers_autoprobe, drivers_probe.
先不管它从哪里来到哪里去,以及有什么用。先简单讲解这个几个东西的作用
uevent其实背后牵扯到一个uevent的工作机制
大概工作过程如下:
Uevent是干什么用的?我现在浅显理解,就是Uevent是内核给外部的事件通知。还是使用我们公司模型来理解,内核为何需要给用户空间通知信息呢?
例如,我们内核是一个研发人员,通过公司的一系列接口,正帮助外边客户解决问题。今天,这个研发人员生病了,请病假?要不要通知客户?要是具体情况,如果是十万火急的案子,就必须通知。如果不是,看情况处理吧。请病假还好,如果要是离职呢?怎么办?当然办理离职手续的过程也要通知客户,或者是换人,或者是取消项目。
这样,大概就可以理解什么是uevent了吧。本来uevent是设计用来处理设备热插拔的处理,不过后来看这种方法挺好用,于是很多东西都借用这个机制,例如电池电量的改变,网卡需要下载rom等都使用这个机制。这也不奇怪,例如短信的通道,本来是做调试用的,没有想到最后居然发展成为这么大市场,而最根本的调试功能却几乎被遗忘了。
在回过头来看整体的情况,一个设备放入linux系统中间,如果我们想操作这个设备,有了三个方法了。
第一个方法,就是通过设备在/dev下面建立文件,使用fopen()等方法操作设备
第二个方法,input devices的方式。
第三个方法,就是通过uevent这个通道传递一些信息。

第一种方法,我觉得等待数据过程,一定会有中断产生,中断时间如何通知到上层程序的呢?(先不管他)
第二种方法,系统中间很多事件都是采用这个方式,例如触摸屏事件、按键事件等,这些需要要求系统设备在注册的时候,需要注册一个input类型的设备,这些设备会被Android EventHub线程轮询,得知这些事件,分发处理?
先不管这些,对于这些非正规的事件,特别是设备没有准备好的情况下就发生的时间,我们uevent就是提供了这种机制,来和用户空间通讯。

如果按照我的公司模型描述,那么
第一种方法就是ftp的方式,用来和客户交互交付件等大型数据,例如给客户提供新的rom,1G那么大。
第二种方法就是邮件的方式,用来给客户提供一些小型的数据。
第三种方法就是留下及时联系方法,例如QQ等。

打个比方来说,A公司给我们被分析公司发了一个请求开发某个产品的请求。而这个产品的研发团队(也可能是一个人就够了),为了描述的方便,我们假设就1个人就够了。
公司一直招聘,没有找到合适的人员,某天,一个牛人找到研发部的老大,说他能胜任这个工作,研发老大和人力资源一起面试,发现这个人可以使用,就通过那个公用的qq,告诉A公司,我们公司已经有你所要求的人员到位了,把人员相应的信息发送给了A公司。
A检查一下,确实OK,于是就启动A公司对该产品相关启动的资源配置和流程工作。udev的整个过程就是这个样子。
这个员工的相关注册过程,就是前几个部分讲述的sysfs功能,这里和客户公司的沟通,就是udev部分。
研发团队对应插入的总线,研发老大对应总线的控制器,可以检查到设备的接入。研发老大和人力资源等一起面试,就是设备插入之后,系统对设备的检测,这个员工的入职就是设备的注册。qq对应netlink和udev和mdev的沟通路径。

这样而言,其实只要有相关的uevent方法就可以了,为什么在kset下面以及subsystem下面还需要一个可见的uevent属性文件呢?据说是为了调试使用,方便用户调试,这些 /devices/ 属性文件都支持写入,当前支持写入的参数有 "add","remove","change","move","online","offline"。如,写入 "add",这样可以向 udevd 发送一条 netlink 消息,让它再重新一遍相关的 udev 规则文件;这个功能对开发人员调试 udev 规则文件很有用。

autoprobe:这个属性文件非常简单,就是定义盖总线是否自动扫描设备。
drivers_probe最终链接到一个程序,在这个程序中间会扫描总线的设备,然后使用drivers_probe所定义的链接函数,去总线上需找匹配的设备。
在强调一遍,先不管它从哪里来到哪里去,以及有什么用。
下一节,我们讨论一下核心数据结构和表象之间的关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值