Linux内核检测USB事件

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

请教:内核模块变量问题

L hotplug: env=MINOR=258
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 

可以共享一份您推荐的 黎锐雪溢的博客 书籍的电子版吗?全部的电子版目前尚未出来,请耐心等待。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值