Linux内核检测USB事件
来源:互联网 发布:网络群发软件通科 编辑:程序博客网 时间:2024/06/13 19:21
Linux内核检测USB事件大家好,我要在Linux内核层中实现以下功能:当有U盘插入时,能检测到这一动作,并对U盘进行验证,只有通过验证的U盘才允许使用。比如只有U盘的某个特定扇区是自己定义的内容时才允许使用。
请问,有什么好的思路吗?如果你能找到u盘的唯一标识的话,可以用个散列算法比如md5(当然不要告诉别人),然后固定存在u盘的某个区域。比如mbr后面有32KB的最后部分。
不过唯一标识应该没有那么好找的吧,除非自己定制u盘。
回复 2# blake326
多谢blake兄。不过我现在遇到的困难是:不知道应该怎样在内核层检测U盘插入事件。
当一个USB设备插入系统后,usb host会检测到这一事件,然后向CPU发送中断请求,并获取该usb设备的信息。usb core会根据usb id来匹配调用一个合适的usb driver处理该usb设备。
那么,我应该在内核的哪一层来检测U盘的插入事件呢?
1. 是应该修改内核文件drivers/usb/storage/usb.c文件吗?但是这样做需要重新编译内核,不实用。
2. 自己写一个usb driver,来专门处理自己需要验证的一类U盘?
请大家多多指点。
gfengict 发表于 2012-02-21 21:47 static/image/common/back.gif
回复 2# blake326
多谢blake兄。不过我现在遇到的困难是:不知道应该怎样在内核层检测U盘插入事件。
有现实的接口,钊钊恒行的博客udev可以捕获它。回复 4# 独孤九贱
请问现实的接口具体是什么? udevd就是一个应用程序,你直接使用它就可以满足你的需求了,如果你非要自己的实现,那就下载它的源代码吧。内核新驱动模型对这种热插拔提供了很好的支持,除去udev这些,你自己还有更大的自主权去控制这种热插拔事件,虽然本意并非给自己的书做广告,但是这种对U盘插入的检测在《深入Linux设备驱动内核机制》第9章有个具体的例子,通过kobject/kset的特性自己实现了一个捕捉热插拔事件的程序:
“本例展示了在Linux设备模型最底层kobject一级的sysfs文件系统的作用以及对设备热插拔机制的支持,虽然内核已经通过更高层次的bus、device与driver这些对象向程序员屏蔽了sysfs和uevent底层www.shhongcai.com,昱昱炎炎的这些操作,但是我们应该知道bus、device与driver这一层面的诸如属性文件相关操作以及对设备热插拔特性的支持,其幕后的原理其实就发源于此。
这段文字临结束时,我又突发奇想,不妨插个U盾到机器里来看看会发生什么,于是/var/log/messages中就有了下面的输出:Jun 19 04:11:45 AMDLinuxFGL kernel: [ 5803.856011] usb 3-1: new full speed USB device number 3 using uhci_hcd
Jun 19 04:11:46 AMDLinuxFGL hotplug: ----------------------------------------
Jun 19 04:11:46 AMDLinuxFGL hotplug: argv=usb
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=ACTION=add
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb3/3-1
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=SUBSYSTEM=usb
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=MAJOR=189
Jun 19 04:11:46 AMDLinuxFG
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=DEVNAME=bus/usb/003/003
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=DEVTYPE=usb_device
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=PRODUCT=8e6/1813/100
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=TYPE=0/0/0
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=BUSNUM=003
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=DEVNUM=003
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=SEQNUM=1470
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=HOME=/
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=PATH=/sbin:/bin:/usr/sbin:/usr/bin
Jun 19 04:11:46 AMDLinuxFGL hotplug: ----------------------------------------
...一旦你检测到这种热插拔事件,下面做什么还不是你说了算
回复 7# MagicBoy2010
可以共享一份您推荐的黎锐雪溢的博客书籍的电子版吗?全部的电子版目前尚未出来,请耐心等待。。。
请问,有什么好的思路吗?如果你能找到u盘的唯一标识的话,可以用个散列算法比如md5(当然不要告诉别人),然后固定存在u盘的某个区域。比如mbr后面有32KB的最后部分。
不过唯一标识应该没有那么好找的吧,除非自己定制u盘。
回复 2# blake326
多谢blake兄。不过我现在遇到的困难是:不知道应该怎样在内核层检测U盘插入事件。
当一个USB设备插入系统后,usb host会检测到这一事件,然后向CPU发送中断请求,并获取该usb设备的信息。usb core会根据usb id来匹配调用一个合适的usb driver处理该usb设备。
那么,我应该在内核的哪一层来检测U盘的插入事件呢?
1. 是应该修改内核文件drivers/usb/storage/usb.c文件吗?但是这样做需要重新编译内核,不实用。
2. 自己写一个usb driver,来专门处理自己需要验证的一类U盘?
请大家多多指点。
gfengict 发表于 2012-02-21 21:47 static/image/common/back.gif
回复 2# blake326
多谢blake兄。不过我现在遇到的困难是:不知道应该怎样在内核层检测U盘插入事件。
有现实的接口,钊钊恒行的博客udev可以捕获它。回复 4# 独孤九贱
请问现实的接口具体是什么? udevd就是一个应用程序,你直接使用它就可以满足你的需求了,如果你非要自己的实现,那就下载它的源代码吧。内核新驱动模型对这种热插拔提供了很好的支持,除去udev这些,你自己还有更大的自主权去控制这种热插拔事件,虽然本意并非给自己的书做广告,但是这种对U盘插入的检测在《深入Linux设备驱动内核机制》第9章有个具体的例子,通过kobject/kset的特性自己实现了一个捕捉热插拔事件的程序:
“本例展示了在Linux设备模型最底层kobject一级的sysfs文件系统的作用以及对设备热插拔机制的支持,虽然内核已经通过更高层次的bus、device与driver这些对象向程序员屏蔽了sysfs和uevent底层www.shhongcai.com,昱昱炎炎的这些操作,但是我们应该知道bus、device与driver这一层面的诸如属性文件相关操作以及对设备热插拔特性的支持,其幕后的原理其实就发源于此。
这段文字临结束时,我又突发奇想,不妨插个U盾到机器里来看看会发生什么,于是/var/log/messages中就有了下面的输出:Jun 19 04:11:45 AMDLinuxFGL kernel: [ 5803.856011] usb 3-1: new full speed USB device number 3 using uhci_hcd
Jun 19 04:11:46 AMDLinuxFGL hotplug: ----------------------------------------
Jun 19 04:11:46 AMDLinuxFGL hotplug: argv=usb
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=ACTION=add
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb3/3-1
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=SUBSYSTEM=usb
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=MAJOR=189
Jun 19 04:11:46 AMDLinuxFG
请教:内核模块变量问题
L hotplug: env=MINOR=258Jun 19 04:11:46 AMDLinuxFGL hotplug: env=DEVNAME=bus/usb/003/003
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=DEVTYPE=usb_device
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=PRODUCT=8e6/1813/100
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=TYPE=0/0/0
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=BUSNUM=003
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=DEVNUM=003
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=SEQNUM=1470
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=HOME=/
Jun 19 04:11:46 AMDLinuxFGL hotplug: env=PATH=/sbin:/bin:/usr/sbin:/usr/bin
Jun 19 04:11:46 AMDLinuxFGL hotplug: ----------------------------------------
...一旦你检测到这种热插拔事件,下面做什么还不是你说了算
回复 7# MagicBoy2010
可以共享一份您推荐的黎锐雪溢的博客书籍的电子版吗?全部的电子版目前尚未出来,请耐心等待。。。
0 0
- Linux内核检测USB事件
- linux下,如何检测USB口热插拔事件。
- Linux下USB设备检测
- Linux下USB设备检测
- Linux下USB设备检测
- 【转】Linux-USB-检测枚举
- Linux下USB设备检测
- Linux下USB设备检测 .
- Linux 系统USB设备检测
- 检测USB插入和移除事件
- 检测USB插入和移除事件
- WM_DEVICECHANGE 检测USB的热拔插事件
- mfc检测usb插拔事件
- Linux内核USB主设备驱动程序
- linux内核USB相关数据结构
- USB线插拔检测使用UEventObserver检测uevent事件的分析
- Linux内核死锁(deadlock)检测
- Linux下USB设备的检测
- B/S交互中为何出现乱码个人浅析
- pip的安装
- Intellij IDEA常用配置详解
- 应用框架层Manager套路
- dschubba
- Linux内核检测USB事件
- Media媒体操作套路
- UML---类图和对象图
- Java 8 最佳技巧
- Android 源码在线查看
- 内容解析者调用提供者套路
- 类中implements Serializable有什么作用
- Android 镂空效果的遮罩层实现
- 如何使用 Git 管理二进制大对象