linuxusb驅動下載
⑴ 如何在linux開發工具中啟動USB驅動程序
USB驅動程序支持在原生Linux提供了。
方法要求啟用驅動,但是,取決於你所使用的分布和內核版本。
哪個發行版支持USBFS?
已知提供USBFS支持:
Ubuntu 9.04或以上,
Ubuntu 9.10的內核2.6.31-19伺服器,
CentOS的4.8,
CentOS的5.4,
一般情況下,任何分布用內核版本<2.6.32
已知不提供USBFS支持:
Ubuntu 10.04,
一般情況下,任何分布用內核版本> = 2.6.32
方法1:USBFS支持
如果你的發行版提供了USBFS支持,那麼下面的命令將工作:
mount -t usbfs none /proc/bus/usb -o devmode=0666
為了使這種更改永久,確保下面一行是在/ etc / fstab文件中:
none /proc/bus/usb usbfs defaults,devmode=0666 0 0
這將自動安裝在系統啟動。
一旦 /etc/fstab添加已經做完,一個簡單的命令應該掛載USBFS文件系統:
mount /proc/bus/usb
無論是FTDI / XTAG和XTAG-2的調試適配器現在應該工作。
方法2:沒有USBFS支持
為了確保在任何一個FTDI / XTAG或XTAG-2調試適配器插入時的許可權是在設備上是正確的,您需要配置「udev」來識別這個設備。
創建一個文件「/etc/udev/rules.d/99-xmos.rules」,其內容如下:
SUBSYSTEM!="usb|usb_device", GOTO="xmos_rules_end"
ACTION!="add", GOTO="xmos_rules_end"
# 20b1:f7d1 for xmos xtag2
ATTRS{idVendor}=="20b1", ATTRS{idProct}=="f7d1", MODE="0666", SYMLINK+="xtag2-%n"
# 20b1:f7d3 for xmos startkit
ATTRS{idVendor}=="20b1", ATTRS{idProct}=="f7d3", MODE="0666", SYMLINK+="startkit-%n"
# 0403:6010 for XC-1 with FTDI al-uart chip
ATTRS{idVendor}=="0403", ATTRS{idProct}=="6010", MODE="0666", SYMLINK+="xc1-%n"
LABEL="xmos_rules_end"
注意:本ATTRS,MODE和SYMLINK節必須全部在同一行,因為每個規則只能在一行上。
現在告訴udev進行重新載入,以確保文件添加新的規則:
service udev reload
還必須拔下並重新插上USB線,讓udev的識別設備的新規則。或者觸發重新插上的udev類型為「udevadm觸發」或「udevtrigger」命令,取決於在你的Linux分布上udev的版本。
FTDI / XTAG其他注意事項
FTDI的庫需要USB設備的文件都可以從/ proc /bus/ USB,不支持的/dev/bus/usb作為文件的位置。
但是,如果你的發行版不支持USBFS(以上方法1),但確實有一個的/proc/bus/usb空目錄,你可以使用下面的綁定mount命令的解決方法:
mount --bind /dev/bus/usb /proc/bus/usb
如果你的發行版不支持USBFS,也沒有一個的/proc/bus/usb目錄(這是較新的內核的情況下,大約從2.6.32開始),然後聯系XMOS的rthe設備庫的非官方補丁的版本; 發送XMOS的支持標簽,其中包括「Linux的FTDI庫請求」的主題。
⑵ linux系統中沒有USB驅動怎麼辦
要啟用 Linux USB 支持,首先進入"USB support"節並啟用"Support for USB"選項(對應模塊為usbcore.o)。盡管這個步驟相當直觀明了,但接下來的 Linux USB 設置步驟則會讓人感到糊塗。特別地,現在需要選擇用於系統的正確 USB 主控制器驅動程序。選項是"EHCI" (對應模塊為ehci-hcd.o)、"UHCI" (對應模塊為usb-uhci.o)、"UHCI (alternate driver)"和"OHCI" (對應模塊為usb-ohci.o)。這是許多人對 Linux 的 USB 開始感到困惑的地方。
要理解"EHCI"及其同類是什麼,首先要知道每塊支持插入 USB 設備的主板或 PCI 卡都需要有 USB 主控制器晶元組。這個特別的晶元組與插入系統的 USB 設備進行相互操作,並負責處理允許 USB 設備與系統其它部分通信所必需的所有低層次細節。
Linux USB 驅動程序有三種不同的 USB 主控制器選項是因為在主板和 PCI 卡上有三種不同類型的 USB 晶元。"EHCI"驅動程序設計成為實現新的高速 USB 2.0 協議的晶元提供支持。"OHCI"驅動程序用來為非 PC 系統上的(以及帶有 SiS 和 ALi 晶元組的 PC 主板上的)USB 晶元提供支持。"UHCI"驅動程序用來為大多數其它 PC 主板(包括 Intel 和 Via)上的 USB 實現提供支持。只需選擇與希望啟用的 USB 支持的類型對應的"?HCI"驅動程序即可。如有疑惑,為保險起見,可以啟用"EHCI"、"UHCI" (兩者中任選一種,它們之間沒有明顯的區別)和"OHCI"。( 趙明註:根據文檔,EHCI已經包含了UHCI和OHCI,但目前就我個人的測試,單獨加EHCI是不行的,通常我的做法是根據主板類型載入UHCI或OHCI後,再載入EHCI這樣才可以支持USB2.0設備)。
啟用了"USB support"和適當的"?HCI"USB 主控制器驅動程序後,使 USB 啟動並運行只需再進行幾個步驟。應該啟用"Preliminary USB device filesystem",然後確保啟用所有特定於將與 Linux 一起使用的實際 USB 外圍設備的驅動程序。例如,為了啟用對 USB 游戲控制器的支持,我啟用了"USB Human Interface Device (full HID) support"。我還啟用了主"Input core support" 節下的"Input core support"和"Joystick support"。
一旦用新的已啟用 USB 的內核重新引導後,若/proc/bus/usb下沒有相應USB設備信息,應輸入以下命令將 USB 設備文件系統手動掛裝到 /proc/bus/usb:
# mount -t usbdevfs none /proc/bus/usb
為了在系統引導時自動掛裝 USB 設備文件系統,請將下面一行添加到 /etc/fstab 中的 /proc 掛裝行之後:
none /proc/bus/usb usbdevfs defaults 0 0
模塊的配置方法.
在很多時候,我們的USB設備驅動並不包含在內核中。其實我們只要根據它所需要使用的模塊,逐一載入。就可以使它啟作用。
首先要確保在內核編譯時以模塊方式選擇了相應支持。這樣我們就應該可以在/lib/moles/2.4.XX目錄看到相應.o文件。在載入模塊時,我們只需要運行modprobe xxx.o就可以了(modprobe主要載入系統已經通過depmod登記過的模塊,insmod一般是針對具體.o文件進行載入)
對應USB設備下面一些模塊是關鍵的。
usbcore.o要支持usb所需要的最基礎模塊usb-uhci.o(已經提過)usb-ohci.o(已經提過)uhci.o另一個uhci驅動程序,我也不知道有什麼用,一般不要載入,會死機的ehci-hcd.o(已經提過 usb2.0)hid.oUSB人機界面設備,像滑鼠呀、鍵盤呀都需要usb-storage.oUSB存儲設備,U盤等用到
相關模塊
ide-disk.oIDE硬碟ide-scsi.o把IDE設備模擬SCSI介面scsi_mod.oSCSI支持
注意kernel config其中一項:
Probe all LUNs on each SCSI device
最好選上,要不某些同時支持多個口的讀卡器只能顯示一個。若模塊方式就要帶參數安裝或提前在/etc/moles.conf中加入以下項,來支持多個LUN。
add options scsi_mod max_scsi_luns=9
sd_mod.oSCSI硬碟sr_mod.oSCSI光碟sg.oSCSI通用支持(在某些探測U盤、SCSI探測中會用到)
常見USB設備及其配置
在Linux 2.4的內核中已經支持不下20種設備。它支持幾乎所有的通用設備如鍵盤、滑鼠、modem、列印機等,並不斷地添加廠商新的設備象數碼相機、MP3、網卡等。下面就是幾個最常見設備的介紹和使用方法:
USB滑鼠:
鍵盤和滑鼠屬於低速的輸入設備,對於已經為用戶認可的PS/2介面,USB鍵盤和USB滑鼠似乎並沒有太多更優越的地方。現在的大部分滑鼠採用了PS/2介面,不過USB介面的滑鼠也越來越多,兩者相比,各有優勢:一般來說,USB的滑鼠介面的帶寬大於PS/2滑鼠,也就是說在同樣的時間內,USB滑鼠掃描次數就要多於PS/2滑鼠,這樣在定位上USB滑鼠就更為精確;同時USB介面滑鼠的默認采樣率也比較高,達到125HZ,而PS/2介面的滑鼠僅有40HZ(Windows 9x/Me)或是60HZ(Windows NT/2000)。
對於USB設備你當然必須先插入相應的USB控制器模塊:usb-uhci.o或usb-ohci.o
modprobe usb-uhci
USB滑鼠為了使其正常工作,您必須先插入模塊usbmouse.o和mousedev.o
modprobe usbmouse
modprobe mousedev
若你把HID input layer支持和input core 支持也作為模塊方式安裝,那麼啟動hid模塊和input模塊也是必要的。
modprobe hid
modprobe input
USB鍵盤:
一般的,我們現在使用的鍵盤大多是PS/2的,USB鍵盤還比較少見,但是下來的發展,鍵盤將向USB介面靠攏。使用USB鍵盤基本上沒有太多的要求,只需在主板的BIOS設定對USB鍵盤的支持,就可以在各系統中完全無障礙的使用,而且更可以真正做到在即插即用和熱插拔使用,並能提供兩個USB連接埠:讓您可以輕易地直接將具有USB接頭的裝置接在您的鍵盤上,而非計算機的後面。
同樣你當然必須先插入相應的USB控制器模塊:usb-uhci.o或usb-ohci.o
modprobe usb-uhci
然後您還必須插入鍵盤模塊usbkbd.o,以及keybdev.o,這樣usb鍵盤才能夠正常工作。此時,運行的系統命令:
modprobe usbkbd
modprobe keybdev
同樣若你把HID input layer支持和input core 支持也作為模塊方式安裝,那麼啟動hid模塊和input模塊也是必要的。
U盤和USB讀卡器:
數碼存儲設備現在對我們來說已經是相當普遍的了。CF卡、SD卡、Memory Stick等存儲卡已經遍及我們的身邊,通常,他們的讀卡器都是USB介面的。另外,很多MP3、數碼相機也都是USB介面和計算機進行數據傳遞。更我們的U盤、USB硬碟,作為移動存儲設備,已經成為我們的必須裝備。
在Linux下這些設備通常都是以一種叫做usb-storage的方式進行驅動。要使用他們必須載入此模塊
modprobe usb-storage
當然,usbcore.o 和usb-uhci.o或usb-ohci也肯定是不可缺少的。另外,若你系統中SCSI支持也是模塊方式,那麼下面的模塊也要載入
modprobe scsi_mod
modprobe sd_mod
在載入完這些模塊後,我們插入U盤或存儲卡,就會發現系統中多了一個SCSI硬碟,通過正確地mount它,就可以使用了(SCSI硬碟一般為/dev/sd?,可參照文章後面的常見問題解答)。
mount /dev/sda1 /mnt
Linux支持的其他USB設備。
MODEM--(比較常見) 網路設備 攝像頭--(比較常見)例如ov511.o 聯機線--可以讓你的兩台電腦用USB線實現網路功能。usbnet.o 顯示器--(我沒見過) 游戲桿 電視盒--(比較常見) 手寫板--(比較常見) 掃描儀--(比較常見) 刻錄機--(比較常見) 列印機--(比較常見)
注意:
上面所說的每個驅動模塊,並不是都要手動載入,有很多系統會在啟動或你的應用需要時自動載入的,寫明這些模塊,是便於你在不能夠使用USB設備時,可以自行檢查。只要用lsmod確保以上模塊已經被系統載入,你的設備就應該可以正常工作了。當然注意有些模塊已經以內核方式在kernel啟動時存在了(這些模塊文件在/lib/moles/2.4.XX中是找不到的)。
輸入相關命令
⑶ linux系統自帶有USB驅動嗎如果有,那麼dos界面怎麼查看是否已安裝,如果無,怎麼通過命令安裝
dos界面?我猜一下說的是命令行界面吧?這個我沒看過,不過你插個U盤,自動的話會自己掛載上,驅動就別管了,不能自己掛載就嘗試手動掛載看看。
⑷ 怎麼查看linux usb設備驅動
下面的信息都是在VMware中運行Ubuntu12-04系統上執行的。同樣該命令也支持在嵌入式系統中進行USB調試。
一、cat設備節點獲取信息
在一些嵌入式開發中需要調試USB功能,經常會cat /sys 下的相關設備節點來查看某些信息,比如說我們可以看到 /sys/bus/usb/devices 目錄有多個子目錄。進入到某個子目錄可以看到usb設備更加詳細的信息(可以理解為設備描述符)。
1、usb設備在匯流排上的信息
// usb設備在匯流排上的信息
root@ubuntu:/sys/kernel/debug# cd /sys/bus/usb/devices
root@ubuntu:/sys/bus/usb/devices# ll
total 0
drwxr-xr-x 2 root root 0 Nov 26 21:21 ./
drwxr-xr-x 4 root root 0 Nov 26 21:21 ../
lrwxrwxrwx 1 root root 0 Nov 26 21:21 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-0:1.0/
lrwxrwxrwx 1 root root 0 Dec 15 23:10 1-1 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/
lrwxrwxrwx 1 root root 0 Dec 15 23:18 1-1:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-0:1.0/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-1 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-1/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-1:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-1/2-1:1.0/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-2 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-2:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2/2-2:1.0/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 usb1 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 usb2 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/
其中 usbx/第x個匯流排,x-y:a.b/的目錄格式,x表示匯流排號,y表示埠,a表示配置,b表示介面。
具體解釋可以參照如下:
The names that begin with "usb" refer to USB controllers. More accurately, they refer to the "root hub" associated with each controller. The number is the USB bus number. In the example there is only one controller, so its bus is number 1. Hence the name "usb1".
"1-0:1.0" is a special case. It refers to the root hub's interface. This acts just like the interface in an actual hub an almost every respect; see below.
All the other entries refer to genuine USB devices and their interfaces. The devices are named by a scheme like this:
bus-port.port.port ...
In other words, the name starts with the bus number followed by a '-'. Then comes the sequence of port numbers for each of the intermediate hubs along the path to the device.
For example, "1-1" is a device plugged into bus 1, port 1. It happens to be a hub, and "1-1.3" is the device plugged into port 3 of that hub. That device is another hub, and "1-1.3.1" is the device plugged into its port 1.
The interfaces are indicated by suffixes having this form:
:config.interface
That is, a ':' followed by the configuration number followed by '.' followed by the interface number. In the above example, each of the devices is using configuration 1 and this configuration has only a single interface, number 0. So the interfaces show up as;
1-1:1.0 1-1.3:1.0 1-1.3.1:1.0
A hub will never have more than a single interface; that's part of the USB spec. But other devices can and do have multiple interfaces (and sometimes multiple configurations). Each interface gets its own entry in sysfs and can have its own driver.
2、特定設備的詳細信息
進入到某個目錄中去,可以看到該設備的詳細信息,可用cat命令獲取信息。
// usb設備的詳細信息
root@ubuntu:/sys/bus/usb/devices/usb1# ll
total 0
drwxr-xr-x 6 root root 0 Nov 26 21:21 ./
drwxr-xr-x 4 root root 0 Nov 26 21:21 ../
drwxr-xr-x 10 root root 0 Nov 26 21:21 1-0:1.0/
drwxr-xr-x 5 root root 0 Dec 15 23:10 1-1/
-rw-r--r-- 1 root root 4096 Dec 15 23:40 authorized
-rw-r--r-- 1 root root 4096 Dec 15 23:40 authorized_default
-rw-r--r-- 1 root root 4096 Dec 15 23:40 avoid_reset_quirk
-r--r--r-- 1 root root 4096 Nov 26 21:21 bcdDevice
-rw-r--r-- 1 root root 4096 Nov 26 21:21 bConfigurationValue
-r--r--r-- 1 root root 4096 Nov 26 21:21 bDeviceClass
-r--r--r-- 1 root root 4096 Nov 26 21:21 bDeviceProtocol
-r--r--r-- 1 root root 4096 Nov 26 21:21 bDeviceSubClass
-r--r--r-- 1 root root 4096 Dec 15 23:40 bmAttributes
-r--r--r-- 1 root root 4096 Dec 15 23:40 bMaxPacketSize0
-r--r--r-- 1 root root 4096 Dec 15 23:40 bMaxPower
-r--r--r-- 1 root root 4096 Dec 15 23:40 bNumConfigurations
-r--r--r-- 1 root root 4096 Dec 15 23:40 bNumInterfaces
-r--r--r-- 1 root root 4096 Nov 26 21:21 busnum
-r--r--r-- 1 root root 4096 Dec 15 23:40 configuration
-r--r--r-- 1 root root 65553 Nov 26 21:21 descriptors
-r--r--r-- 1 root root 4096 Dec 15 23:40 dev
-r--r--r-- 1 root root 4096 Nov 26 21:21 devnum
-r--r--r-- 1 root root 4096 Dec 15 23:40 devpath
lrwxrwxrwx 1 root root 0 Nov 27 20:06 driver -> ../../../../../bus/usb/drivers/usb/
drwxr-xr-x 3 root root 0 Dec 15 23:40 ep_00/
-r--r--r-- 1 root root 4096 Nov 26 21:21 idProct
-r--r--r-- 1 root root 4096 Nov 26 21:21 idVendor
-r--r--r-- 1 root root 4096 Dec 15 23:40 ltm_capable
-r--r--r-- 1 root root 4096 Nov 26 21:21 manufacturer
-r--r--r-- 1 root root 4096 Dec 15 23:40 maxchild
drwxr-xr-x 2 root root 0 Nov 26 21:21 power/
-r--r--r-- 1 root root 4096 Nov 26 21:21 proct
-r--r--r-- 1 root root 4096 Dec 15 23:40 quirks
-r--r--r-- 1 root root 4096 Nov 26 21:21 removable
--w------- 1 root root 4096 Dec 15 23:40 remove
-r--r--r-- 1 root root 4096 Nov 26 21:21 serial
-r--r--r-- 1 root root 4096 Nov 26 21:21 speed
lrwxrwxrwx 1 root root 0 Nov 26 21:21 subsystem -> ../../../../../bus/usb/
-rw-r--r-- 1 root root 4096 Nov 26 21:21 uevent
-r--r--r-- 1 root root 4096 Dec 15 23:40 urbnum
-r--r--r-- 1 root root 4096 Dec 15 23:40 version
二、使用debugfs
1、掛載 debugfs 到 /sys/kernel/debug 路徑下
root@ubuntu:mount -t debugfs none /sys/kernel/debug
2、執行上述步驟之後,在 /sys/kernel/debug 就會生成如下的文件
root@ubuntu:/sys/bus/usb/devices# cd /sys/kernel/debug/
root@ubuntu:/sys/kernel/debug# ll
total 0
drwx------ 22 root root 0 Nov 26 21:21 ./
drwxr-xr-x 7 root root 0 Nov 26 21:21 ../
drwxr-xr-x 2 root root 0 Nov 26 21:21 acpi/
drwxr-xr-x 32 root root 0 Dec 4 16:30 bdi/
drwxr-xr-x 2 root root 0 Nov 26 21:21 bluetooth/
drwxr-xr-x 2 root root 0 Nov 26 21:21 cleancache/
drwxr-xr-x 2 root root 0 Nov 26 21:21 dma_buf/
drwxr-xr-x 4 root root 0 Nov 26 21:21 dri/
drwxr-xr-x 2 root root 0 Nov 26 21:21 dynamic_debug/
drwxr-xr-x 2 root root 0 Nov 26 21:21 extfrag/
drwxr-xr-x 2 root root 0 Nov 26 21:21 frontswap/
-r--r--r-- 1 root root 0 Nov 26 21:21 gpio
drwxr-xr-x 3 root root 0 Nov 26 21:21 hid/
drwxr-xr-x 2 root root 0 Nov 26 21:21 kprobes/
drwxr-xr-x 3 root root 0 Nov 26 21:21 kvm-guest/
drwxr-xr-x 2 root root 0 Nov 26 21:21 mce/
drwxr-xr-x 2 root root 0 Nov 26 21:21 pinctrl/
-r--r--r-- 1 root root 0 Nov 26 21:21 pwm
drwxr-xr-x 2 root root 0 Nov 26 21:21 regmap/
drwxr-xr-x 3 root root 0 Nov 26 21:21 regulator/
-rw-r--r-- 1 root root 0 Nov 26 21:21 sched_features
-r--r--r-- 1 root root 0 Nov 26 21:21 sleep_time
-r--r--r-- 1 root root 0 Nov 26 21:21 suspend_stats
drwxr-xr-x 7 root root 0 Nov 26 21:21 tracing/
drwxr-xr-x 3 root root 0 Nov 26 21:21 usb/
drwxr-xr-x 2 root root 0 Nov 26 21:21 virtio-ports/
-r--r--r-- 1 root root 0 Nov 26 21:21 vmmemctl
-r--r--r-- 1 root root 0 Nov 26 21:21 wakeup_sources
drwxr-xr-x 2 root root 0 Nov 26 21:21 x86/
3、cat 設備節點
執行下述命令之後會以特定格式列印目前USB匯流排上所有USB設備的信息如下:
root@ubuntu:/sys/kernel/debug# cat usb/devices
T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
B: Alloc= 17/900 us ( 2%), #Int= 1, #Iso= 0
D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0001 Rev= 3.13
S: Manufacturer=Linux 3.13.0-32-generic uhci_hcd
S: Proct=UHCI Host Controller
S: SerialNumber=0000:02:00.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms
T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0e0f ProdID=0003 Rev= 1.03
S: Manufacturer=VMware
S: Proct=VMware Virtual USB Mouse
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=1ms
T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 3 Spd=12 MxCh= 7
D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0e0f ProdID=0002 Rev= 1.00
S: Proct=VMware Virtual USB Hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 6
B: Alloc= 0/800 us ( 0%), #Int= 1, #Iso= 0
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev= 3.13
S: Manufacturer=Linux 3.13.0-32-generic ehci_hcd
S: Proct=EHCI Host Controller
S: SerialNumber=0000:02:03.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 7 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs= 1
P: Vendor=0bda ProdID=0129 Rev=39.60
S: Manufacturer=Generic
S: Proct=USB2.0-CRW
S: SerialNumber=20100201396000000
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=06 Prot=50 Driver=rts5139
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=83(I) Atr=03(Int.) MxPS= 3 Ivl=64ms
至於信息的詳細解析可以參照 Linux源代碼中 Documentation/usb/proc_usb_info.txt 文件。現摘錄其中對該格式的詳細解釋:
| | |__Proct ID code
| |__Vendor ID code
|__Device info tag #2
String descriptor info:
S: Manufacturer=ssss
| |__Manufacturer of this device as read from the device.
| For USB host controller drivers (virtual root hubs) this may
| be omitted, or (for newer drivers) will identify the kernel
| version and the driver which provi
⑸ 怎樣寫linux下的USB設備驅動程序
USB驅動程序基礎
在動手寫USB驅動程序這前,讓我們先看看寫的USB驅動程序在內核中的結構,如下圖:
USB通信最基本的形式是通過端點(USB端點分中斷、批量、等時、控制四種,每種用途不同),USB端點只能往一個方向傳送數據,從主機到設備或者從設備到主機,端點可以看作是單向的管道(pipe)。所以我們可以這樣認為:設備通常具有一個或者更多的配置,配置經常具有一個或者更多的介面,介面通常具有一個或者更多的設置,介面沒有或具有一個以上的端點。驅動程序把驅動程序對象注冊到USB子系統中,稍後再使用製造商和設備標識來判斷是否已經安裝了硬體。USB核心使用一個列表(是一個包含製造商ID和設備號ID的一個結構體)來判斷對於一個設備該使用哪一個驅動程序,熱插撥腳本使用它來確定當一個特定的設備插入到系統時該自動裝載哪一個驅動程序。
上面我們簡要說明了驅動程序的基本理論,在寫一個設備驅動程序之前,我們還要了解以下兩個概念:模塊和設備文件。
模塊:是在內核空間運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是可以裝載到系統中作為內核的一部分運行,從而可以動態擴充內核的功能。模塊最主要的用處就是用來實現設備驅動程序。Linux下對於一個硬體的驅動,可以有兩種方式:直接載入到內核代碼中,啟動內核時就會驅動此硬體設備。另一種就是以模塊方式,編譯生成一個.ko文件(在2.4以下內核中是用.o作模塊文件,我們以2.6的內核為准,以下同)。當應用程序需要時再載入到內核空間運行。所以我們所說的一個硬體的驅動程序,通常指的就是一個驅動模塊。
設備文件:對於一個設備,它可以在/dev下面存在一個對應的邏輯設備節點,這個節點以文件的形式存在,但它不是普通意義上的文件,它是設備文件,更確切的說,它是設備節點。這個節點是通過mknod命令建立的,其中指定了主設備號和次設備號。主設備號表明了某一類設備,一般對應著確定的驅動程序;次設備號一般是區分不同屬性,例如不同的使用方法,不同的位置,不同的操作。這個設備號是從/proc/devices文件中獲得的,所以一般是先有驅動程序在內核中,才有設備節點在目錄中。這個設備號(特指主設備號)的主要作用,就是聲明設備所使用的驅動程序。驅動程序和設備號是一一對應的,當你打開一個設備文件時,操作系統就已經知道這個設備所對應的驅動程序。對於一個硬體,Linux是這樣來進行驅動的:首先,我們必須提供一個.ko的驅動模塊文件。我們要使用這個驅動程序,首先要載入它,我們可以用insmod
xxx.ko,這樣驅動就會根據自己的類型(字元設備類型或塊設備類型,例如滑鼠就是字元設備而硬碟就是塊設備)向系統注冊,注冊成功系統會反饋一個主設備號,這個主設備號就是系統對它的唯一標識。驅動就是根據此主設備號來創建一個一般放置在/dev目錄下的設備文件。在我們要訪問此硬體時,就可以對設備文件通過open、read、write、close等命令進行。而驅動就會接收到相應的read、write操作而根據自己的模塊中的相應函數進行操作了。
USB驅動程序實踐
了解了上述理論後,我們就可以動手寫驅動程序,如果你基本功好,而且寫過linux下的硬體驅動,USB的硬體驅動和pci_driver很類似,那麼寫USB的驅動就比較簡單了,如果你只是大體了解了linux的硬體驅動,那也不要緊,因為在linux的內核源碼中有一個框架程序可以拿來借用一下,這個框架程序在/usr/src/~(你的內核版本,以下同)/drivers/usb下,文件名為usb-skeleton.c。寫一個USB的驅動程序最基本的要做四件事:驅動程序要支持的設備、注冊USB驅動程序、探測和斷開、提交和控制urb(USB請求塊)(當然也可以不用urb來傳輸數據,下文我們會說到)。
驅動程序支持的設備:有一個結構體struct
usb_device_id,這個結構體提供了一列不同類型的該驅動程序支持的USB設備,對於一個只控制一個特定的USB設備的驅動程序來說,struct
usb_device_id表被定義為:
/* 驅動程序支持的設備列表 */
static struct usb_device_id
skel_table [] = {
{ USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID)
},
{ } /* 終止入口 */
};
MODULE_DEVICE_TABLE (usb,
skel_table);
對於PC驅動程序,MODULE_DEVICE_TABLE是必需的,而且usb必需為該宏的第一個值,而USB_SKEL_VENDOR_ID和USB_SKEL_PRODUCT_ID就是這個特殊設備的製造商和產品的ID了,我們在程序中把定義的值改為我們這款USB的,如:
/*
定義製造商和產品的ID號 */
#define USB_SKEL_VENDOR_ID 0x1234
#define
USB_SKEL_PRODUCT_ID
0x2345
這兩個值可以通過命令lsusb,當然你得先把USB設備先插到主機上了。或者查看廠商的USB設備的手冊也能得到,在我機器上運行lsusb是這樣的結果:
Bus
004 Device 001: ID 0000:0000
Bus 003 Device 002: ID 1234:2345 Abc Corp.
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID
0000:0000
得到這兩個值後把它定義到程序里就可以了。
注冊USB驅動程序:所有的USB驅動程序都必須創建的結構體是struct
usb_driver。這個結構體必須由USB驅動程序來填寫,包括許多回調函數和變數,它們向USB核心代碼描述USB驅動程序。創建一個有效的struct
usb_driver結構體,只須要初始化五個欄位就可以了,在框架程序中是這樣的:
static struct usb_driver skel_driver
= {
.owner = THIS_MODULE,
.name = "skeleton",
.probe = skel_probe,
.disconnect = skel_disconnect,
.id_table = skel_table,
};
⑹ 如何在Linux系統上掛載USB驅動器
掛載時使用mount命令:
格式:mount [-參數] [設備名稱] [掛載點]
我們常見的USB設備格式是:FAT32格式、NFTS格式等。
ext2 Linux目前常用的文件系統
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 網路文件系統
iso9660 CD-ROM光碟標准文件系統
ntfs windows NT 2000的文件系統
hpfs OS/2文件系統
掛u盤之前,運行命令cat /proc/partitions,看看現在系統中有哪些分區。
插上u盤以後,再次運行上述命令,看看多出來什麼分區。
1) 插入U盤
2) 輸入 fdisk -l /dev/sda 查看輸出結果,比如我的是這樣的:
# fdisk -l /dev/sda
Disk /dev/sda: 131 MB, 131104768 bytes
3 heads, 32 sectors/track, 2667 cylinders
Units = cylinders of 96 * 512 = 49152 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 2668 128016 6 FAT16
3) 看了上面的輸出就知道U盤所在的設備了,比如我的就是/dev/sdb1,接著便是掛載了
假設我將U盤掛載到/mnt/usb目錄(沒有的話,新建)中,就是mount -t msdos /dev/sdb1 /mnt/usb
如果是fat32
mount -t vfat /dev/sdb1 /mnt/usb
如果是ext2格式,就用命令:
mount -t ext2 /dev/sda1 /mnt/usb
4) 打開/mnt/usb 就可以看到你的U盤里的東西了!
cd /mnt/usb
5) 卸載命令則為:umount /mnt/usb。
需要解決更多linux問題,詳情請看 http://www.linuxprobe.com/chapter-00.html
望採納
⑺ linux針對usb3.0的驅動程序是什麼
Linux * USB 3.0 xHCI 驅動程序可從開放源代碼社區獲取。查看驅動是否生效:
lsusb -t
查看驅動是否集成到內核中:
grep -i xhci /boot/config-$(uname -r)
如果返回y則是集成到內核中,返回m則是編譯為模塊。
⑻ linux usb驅動在哪個文件夾
內核自帶,不需要啟動。添加新設備號,只需要增加udev配置文件,一行一個設備。
⑼ Linux下編寫USB驅動
有些USB是識別不了?
你掛載磁碟了嗎?