2011-7-29 12:31:18
来源:互联网 发布:北大青鸟java学费多少 编辑:程序博客网 时间:2024/05/20 10:53
2011-7-29 12:31:18
核和应用程序见的通信通道就是 udev,hal。 udev 只是一个框架,它的行为完全受它的规则所控制,这些规则存放在目录 /etc/udev/rules.d/ 中。udev 通过 NetLink
注册内核的设备事件,当有设备插入 / 拔除时,udev 就会收到内核的通知,然后它会从事件中所带参数和 sysfs 中的信息加载适当的驱动程序,创建 dev 下的结点,
让设备处于可用的状态,最后通知 hal。
HAL 等待 udev 报告事件,有事件发生时就处理。如果是插入设备,则创建一个设备对象,设置设备的属性,调用相关callouts,然后放入设备列表中,并触发 signal 让 dbus
通知相关应用程序。如果是拔除设备,则调用相关callouts,然后从设备列表中删除,并触发signal让 dbus通知相关应用程序。应用程序也可以主动调用HAL提供的DBUS接口函数,
这些函数在libhal.h中有定义。应用程序也可以注册HAL的signal,当设备变化时,HAL通过DBUS上报事件给应用程序。
大概的流程就是:
_____________________________________________________
App App等候设备处理信息并执行相应操作
↑
D-Bus 用户空间消息总线系统
↑
HAL 过滤处理内容后送给D-Bus
↑ 它是一个位于操作系统和驱动程序之上,
↑ 运行在用户空间中的服务程序
udev 把硬件相关内容送到HAL
↑ kernel2.6发现设备变化反映到sysfs,
↑ 并通过hotplug机制通知udev
Linux Kernel2.6 内核自动调用驱动模块
————————————————————————-
例如您插入了一个 u盘,内核探测到硬件,加载驱动,然后通知 udev;udev 把硬件相关信息发送给 hal;hal 描述硬件用法、特性、类型、能力,发送给 dbus;最后
bus 通知相关程序,这时候您就可以看到 gnome 自动挂载了您的 u盘,并让您选择是以 nautilus 浏览文件,还是 smplayer 播放媒体 —— 这背后的一切,都是在您不知不觉中完成的。
内核也可以直接传递信息给 hal ,方式有两种: callout 和 addon 。前者在设备 插入/拔除 时候响应;后者处理没有 hotplug 的事件,如光驱状态,电源管理等。
- 2011-7-29 12:31:18
- 2011-7-31 12:59:42
- 2011-7-29 12:44:06
- 2011-7-29 12:34:19
- 2011-7-29 15:12:24
- 2011-7-18 16:12:05
- 2011-12-31
- 2011-12-29
- linux多線程信號總結[2011/12/31]
- 2011-12-29【周四】工作
- 2011-12-29学习所得
- 2011-7-29-14-20
- iPhone梦想 2011/12/18
- 2011-8-8 18:48:31
- 2011-9-18 14:31:20
- 8/18/2011 2:29:43 PM
- 2010-12-31--------------2011-1-9
- Android日记之2011/12/31
- iPhone开发学习笔记--UIScrollView
- PKU 3667
- Oracle RAC Past Image(PI) 说明
- Arx无模态窗口类定义
- zoj 1128 || poj 1151 Atlantis(线段树求矩形面积并)
- 2011-7-29 12:31:18
- java中调用浏览器的代码
- 数据块(Data Block)原理深入剖析
- ASP.NET关于GridView导出Excel
- 自己通过坐标转化,实现的一个按钮。绘图绘制的
- 跟我一起写Makefile:书写规则
- 枚举
- 女生饮酒过量致死
- Android APK反编译