关于linux中的NetLink监听热插拔的问题(内核中谁在发包)

袁保康 2013-11-26 12:18:53
最近想要了解监听热插拔的问题,可以用NetLink实现开机后的一切热插拔,当然我主要关心usb(usb wifi),不管有没有驱动,我先获得它的idProduct,然后做后续处理。

现在比较郁闷的是在我要监听的这个usb设备(usb wifi)如果是在系统启动前就插上了,我就NetLink检测程序就没办法被调用,因为收不到热插拔的事件。

综上所述,我就没有办法实现我的要求了。

其它,比较好奇的是u盘在开机之前插入就可以收到事件。这个就不明白是为什么了,我usb wifi就没有办法收到这个是很奇怪的事情。

还有一点:这个数据包在内核中具体是谁在发,说到这里我也纳闷udev了,比如在udev之前启动的已经插入的usb设备,udev怎么去收到NetLink数据包呢?

对于这些问题,我知道最好的解决方法是:read the fu*king code.

但是我现在很多概念都不是太清晰,请各位解惑!

=====================分隔线==========================
现在知道只要驱动中注册了/sys文件系统,且有event这个方法,就会发。但是为什么后启动的应用程序能接收先发送的事件呢?
...全文
499 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
袁保康 2013-12-02
  • 打赏
  • 举报
回复
引用 1 楼 pottichu 的回复:
1. 你直接通过 /proc/bus/usb/devices 就可以查看已经插入的设备, 2. 通过 lsusb 也可以。 3. /sys/bus/usb/devices/usb1/idProduct 也可以。 至于 udev 怎么获取的, 我不确定,没看过代码。 但是完全可以通过以上3种方法知道设备是否已经插入。
谢谢,最后采用了是往/sys/.../uevent中写入"add"来让内核再发一遍事件,然后我再做处理。
pottichu 2013-12-02
  • 打赏
  • 举报
回复
1. 你直接通过 /proc/bus/usb/devices 就可以查看已经插入的设备, 2. 通过 lsusb 也可以。 3. /sys/bus/usb/devices/usb1/idProduct 也可以。 至于 udev 怎么获取的, 我不确定,没看过代码。 但是完全可以通过以上3种方法知道设备是否已经插入。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧