Linux内核检测USB事件

12 篇文章 0 订阅
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
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

文件为doc版,可自行转成txt,在手机上看挺好的。 本资源来自网络,如有纰漏还请告知,如觉得还不错,请留言告知后来人,谢谢!!!!! 入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。 不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。 ◆ 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last; ◆ 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln; ◆ 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab; ◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup; ◆ 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who; ◆ 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。 本文以Mandrake Linux 9.1(Kenrel 2.4.21)为例,介绍Linux下的安装和登录命令。 immortality按:请用ctrl+f在本页中查找某一部分的内容或某一命令的用法。 -------------------------------------------------------------------------------- Linux必学的60个命令(1)-安装与登陆命令 login 1.作用 login的作用是登录系统,它的使用权限是所有用户。 2.格式 login [name][-p ][-h 主机名称] 3.主要参数 -p:通知login保持现在的环境参数。 -h:用来向远程登录的之间传输用户名。 如果选择用命令行模式登录Linux的话,那么看到的第一个Linux命令就是login:。 一般界面是这样的: Manddrake Linux release 9.1(Bamboo) for i586 renrel 2.4.21-0.13mdk on i686 / tty1 localhost login:root password: 上面代码中,第一行是Linux发行版本号,第二行是内核版本号和登录的虚拟控制台,我们在第三行输入登录名,按“Enter”键在Password后输入账户密码,即可登录系统。出于安全考虑,输入账户密码时字符不会在屏幕上回显,光标也不移动。 登录后会看到下面这个界面(以超级用户为例): [root@localhost root]# last login:Tue ,Nov 18 10:00:55 on vc/1 上面显示的是登录星期、月、日、时间和使用的虚拟控制台。 4.应用技巧 Linux 是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许一个用户进行多次登录。这是因为Linux和许多版本的Unix一样,提供了虚拟控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。每个虚拟控制台可以看作是一个独立的工作站,工作台之间可以切换。虚拟控制台的切换可以通过按下Alt键和一个功能键来实现,通常使用F1-F6 。 例如,用户登录后,按一下“Alt+ F2”键,用户就可以看到上面出现的“login:”提示符,说明用户看到了第二个虚拟控制台。然后只需按“Alt+ F1”键,就可以回到第一个虚拟控制台。一个新安装的Linux系统允许用户使用“Alt+F1”到“Alt+F6”键来访问前六个虚拟控制台。虚拟控制台最有用的是,当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作,关闭这个程序。 shutdown 1.作用 shutdown命令的作用是关闭计算机,它的使用权限是超级用户。 2.格式 shutdown [-h][-i][-k][-m][-t] 3.重要参数 -t:在改变到其它运行级别之前,
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值