Linux下USB裝置檢測

2021-04-27 09:05:23 字數 3433 閱讀 5661

usb裝置檢測也是通過/proc目錄下的usb檔案系統進行的。為了使乙個usb裝置能夠正常工作,必須要現在系統中插入usb橋接器模組。在檢測開始時,一般要先檢測是否存在/proc/bus/usb目錄,若不存在則嘗試插入usb橋接模組。

現在一般的usb橋接器模組有兩種型別,uhci和ohci。在決定插入那乙個橋接器模組時,可以察看/proc/pci檔案來決定。開啟此檔案,您若 發現usb節為 i/o at 0xhhhh格式(例如出現 i/o at 0xe000 [0xe01f]),hhhh為16進製制數,則橋接器型別為uhci。若是它為32 bit memory at 0xhh000000形式(例如出現32 bit memory at 0xee000000),hh為16進製制數,則橋接器型別為ohci。但是若您的橋接器型別不滿足上述任何一種情況,唯一的解決辦法就是您嘗試插入這兩種 模組,直到成功為止。一般而言,uhci型別的橋接器它的插入模組是uhci或usb-uhci(由核心版本決定);而對於ohci型別的橋接器它的插入 模組是ohci或usb-ohci。

您在正確的插入了橋接器模組之後,這時/proc檔案系統下就會出現usb裝置目錄,不過這 時這個目錄是空的,沒有任何檔案。這時您就必須掛接usbdevfs檔案系統,然後通過此檔案系統檢測連線的裝置。在成功掛接usb檔案系統之後,就會生 成檔案/proc/bus/usb/devices,/proc/bus/usb/drivers和目錄/proc/bus/usb/busno。掛接 usbdevfs檔案您可以通過如下操作實現:

mount -t usbdevfs none /proc/bus/usb或在/etc/fstab上加入none /proc/bus/usb usbdevfs defaults 0 0

然後通過/proc/bus/usb/devices檔案的內容,您就可以獲得連線的裝置資訊,包括裝置標識和製造商標是等資訊。

usb裝置型別描述:

裝置規範 裝置類碼 介面類碼

應用程式特定 - 0xfe

聲音介面 0x00 0x01

通訊裝置 0x02 -

cdc控制介面 - 0x02

cdc資料介面 - 0x0a

hid 0x00 0x03

hub 0x09 0x09

批量儲存裝置 0x00 0x08

監視器 same as hid same as hid

電源裝置 same as hid same as hid

物理裝置 - 0x05

印表機 - 0x07

**商特定 - 0xff

5.2 usb檔案系統簡介

t = 匯流排拓撲結構(lev, prnt, port, cnt, 等),是指usb裝置和主機之間的連線方式

b = 頻寬 (僅用於usb主控制器)

d = 裝置描述資訊

p = 產品標識資訊

s = 串描述符

c = 配置描述資訊 (* 表示活動配置)

i = 介面描述資訊

e = 終端點描述資訊

一般格式:

d = 十進位制數

x = 十六進製制數

s = 字串

拓撲資訊

t: bus=dd lev=dd prnt=dd port=dd cnt=dd dev#=ddd spd=ddd mxch=dd

| | | | | | | | |__最大子裝置

| | | | | | | |__裝置速度(mbps)

| | | | | | |__裝置編號

| | | | | |__這層的裝置數

| | | | |__此裝置的父聯結器/埠

| | | |__父裝置號

| | |__此匯流排在拓撲結構中的層次

| |__匯流排編號

|__拓撲資訊標誌

頻寬資訊

b: alloc=ddd/ddd us (xx%), #int=ddd, #iso=ddd

| | | |__同步請求編號

| | |__中斷請求號

| |__分配給此匯流排的總頻寬

|__頻寬資訊標誌

裝置描述資訊和產品標識資訊

d: ver=x.xx cls=xx(s) sub=xx prot=xx mxps=dd #cfgs=dd

p: vendor=***x prodid=***x rev=xx.xx

d: ver=x.xx cls=xx(sssss) sub=xx prot=xx mxps=dd #cfgs=dd

| | | | | | |__配置編號

| | | | | |______預設終端點的最大包尺寸

| | | | |

| | | | |__裝置協議

| | | |__裝置子型別

| | |__裝置型別

| |__裝置usb版本

|__裝置資訊標誌編號#1

p: vendor=***x prodid=***x rev=xx.xx

| | | |__產品修訂號

| | |__產品標識編碼

| |__製造商標識編碼

|__裝置資訊標誌編號#2

串描述資訊

s: manufacturer=ssss

| |__裝置上讀出的製造商資訊

|__串描述資訊

s: product=ssss

| |__裝置上讀出的產品描述資訊,對於usb主控制器此字段為"usb *hci root hub"

|__串描述資訊

s: serialnumber=ssss

| |__裝置上讀出的序列號,對於usb主控制器它是乙個生成的字串,表示裝置標識

|__串描述資訊

配置描述資訊

c: #ifs=dd cfg#=dd atr=xx mpwr=dddma

| | | | |__最大電流(ma)

| | | |__屬性

| | |__配置編號

| |__介面數

|__配置資訊標誌

介面描述資訊(可為多個)

i: if#=dd alt=dd #eps=dd cls=xx(sssss) sub=xx prot=xx driver=ssss

| | | | | | | |__驅動名

| | | | | | |__介面協議

| | | | | |__介面子類

| | | | |__介面類

| | | |__中斷點數

| | |__可變設定編號

| |__介面編號

|__介面資訊標誌

終端點描述資訊

e: ad=xx(s) atr=xx(ssss) mxps=dddd ivl=dddms

e: ad=xx(s) atr=xx(ssss) mxps=dddd ivl=dddms

| | | | |__間隔

| | | |__終端點最大包尺寸

| | |__屬性(終端點型別)

| |__終端點位址(i=in,o=out)

|__終端點資訊標誌 '

Linux下USB裝置檢測

usb裝置檢測也是通過 proc目錄下的usb檔案系統進行的。為了使乙個usb裝置能夠 正常工作,必須要現在系統中插入usb橋接器模組。在檢測開始時,一般要先檢測是否存在 proc bus usb目錄,若不存在則嘗試插入usb橋接模組。現在一般的usb橋接器模組有兩種型別,uhci和ohci。在決定...

Linux下USB裝置檢測

usb裝置檢測也是通過 proc目錄下的usb檔案系統進行的。為了使乙個usb裝置能夠正常工作,必須要現在系統中插入usb橋接器模組。在檢測開始時,一般要先檢測是否存在 proc bus usb目錄,若不存在則嘗試插入usb橋接模組。現在一般的usb橋接器模組有兩種型別,uhci和ohci。在決定插...

Linux下的USB裝置驅動

usb是我們常用的介面,它有四條引腳線 5v d d gnd。pc的usb口的d d 接有下拉電阻,平時處於低電平狀態。usb裝置的usb口內部,d 或d 接有1.5k的上拉電阻 它一接入pc,就會把pc的usb口的d 或d 拉高,從硬體的角度通知pc有新裝置接入。所以usb能夠自動監測裝置。簡單來...