用户空间的udevd如何知道ADD的是device还是driver呢
今天研究udev,发现内核其实是通过kobject_uevent来向用户空间的udevd发送netlink信息于是查看了下内核源码,看看内核在什么时候会发送udev netlink信息,其实也就是想知道哪些内核函数会调用kobject_uevent了
发现主要有以下几处:
1.driver_register -> kobject_uevent
2.device_register -> device_add -> kobject_uevent
3.kset_register -> kobject_uevent
之前本以为内核只是在注册device的时候会发送udev netlink信息,但其实在register driver的时候也会发送udev netlink信息,那么问题来了:
1. 在注册设备的时候,得到设备信息之后,把设备信息通过netlink发给用户空间的udevd,用户空间的udevd通过这些设备信息,加载相应的驱动,这就是驱动的自动加载机制,这个可以理解;
那注册driver的时候,发送udev netlink信息是为了什么呢?
2. 在查看用户空间udevd 的rules规则的时候,也没有看到有对device 或者 driver 做区分,那么,假如是ADD操作,udevd如何区分ADD的是device还是driver呢?
请精通udev的大神门给点提示哇~~感谢 回复 1# jinxinxin163
1. 在注册设备的时候,得到设备信息之后,把设备信息通过netlink发给用户空间的udevd,用户空间的udevd通过这些设备信息,加载相应的驱动,这就是驱动的自动加载机制,这个可以理解;
那注册driver的时候,发送udev netlink信息是为了什么呢?
驱动加载了,可设备文件还没有创建呀!driver装载后,设备号才确定,这时后再通知udev根据相应的规则去创建设备文件。
2. 在查看用户空间udevd 的rules规则的时候,也没有看到有对device 或者 driver 做区分,那么,假如是ADD操作,udevd如何区分ADD的是device还是driver呢?
你man一下udevd,看看http://linux.die.net/man/8/udevd。
加上以下的选项:
--debug-trace
Run all events completely serialized. This may be useful if udev triggers actions or loads kernel modules which cause problems and a slow but continuous operation is needed, where no events are processed in parallel.
--debug
Print debug messages to stderr.
自已对比一下不就什么都清楚了吗。我没有去看,至少通过SUBSYSTEM还是能区分的。
你对udev的机制太不了解,可以自己先baidu学习一下。
如:http://www.cnblogs.com/sopost/archive/2013/01/09/2853200.html
页:
[1]