linux内核不能识别u盘分区,一种在Linux内核中识别特定USB大容量存储设备的方法及系统与流程...
本發明涉配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大容量存储设备的方法及系统与流程...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python识别文字坐标_【Python
- 下一篇: 2020-10-23 集合+序列化+递归