linux udev 机制
来源:互联网 发布:淘宝买玩具枪犯法吗 编辑:程序博客网 时间:2024/05/28 05:18
1. linux的热插拔事件由kernel通过中断发现(比如,USB设备插入系统时,usb host会检测到这一事件,然后向CPU发送中断请求,并获取该usb设备的信息,usb core会根据usb id来匹配调用一个合适的usb driver处理该usb设备),然后kobject_add需要为用户空间添加信息(通过sysfs文件系统实现。sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可通过修改sysfs中的文件属性来修改设备的属性值),然后内核调用kobject_uevent函数发送netlink message给用户空间(Kobject创建和移除的时候都会发送相应add和remove消息,当然前提是您在内核中配置了hotplug的支持)。
2. udevd收到netlink message后查找规则处理。例如,udevd的规则如下:
60-fprint-autosuspend.rules 60-raw.rules 90-alsa.rules 91-drm-modeset.rules
60-pcmcia.rules 70-persistent-net.rules 90-hal.rules 98-kexec.rules
其中90-hal.rules是用来让udev把设备插入/拔除的事件通过socket socket:/org/freedesktop/hal/udev_event转发给HAL。
3. HAL挂在socket:/org/freedesktop/hal/udev_event上等待事件,有事件发生时就调用函数hald_udev_data处理,它先从事件中取出主要参数,创建hotplug_event对象,把它放入事件队列中,然后调用hotplug_event_process_queue处理事件。
函数hotplug_event_begin负责具体事件的处理,它把全部事件分为四类,并分别处理hotplug_event_begin_sysfs处理普通设备事件,hotplug_event_begin_acpi处理ACPI事件,hotplug_event_begin_apm处理APM事件,hotplug_event_begin_pmu处理PMU事件。要注意的是,后三者的事件源并非源于udev,而是在device_reprobe时触发的(osspec_device_reprobe/hotplug_reprobe_tree/hotplug_reprobe_generate_add_events/acpi_generate_add_hotplug_event)。
函数hotplug_event_begin_sysfs中,如果是插入设备,则创建一个设备对象,设置设备的属性,调用相关callouts,然后放入设备列表中,并触发signal让dbus通知相关应用程序。如果是拔除设备,则调用相关callouts,然后从设备列表中删除,并触发signal让dbus通知相关应用程序。
4.应用程序可以主动调用HAL提供的DBUS接口函数,这些函数在libhal.h中有定义。应用程序也可以注册HAL的signal,当设备变化时,HAL通过DBUS上报事件给应用程序。
- linux udev 机制
- linux udev
- Linux热插拔hotplug 与mdev 和udev机制
- netlink机制和udev实例
- netlink机制和udev实例
- netlink机制和udev实例
- linux udev详解
- linux驱动之--udev
- Linux┊详解udev
- Xen, Linux and udev
- linux udev认识
- linux udev概述
- linux udev设备管理
- linux udev浅析
- 初探Linux之udev
- linux之udev
- linux下udev简介
- Linux┊详解udev
- How to create a Java component with Eclipse
- ios开发资料
- socket program error:Socket operation on non-socket
- Java类获取Spring的applicationContext.xml文件中的bean
- 解决【Warning: Cannot modify header information - headers already sent by....】
- linux udev 机制
- linux 删除含特殊字符文件
- sqlserver事务的用法
- Linux下各种压缩文件的解压方法
- 响应式布局插:isotope和masonary
- mysql新建数据库和创建用户的命令
- 【Android 开发教程】AnalogClock和DigitalClock
- 移动互联网发展趋势
- open和fopen的区别