一种在Linux内核中识别特定USB大容量存储设备的方法及系统与流程

专利2022-06-30  52


本发明涉配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设备的管控。

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


技术特征:

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盘。

2.根据权利要求1所述的一种在linux内核中识别特定usb大容量存储设备的方法,其特征在于,所述方法还包括对特定usb大容量存储设备的管控,具体如下:

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

3.根据权利要求1所述的一种在linux内核中识别特定usb大容量存储设备的方法,其特征在于,所述usb大容量存储设备的描述符信息中主设备号为0x08,次设备号为0x06,或接口描述符主接口号为0x08,次接口号为0x06。

4.一种在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盘。

5.根据权利要求1所述的一种在linux内核中识别特定usb大容量存储设备的系统,其特征在于,所述系统还包括设备管控模块,用于根据usb设备的策略选择是否允许操作系统对当前usb0806设备进行相关的驱动匹配动作,如策略禁止,则usb外置光驱设备与名称为sr的驱动模块不允许进行匹配,u盘与名称为sd的驱动模块不允许进行匹配;反之策略允许就放行。

6.根据权利要求1所述的一种在linux内核中识别特定usb大容量存储设备的系统,其特征在于,所述usb大容量存储设备的描述符信息中主设备号为0x08,次设备号为0x06,或接口描述符主接口号为0x08,次接口号为0x06。

技术总结
本发明提供了一种在Linux内核中识别特定USB大容量存储设备的方法及系统,本发明针对USB外置光驱和U盘两者难以准确识别的问题,在USB子系统驱动匹配层面上主动放过USB0806设备,进入SCSI子系统驱动匹配模式,由SCSI子系统的SCSI设备描述结构可以通过Linux内核设备树向上遍历父设备的方法找到相对应的USB子系统的USB设备描述结构,并在SCSI子系统中根据USB0806设备的SCSI设备类型判定USB0806设备的类型,从而完成对当前USB0806设备的识别,并在SCSI子系统驱动匹配过程中对设备进行管控,使得对于USB设备的识别和阻断更加有效,提高识别准确率。

技术研发人员:苗功勋;袁浩;刘晓萌;魏东晓;孙强
受保护的技术使用者:中孚安全技术有限公司;中孚信息股份有限公司;北京中孚泰和科技发展股份有限公司;南京中孚信息技术有限公司
技术研发日:2020.01.13
技术公布日:2020.06.05

转载请注明原文地址: https://bbs.8miu.com/read-59954.html

最新回复(0)