本发明涉配usb设备识别技术领域,特别是涉及一种在linux内核中识别特定usb大容量存储设备的方法及系统。

背景技术:

在linux系统下对usb设备进行管控,一般而言有两种方法,一种是阻断新插入设备为主,辅之以禁用已生效设备,另一种为定时扫描并且禁用设备,前一种方法阻断及时,设备未生效就已被阻断,但实现难度大,后一种方法实现简单,但阻断效果一般。就工作场景而言,分为内核态、应用层程序态以及两者混合模式,相对而言,内核态直接通过内核模块控制设备驱动的加载,效果更佳,但开发维护难度大。

综上所述,采用内核态的usb设备阻断模式对于usb设备管控更加有效,但该方案难度之一在于管控模块在usb设备插入之后,操作系统匹配驱动之前需要完成插入usb设备的识别和阻断。

linux内核中usb设备的识别最常用的方法就是获取usb设备的描述符信息进行解析,根据描述符的配置推断出usb设备的类型,但是对于某一类配置信息可能存在多种设备类型,比如usb大容量存储设备。常用的usb大容量存储设备(usb设备描述符主设备号或者接口描述符主接口号为0x08)一般主要有以下几类:usb外置光驱、usb外置软驱、u盘和其他设备,其他设备包含配置不标准设备和比较少见设备,在此暂不予考虑。usb外置软驱的设备描述符次设备号或者接口描述符次接口号为0x04,相对好区分,在此不予过多描述;usb外置光驱和u盘的设备描述符次设备号或者接口描述符次接口号均为为0x06(usb0806设备),造成两者在usb描述符层面上难以准确识别,同时两者在usb子系统驱动匹配层面上都能且只能匹配到名称为“usb-storage”的驱动模块,同样难以准确识别。

技术实现要素:

本发明的目的是提供一种在linux内核中识别特定usb大容量存储设备的方法及系统,旨在解决现有技术中usb外置光驱和u盘两者难以准确识别的问题,实现通过内核层完成对usb0806设备的识别,提高识别准确率。

为达到上述技术目的,本发明提供了一种在linux内核中识别特定usb大容量存储设备的方法,所述方法包括以下步骤:

s1、usb0806设备在usb子系统匹配usb-storage驱动模块,匹配完成后进入scsi子系统驱动匹配模式;

s2、通过scsi子系统的scsi设备描述结构通过linux内核设备树向上遍历父设备,找到对应usb子系统的usb设备描述结构;

s3、如当前usb0806设备的scsi设备类型标明为type_rom或type_wrom类型,则该设备为usb外置光驱设备;如当前usb0806设备的scsi设备类型标明为type_disk、type_mod或者type_rbc类型,则该设备为u盘。

优选地,所述方法还包括对特定usb大容量存储设备的管控,具体如下:

根据usb设备的策略选择是否允许操作系统对当前usb0806设备进行相关的驱动匹配动作,如策略禁止,则usb外置光驱设备与名称为sr的驱动模块不允许进行匹配,u盘与名称为sd的驱动模块不允许进行匹配;反之策略允许就放行。

优选地,所述usb大容量存储设备的描述符信息中主设备号为0x08,次设备号为0x06,或接口描述符主接口号为0x08,次接口号为0x06。

本发明还提供了一种在linux内核中识别特定usb大容量存储设备的系统,所述系统包括:

usb-storage驱动匹配模块,用于usb0806设备在usb子系统匹配usb-storage驱动模块,匹配完成后进入scsi子系统驱动匹配模式;

设备描述结构遍历模块,用于通过scsi子系统的scsi设备描述结构通过linux内核设备树向上遍历父设备,找到对应usb子系统的usb设备描述结构;

类型匹配模块,用于如当前usb0806设备的scsi设备类型标明为type_rom或type_wrom类型,则该设备为usb外置光驱设备;如当前usb0806设备的scsi设备类型标明为type_disk、type_mod或者type_rbc类型,则该设备为u盘。

优选地,系统还包括设备管控模块,用于根据usb设备的策略选择是否允许操作系统对当前usb0806设备进行相关的驱动匹配动作,如策略禁止,则usb外置光驱设备与名称为sr的驱动模块不允许进行匹配,u盘与名称为sd的驱动模块不允许进行匹配;反之策略允许就放行。

优选地,所述usb大容量存储设备的描述符信息中主设备号为0x08,次设备号为0x06,或接口描述符主接口号为0x08,次接口号为0x06。

发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:

与现有技术相比,本发明针对usb外置光驱和u盘两者难以准确识别的问题,在usb子系统驱动匹配层面上主动放过usb0806设备,进入scsi子系统驱动匹配模式,由scsi子系统的scsi设备描述结构可以通过linux内核设备树向上遍历父设备的方法找到相对应的usb子系统的usb设备描述结构,并在scsi子系统中根据usb0806设备的scsi设备类型判定usb0806设备的类型,从而完成对当前usb0806设备的识别,并在scsi子系统驱动匹配过程中对设备进行管控,使得对于usb设备的识别和阻断更加有效,提高识别准确率。

附图说明

图1为本发明实施例中所提供的一种在linux内核中识别特定usb大容量存储设备的方法流程图;

图2为本发明实施例中所提供的一种在linux内核中识别特定usb大容量存储设备的系统框图。

具体实施方式

为了能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

下面结合附图对本发明实施例所提供的一种在linux内核中识别特定usb大容量存储设备的方法及系统进行详细说明。

如图1所示,本发明实施例公开了一种在linux内核中识别特定usb大容量存储设备的方法,所述方法包括以下步骤:

s1、usb0806设备在usb子系统匹配usb-storage驱动模块,匹配完成后进入scsi子系统驱动匹配模式;

s2、通过scsi子系统的scsi设备描述结构通过linux内核设备树向上遍历父设备,找到对应usb子系统的usb设备描述结构;

s3、如当前usb0806设备的scsi设备类型标明为type_rom或type_wrom类型,则该设备为usb外置光驱设备;如当前usb0806设备的scsi设备类型标明为type_disk、type_mod或者type_rbc类型,则该设备为u盘。

由于usb外置光驱和u盘的设备描述符设备号或者接口描述符次接口号均为0x06,且两者在usb子系统驱动匹配层面上只能匹配到名称为“usb-storage”的驱动模块,因此在本发明实施例中只针对这两种usb设备的识别进行详细描述,其他usb外置软驱等设备在此不作赘述。

在usb子系统驱动匹配层面上主动放过usb0806设备,根据linux内核设备驱动的工作模式,usb0806设备在完成usb子系统驱动匹配完成后,即匹配到名称为“usb-storage”的驱动模块后,将进入scsi子系统驱动匹配模式。

在scsi子系统中,由scsi子系统的scsi设备描述结构可以通过linux内核设备树向上遍历父设备的方法找到对应的usb子系统的usb设备描述结构,完成scsi设备与usb0806设备的关联。

在scsi子系统中,如当前usb0806设备的scsi设备类型标明为scsi设备中的type_rom或type_wrom类型,则可断定该设备为usb外置光驱设备;如当前usb0806设备的scsi设备类型标明为scsi设备中的type_disk、type_mod或者type_rbc类型,则可断定该设备为u盘,如当前usb0806设备的scsi设备类型不在以上类型中,属于特殊设备,暂不予考虑。通过上述方法即可完成对当前usb0806设备的识别。

在scsi子系统驱动匹配过程中,监控usb0806设备的驱动匹配过程,在能够识别出usb0806设备的基础上,根据该类设备的策略选择是否允许操作系统对当前usb0806设备进行相关的驱动匹配动作。如策略禁止的情况下,usb外置光驱设备与名称为“sr”的驱动模块不允许进行匹配,u盘与名称为“sd”的驱动模块不允许进行匹配,即可实现对当前usb0806设备的阻断使用;反之,策略允许就放行,如此即可完成对当前usb0806设备的管控。

本发明实施例针对usb外置光驱和u盘两者难以准确识别的问题,在usb子系统驱动匹配层面上主动放过usb0806设备,进入scsi子系统驱动匹配模式,由scsi子系统的scsi设备描述结构可以通过linux内核设备树向上遍历父设备的方法找到相对应的usb子系统的usb设备描述结构,并在scsi子系统中根据usb0806设备的scsi设备类型判定usb0806设备的类型,从而完成对当前usb0806设备的识别,并在scsi子系统驱动匹配过程中对设备进行管控,使得对于usb设备的识别和阻断更加有效,提高识别准确率。

如图2所示,本发明实施例还公开了一种在linux内核中识别特定usb大容量存储设备的系统,所述系统包括:

usb-storage驱动匹配模块,用于usb0806设备在usb子系统匹配usb-storage驱动模块,匹配完成后进入scsi子系统驱动匹配模式;

设备描述结构遍历模块,用于通过scsi子系统的scsi设备描述结构通过linux内核设备树向上遍历父设备,找到对应usb子系统的usb设备描述结构;

类型匹配模块,用于如当前usb0806设备的scsi设备类型标明为type_rom或type_wrom类型,则该设备为usb外置光驱设备;如当前usb0806设备的scsi设备类型标明为type_disk、type_mod或者type_rbc类型,则该设备为u盘。

在usb子系统驱动匹配层面上主动放过usb0806设备,根据linux内核设备驱动的工作模式,通过usb-storage驱动匹配模块对usb0806设备完成usb子系统驱动匹配,即匹配到名称为“usb-storage”的驱动模块后,将进入scsi子系统驱动匹配模式。

在scsi子系统中,由scsi子系统的scsi设备描述结构可以利用设备描述结构遍历模块通过linux内核设备树向上遍历父设备的方法找到对应的usb子系统的usb设备描述结构,完成scsi设备与usb0806设备的关联。

在scsi子系统中,利用类型匹配模块进行usb设备类型匹配,如当前usb0806设备的scsi设备类型标明为scsi设备中的type_rom或type_wrom类型,则可断定该设备为usb外置光驱设备;如当前usb0806设备的scsi设备类型标明为scsi设备中的type_disk、type_mod或者type_rbc类型,则可断定该设备为u盘,如当前usb0806设备的scsi设备类型不在以上类型中,属于特殊设备,暂不予考虑。通过上述方法即可完成对当前usb0806设备的识别。

所述系统还包括设备管控模块,在scsi子系统驱动匹配过程中,监控usb0806设备的驱动匹配过程,在能够识别出usb0806设备的基础上,根据该类设备的策略选择是否允许操作系统对当前usb0806设备进行相关的驱动匹配动作。如策略禁止的情况下,usb外置光驱设备与名称为“sr”的驱动模块不允许进行匹配,u盘与名称为“sd”的驱动模块不允许进行匹配,即可实现对当前usb0806设备的阻断使用;反之,策略允许就放行,如此即可完成对当前usb0806设备的管控。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

linux内核不能识别u盘分区,一种在Linux内核中识别特定USB大容量存储设备的方法及系统与流程...相关推荐

  1. linux 看usb 存储设备,找到哪个驱动器对应于Linux中的哪个USB大容量存储设备

    我有几个USB大容量存储闪存驱动器连接到Ubuntu Linux计算机(Ubuntu 10.04.1,内核2.6.32-25-386),我需要以编程方式区分它们(如果可能的话,从bash,但我不害怕编 ...

  2. 计算机提示无法识别优盘,win7电脑无法识别u盘的四种解决方法

    很多朋友把U盘插win7电脑拷贝资料文件的时候发现没响应,提示无法识别,重新拔插了之后也无法读取.检查确定自己U盘没有问题,那么很可能是系统设置出现问题,这该怎么解决?针对此疑问,小编和大家说下win ...

  3. usb大容量存储设备驱动_usb无法识别怎么办 如何解决usb识别故障【详细步骤】...

    usb无法识别怎么办? 随着计算机硬件飞速发展,外围设备日益增多,键盘.鼠标等早已为人所共知,数码相机.MP3随身听接踵而至,这么多的设备,如何接入个人计算机?USB就是基于这个目的产生的.USB是一 ...

  4. Linux断点方法,一种基于Linux问题断点的定位方法及系统与流程

    本发明属于Linux断点解决技术领域,涉及一种基于Linux问题断点的定位方法及系统. 背景技术: 在Linux的日常测试过程中,经常会遇见一些未知的原因下系统启动过程中突然出现的宕机,黑屏等现象.导 ...

  5. linux 硬盘克隆diskgen,DiskGenius-硬盘分区及数据恢复软件-DiskGenius下载 v5.2.0.884官方版-完美下载...

    DiskGenius是一款非常出名的硬盘分区及数据恢复软件,完美支持Windows系统,拥有分区备份.硬盘复制.数据恢复等功能,操作简单,适合所有人. DiskGenius软件简介 DiskGeniu ...

  6. 计算机 识别u盘 原理,电脑与USB3.0之间的识别过程,识别原理,高额金币悬赏!...

    电脑与USB3.0之间的识别过程,识别原理,高额金币悬赏! 提问者:傻瓜774411  |  浏览 次  |  提问时间:2019-01-06  |  回答数量:9 说明:包含多个问题,默认悬赏50金 ...

  7. 装linux时候原磁盘,硬盘的分区特点及安装Linux时候的分区规划

    1.安装Linux之前需要预先规划它的未来服务己硬盘分区. 2.Linux安装第一步:规划 安装前需要进行规划: a. 决定Linux主机的角色定位: b. 选择适当的硬件配置: c. 决定物理硬盘的 ...

  8. 硬盘克隆带linux系统,一种Windows环境下基于DiskGenius克隆Linux系统的方法及系统与流程...

    本发明涉及服务器操作系统技术领域,特别是一种windows环境下基于diskgenius克隆linux系统的方法及系统. 背景技术: 服务器在测试过程中需要反复安装linux操作系统用于服务器的各种测 ...

  9. linux usb 批量传输文件,一种Linux系统下提升usb批量传输速度的方法及系统与流程...

    本发明涉及通信传输技术领域,具体地说是一种linux系统下提升usb批量传输速度的方法及系统. 背景技术: linux系统访问usb设备有两种方式:编写内核驱动模块ko和在用户空间编写程序,通过内核提 ...

最新文章

  1. ev3pid巡线_PID算法巡线
  2. R语言层次聚类(hierarchical clustering):特征缩放、抽取hclust中的聚类簇(cutree函数从hclust对象中提取每个聚类簇的成员)、基于主成分分析的进行聚类结果可视化
  3. GIS影像数据集初步学习
  4. 【数字信号处理】复数的另一种思考之平均风向测量(Python实现)
  5. 《HTML5与CSS3实战指南》——2.3 HTML5常见问题
  6. 用Excel对会员客户交易数据进行RFM分析
  7. linux zk服务 关闭_ORACLE数据库RAC安装部署--一键关闭Linux非必要服务
  8. 21.MySQL 性能优化
  9. python车牌识别使用训练集_TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
  10. 第八章--注册码是怎样炼成的
  11. js获取ip本机地址的方法
  12. 6个强推的思维导图软件
  13. 内网KMS服务器搭建分享
  14. 2003服务器系统密匙,windows server 2003 安装密钥
  15. laravel.log could not be opened 解决方法
  16. 写一个获取非行间样式的函数
  17. 学习信号量 sem_init、sem_destroy、sem_post、sem_wait、sem_trywait、sem_getvalue
  18. 基础体温软件测试,[快乐备孕][备孕攻略]使用基础体温测量软件,志在必得的备孕...
  19. docker之数据挂载端口暴漏
  20. 1.SD卡初始化、写入、读取、数据比较

热门文章

  1. java闪光灯手电筒_Android_Android 开启闪光灯做手电筒的详解,复制代码 代码如下:public class H - phpStudy...
  2. 2022化工自动化控制仪表考试题及答案
  3. html制作打飞机的游戏,JavaScript 小型打飞机游戏实现原理说明
  4. Docker 容器文件拷贝及目录挂载
  5. Tomcat配置登录拦截功能
  6. office-word使用技巧——查找替换
  7. EBUSY: resource busy or locked, symlink
  8. 【深入理解C++】头文件防卫式声明
  9. 第十九篇 -- 学习第十八天打卡20190708
  10. 什么第一台多媒体电子计算机诞生,第一台多媒体电计算机是哪一年诞生的