linux設備節點
① 在linux中是不是能看到設備節點就說明設備可以被訪問了解決思路
Linux 中的設備有2種類型:字元設備(無緩沖且只能順序存取)、塊設備(有緩沖且可以隨機存取)。每個字元設備和塊設備都必須有主、次設備號,主設備號相同的設備是同類設備(使用同一個驅動程序)。這些設備中,有些設備是對實際存在的物理硬體的抽象,而有些設備則是內核自身提供的功能(不依賴於特定的物理硬體,又稱為"虛擬設備")。每個設備在 /dev 目錄下都有一個對應的文件(節點)。可以通過 cat /proc/devices 命令查看當前已經載入的設備驅動程序的主設備號。內核能夠識別的所有設備都記錄在原碼樹下的 Documentation/devices.txt 文件中。在 /dev 目錄下除了字元設備和塊設備節點之外還通常還會存在:FIFO管道、Socket、軟/硬連接、目錄。這些東西沒有主/次設備號。
了解這些設備的最基本要求就是對 每個設備文件的含義了如指掌,下面就醫列表的形式列出常見的設備文件以及相應的含義(比較偏僻的就省略了):
----------------------------------------------------------------------
主設備號 設備類型
次設備號=文件名 簡要說明
----------------------------------------------------------------------
0 未命名設備(例如:掛載的非設備)
0 = 未空設備號保留
1 char 內存設備
1 = /dev/mem 直接存取物理內存
2 = /dev/kmem 存取經過內核虛擬之後的內存
3 = /dev/null 空設備。任何寫入都將被直接丟棄,任何讀取都將得到EOF。
4 = /dev/port 存取 I/O 埠
5 = /dev/zero 零位元組源,只能讀取到無限多的零位元組。
7 = /dev/full 滿設備。任何寫入都將失敗,並把errno設為ENOSPC以表示沒有剩餘空間。
8 = /dev/random 隨機數發生器。完全由用戶的輸入來產生隨機數。
如果用戶停止所有動作,則停止產生新的隨機數。
9 = /dev/urandom 更快,但是不夠安全的隨機數發生器。盡可能由用戶的輸入來產生隨機數,
如果用戶停止所有動作,則把已經產生的隨機數做為種子來產生新的隨機數。
10 = /dev/aio 非同步 I/O 通知介面
11 = /dev/kmsg 任何對該文件的寫入都將作為 printk 的輸出
1 block RAM disk
0 = /dev/ram0 第1個 RAM disk (initrd只能使用ram0)
1 = /dev/ram1 第2個 RAM disk
...
200 = /dev/ram200 第200個 RAM disk
4 char TTY(終端)設備
0 = /dev/tty0 當前虛擬控制台
1 = /dev/tty1 第1個虛擬控制台
...
63 = /dev/tty63 第63個虛擬控制台
4 block 如果根文件系統以是以只讀方式掛載的,那麼就不可能創建真正的設備節點,
此時就使用該設備作為動態分配的主(major)設備的別名
0 = /dev/root
5 char 其他 TTY 設備
0 = /dev/tty 當前 TTY 設備
1 = /dev/console 系統控制台
2 = /dev/ptmx 所有 PTY master 的復用器
7 char 虛擬控制台捕捉設備(這些設備既允許讀也允許寫)
0 = /dev/vcs 當前虛擬控制台(vc)的文本內容
1 = /dev/vcs1 tty1 的文本內容
...
63 = /dev/vcs63 tty63 的文本內容
128 = /dev/vcsa 當前虛擬控制台(vc)的文本/屬性內容
129 = /dev/vcsa1 tty1 的文本/屬性內容
...
191 = /dev/vcsa63 tty63 的文本/屬性內容
7 block 回環設備(用一個普通的磁碟文件來模擬一個塊設備)
對回環設備的綁定由 mount(8) 或 losetup(8) 處理
0 = /dev/loop0 第1個回環設備
1 = /dev/loop1 第2個回環設備
...
8 block SCSI 磁碟(0-15)
0 = /dev/sda 第1個 SCSI 磁碟(整個磁碟)
16 = /dev/sdb 第2個 SCSI 磁碟(整個磁碟)
32 = /dev/sdc 第3個 SCSI 磁碟(整個磁碟)
...
240 = /dev/sdp 第16個 SCSI 磁碟(整個磁碟)
分區表示方法如下(以第3個 SCSI 磁碟為例)
33 = /dev/sdc1 第1個分區
34 = /dev/sdc2 第2個分區
...
47 = /dev/sdc15 第15個分區
對於Linux/i386來說,分區1-4是主分區,5-15是邏輯分區。
9 block Metadisk(RAID)設備
0 = /dev/md0 第1組 metadisk
1 = /dev/md1 第2組 metadisk
...
metadisk 驅動用於將同一個文件系統分割到多個物理磁碟上。
10 char 非串口滑鼠,各種雜項設備和特性
1 = /dev/psaux PS/2滑鼠
131 = /dev/temperature 機器內部溫度
134 = /dev/apm_bios APM(高級電源管理) BIOS
135 = /dev/rtc 實時時鍾(Real Time Clock)
144 = /dev/nvram 非易失配置 RAM
162 = /dev/smbus 系統管理匯流排(System Management Bus)
164 = /dev/ipmo Intel的智能平台管理(Intelligent Platform Management)介面
173 = /dev/ipmikcs 智能平台管理(Intelligent Platform Management)介面
175 = /dev/agpgart AGP圖形地址重映射表(Graphics Address Remapping Table)
182 = /dev/perfctr 性能監視計數器
183 = /dev/hwrng 通用硬體隨機數發生器
184 = /dev/cpu/microcode CPU微代碼更新介面
186 = /dev/atomicps 進程狀態數據的原子快照
188 = /dev/smbusbios SMBus(系統管理匯流排) BIOS
200 = /dev/net/tun TAP/TUN 網路設備(TAP/TUN以軟體的方式實現了網路設備)
TAP模擬了乙太網幀(第二層),TUN模擬了IP包(第三層)。
202 = /dev/emd/ctl 增強型 Metadisk RAID (EMD) 控制器
220 = /dev/mptctl Message passing technology (MPT) control
223 = /dev/input/uinput 用戶層輸入設備驅動支持
227 = /dev/mcelog X86_64 Machine Check Exception driver
228 = /dev/hpet HPET driver
229 = /dev/fuse Fuse(用戶空間的虛擬文件系統)
231 = /dev/snapshot 系統內存快照
232 = /dev/kvm 基於內核的虛構機(基於AMD SVM和Intel VT硬體虛擬技術)
11 block SCSI CD-ROM 設備
0 = /dev/scd0 第1個 SCSI CD-ROM
1 = /dev/scd1 第2個 SCSI CD-ROM
...
13 char 核心輸入設備
32 = /dev/input/mouse0 第1個滑鼠
33 = /dev/input/mouse1 第2個滑鼠
...
62 = /dev/input/mouse30 第31個滑鼠
63 = /dev/input/mice 所有滑鼠的統一
64 = /dev/input/event0 第1個事件隊列
65 = /dev/input/event1 第2個事件隊列
...
95 = /dev/input/event1 第32個事件隊列
21 char 通用 SCSI 設備(通常是SCSI光碟機)
0 = /dev/sg0 第1個通用 SCSI 設備
1 = /dev/sg1 第2個通用 SCSI 設備
...
29 char 通用幀緩沖(frame buffer)設備
0 = /dev/fb0 第1個幀緩沖設備
1 = /dev/fb1 第2個幀緩沖設備
...
31 = /dev/fb31 第32個幀緩沖設備
30 char iBCS-2 兼容設備
0 = /dev/socksys 套接字訪問介面
1 = /dev/spx SVR3 本地 X 介面
32 = /dev/inet/ip 網路訪問介面
33 = /dev/inet/icmp
34 = /dev/inet/ggp
35 = /dev/inet/ipip
36 = /dev/inet/tcp
37 = /dev/inet/egp
38 = /dev/inet/pup
39 = /dev/inet/udp
40 = /dev/inet/idp
41 = /dev/inet/rawip
此外,iBCS-2 還需要下面的連接必須存在
/dev/ip -> /dev/inet/ip
/dev/icmp -> /dev/inet/icmp
/dev/ggp -> /dev/inet/ggp
/dev/ipip -> /dev/inet/ipip
/dev/tcp -> /dev/inet/tcp
/dev/egp -> /dev/inet/egp
/dev/pup -> /dev/inet/pup
/dev/udp -> /dev/inet/udp
/dev/idp -> /dev/inet/idp
/dev/rawip -> /dev/inet/rawip
/dev/inet/arp -> /dev/inet/udp
/dev/inet/rip -> /dev/inet/udp
/dev/nfsd -> /dev/socksys
/dev/X0R -> /dev/null
36 char Netlink 支持
0 = /dev/route 路由, 設備更新, kernel to user
3 = /dev/fwmonitor Firewall packet 復制
59 char sf 防火牆模塊
0 = /dev/firewall 與 sf 內核模塊通信
65 block SCSI 磁碟(16-31)
0 = /dev/sdq 第17個 SCSI 磁碟(整個磁碟)
16 = /dev/sdr 第18個 SCSI 磁碟(整個磁碟)
32 = /dev/sds 第19個 SCSI 磁碟(整個磁碟)
...
240 = /dev/sdaf 第32個 SCSI 磁碟(整個磁碟)
66 block SCSI 磁碟(32-47)
0 = /dev/sdag 第33個 SCSI 磁碟(整個磁碟)
16 = /dev/sdah 第34個 SCSI 磁碟(整個磁碟)
32 = /dev/sdai 第35個 SCSI 磁碟(整個磁碟)
...
240 = /dev/sdav 第48個 SCSI 磁碟(整個磁碟)
89 char I2C 匯流排介面
0 = /dev/i2c-0 第1個 I2C 適配器
1 = /dev/i2c-1 第2個 I2C 適配器
...
98 block 用戶模式下的虛擬塊設備(分區處理方式與 SCSI 磁碟相同)
0 = /dev/ubda 第1個用戶模式塊設備
16 = /dev/udbb 第2個用戶模式塊設備
...
103 block 審計(Audit)設備
0 = /dev/audit 審計(Audit)設備
128-135 char Unix98 PTY master
這些設備不應當存在設備節點,而應當通過 /dev/ptmx 介面訪問。
136-143 char Unix98 PTY slave
這些設備節點是自動生成的(伴有適當的許可權和模式),不能手動創建。
方法是通過使用適當的 mount 選項(通常是:mode=0620,gid=<"tty"組的gid>)
將 devpts 文件系統掛載到 /dev/pts 目錄即可。
0 = /dev/pts/0 第1個 Unix98 PTY slave
1 = /dev/pts/1 第2個 Unix98 PTY slave
...
153 block Enhanced Metadisk RAID (EMD) 存儲單元(分區處理方式與 SCSI 磁碟相同)
0 = /dev/emd/0 第1個存儲單元
1 = /dev/emd/0p1 第1個存儲單元的第1個分區
2 = /dev/emd/0p2 第1個存儲單元的第2個分區
...
15 = /dev/emd/0p15 第1個存儲單元的第15個分區
16 = /dev/emd/1 第2個存儲單元
32 = /dev/emd/2 第3個存儲單元
...
240 = /dev/emd/15 第16個存儲單元
180 char USB 字元設備
96 = /dev/usb/hiddev0 第1個USB人機界面設備(滑鼠/鍵盤/游戲桿/手寫版等人操作計算機的設備)
...
111 = /dev/usb/hiddev15 第16個USB人機界面設備
180 block USB 塊設備(U盤之類)
0 = /dev/uba 第1個USB 塊設備
8 = /dev/ubb 第2個USB 塊設備
16 = /dev/ubc 第3個USB 塊設備
...
192 char 內核 profiling 介面
0 = /dev/profile Profiling 控制設備
1 = /dev/profile0 CPU 0 的 Profiling 設備
2 = /dev/profile1 CPU 1 的 Profiling 設備
...
193 char 內核事件跟蹤介面
0 = /dev/trace 跟蹤控制設備
1 = /dev/trace0 CPU 0 的跟蹤設備
2 = /dev/trace1 CPU 1 的跟蹤設備
...
195 char Nvidia 圖形設備(比如顯卡)
0 = /dev/nvidia0 第1個 Nvidia 卡
1 = /dev/nvidia1 第2個 Nvidia 卡
...
255 = /dev/nvidiactl Nvidia 卡控制設備
202 char 特定於CPU模式的寄存器(model-specific register,MSR)
0 = /dev/cpu/0/msr CPU 0 的 MSRs
1 = /dev/cpu/1/msr CPU 1 的 MSRs
...
203 char CPU CPUID 信息
0 = /dev/cpu/0/cpuid CPU 0 的 CPUID
1 = /dev/cpu/1/cpuid CPU 1 的 CPUID
...
===================================================================
這部分詳細說明一些應該或可能存在於 /dev 目錄之外的文件。
鏈接最好使用與這里完全相同的格式(絕對路徑或相對路徑)。
究竟是使用硬鏈接(hard)還是軟連接(symbolic)取決於不同的設備。
必須的鏈接
必須在所有的系統上都存在這些連接:
鏈接 目標 鏈接類型 簡要說明
/dev/fd /proc/self/fd symbolic 文件描述府
/dev/stdin fd/0 symbolic 標准輸入文件描述府
/dev/stdout fd/1 symbolic 標准輸出文件描述符
/dev/stderr fd/2 symbolic 標准錯誤文件描述符
/dev/nfsd socksys symbolic 僅為 iBCS-2 所必須
/dev/X0R null symbolic 僅為 iBCS-2 所必須
[注意] /dev/X0R 是 <字母 X>-<數字 0>-<字母 R>
推薦的鏈接
推薦在所有的系統上都存在這些連接:
鏈接 目標 鏈接類型 簡要說明
/dev/core /proc/kcore symbolic 為了向後兼容
/dev/ramdisk ram0 symbolic 為了向後兼容
/dev/ftape qft0 symbolic 為了向後兼容
/dev/bttv0 video0 symbolic 為了向後兼容
/dev/radio radio0 symbolic 為了向後兼容
/dev/i2o* /dev/i2o/* symbolic 為了向後兼容
/dev/scd? sr? hard 代替 SCSI CD-ROM 的名字
本地定義的鏈接
下面的鏈接很可能需要根據機器的實際硬體配置創建其中的一部分甚至全部。
這些鏈接僅僅是為了迎合習慣用法,它們既非必須也非推薦。
鏈接 目標 鏈接類型 簡要說明
/dev/mouse mouse port symbolic 當前滑鼠
/dev/tape tape device symbolic 當前磁帶
/dev/cdrom CD-ROM device symbolic 當前CD-ROM
/dev/cdwriter CD-writer symbolic 當前CD-writer
/dev/scanner scanner symbolic 當前掃描儀
/dev/modem modem port symbolic 當前數據機
/dev/root root device symbolic 當前根文件系統所在設備
/dev/swap swap device symbolic 當前swap所在設備
/dev/modem 不應當用於能夠同時支持呼入和呼出的modem,因為往往會導致鎖文件問題。
如果存在 /dev/modem ,那麼它應當指向一個恰當的主 TTY 設備。
對於SCSI設備,
/dev/tape 和 /dev/cdrom 應該分別指向"cooked"設備 /dev/st* 和 /dev/sr* ;
而 /dev/cdwriter 和 /dev/scanner 應當分別指向恰當的 /dev/sg* 。
/dev/mouse 可以指向一個主串列 TTY 設備、一個硬體滑鼠、
或者一個對應滑鼠驅動程序的套接字(例如 /dev/gpmdata)。
套接字和管道
持久套接字和命名管道可以存在於 /dev 中。常見的有:
/dev/printer socket lpd 本地套接字
/dev/log socket syslog 本地套接字
/dev/gpmdata socket gpm 滑鼠多路復用器(multiplexer)
/dev/gpmctl socket (LFS-LiveCD中出現)
/dev/initctl fifo pipe init 監聽它並從中獲取信息(用戶與 init 進程交互的通道)
掛載點
以下名稱被保留用於掛載特殊的文件系統。
這些特殊的文件系統只提供內核界面而不提供標準的設備節點。
/dev/pts devpts PTY slave 文件系統
/dev/shm tmpfs 提供對 POSIX 共享內存的直接訪問
===================================================================
終端(或TTY)設備是一種特殊的字元設備。終端設備是可以在會話中扮演控制終端角色的任何設備,
包括:虛擬控制台、串列介面(已廢棄)、偽終端(PTY)。
所有的終端設備共享一個通用的功能集合:line discipline,
它既包含通用的終端 line discipline 也包含SLIP和PPP模式。
所有的終端設備的命名都很相似。這部分內容將解釋命名規則和各種類型的TTY(終端)的使用。
需要注意的是這些命名習慣包含了幾個歷史遺留包袱。
其中的一些是Linux所特有的,另一些則是繼承自其他系統,
還有一些反映了Linux在成長過程中拋棄了原來借用自其它系統的一些習慣。
井號(#)在設備名里表示一個無前導零的十進制數。
虛擬控制台(Virtual console)和控制台設備(console device)
虛擬控制台是在系統視頻監視器上全屏顯示的終端。
虛擬控制台被命名為編號從 /dev/tty1 開始的 /dev/tty# 。
/dev/tty0 是當前虛擬控制台。
/dev/tty0 用於在不能使用幀緩沖設備(/dev/fb*)的機器上存取系統視頻卡,
注意,不要將 /dev/console 用於此目的。
/dev/console 由內核管理,系統消息將被發送到這里。
單用戶模式下必須允許 login 使用 /dev/console 。
串列介面(已廢棄)
這里所說的"串列介面"是指 RS-232 串列介面和任何模擬這種介面的設備,
不管是在硬體(例如數據機)還是在軟體(例如ISDN驅動)中模擬。
在linux中的每一個串列介面都有兩個設備名:
主設備或呼入(callin)設備、交替設備或呼出(callout)設備。
設備類型之間使用字母的大小寫進行區分。
比如,對於任意字母X,"tty"設備名為 /dev/ttyX# ,而"cu"設備名則為 /dev/cux# 。
由於歷史原因,/dev/ttyS# 和 /dev/ttyC# 分別等價於 /dev/cua# 和 /dev/cub# 。
名稱 /dev/ttyQ# 和 /dev/cuq# 被保留為本地使用。
偽終端(PTY)
偽終端用於創建登陸會話或提供其它功能,
比如通過 TTY line discipline (包括SLIP或者PPP功能)來處理任意的數據生成。
每一個 PTY 都有一個master端和一個slave端。按照 System V/Unix98 的 PTY 命名方案,
所有master端共享同一個 /dev/ptmx 設備節點(打開它內核將自動給出一個未分配的PTY),
所有slave端都位於 /dev/pts 目錄下,名為 /dev/pts/# (內核會根據需要自動生成和刪除它們)。
一旦master端被打開,相應的slave設備就可以按照與 TTY 設備完全相同的方式使用。
master設備與slave設備之間通過內核進行連接,等價於擁有 TTY 功能的雙向管道(pipe)。
===============================
你可能會很奇怪,為什麼沒有 /dev/hda 這樣的設備,難道不常用么?
原因在於從 2.6.19 開始,內核引入了新的ATA驅動,將SATA/IDE硬碟同意使用 /dev/sd? 來表示了,所以 /dev/hd? 就沒有存在的必要了
② LINUX設備節點
是這樣的,之所以有的時候不需要你自己創建節點,因為有程序自動創建。
class_create和device_create,具體用法很簡單,你自己查查就知道了。
還有,mknod都是在剛開始學習的時候用到,難道你以後寫驅動都要手動建立設備節點嗎?
③ Linux如何創建設備節點
mknod 設備節點名稱 設備類型 主設備號 次設備號,例如:mknod memdev c 260
0,創建好之後會在/dev目錄下看到一個字元設備
④ 如何解決Linux下USB設備節點名不固定問題
以usb轉串口為例,通常設備節點名為ttyusbx(x為0~n),linux內核會根據插入設備的先後順序進行編號的分配,比如第一個插入的設備編號為0,然後依此加1。
如果僅僅以設備節點ttyusbn來區別具體是哪個設備,因為末位的編號是隨時會變的,所以就會造成混亂。無法保證a設備就是0,b設備就是1。目前的內核早已經解決類似的問題,將所以有usb設備都導致到sys文件系統中,其實每個usb埠都有唯一的埠號,相當於每個門店的門牌號。只要我們依據埠號來進行設備的區分,那麼問題就迎刃而解了。
⑤ linux內核怎麼訪問設備節點
設備節點代表是每個機算機硬體,那個軟體要用那個硬體,它就會打開那設備節點嘛。。。 /dev/ttyS0這個是串口0 也就是windows 裡面的com1 ,只有要用到串口0的程序才會打開這個設備節點。 個人愚見,僅供參考,望及時採納
⑥ 什麼是Linux設備節點
是linux系統中掛接系統使用的一個外接埠。比如掛載光碟機,軟碟機,或硬碟,文件設備等等。
⑦ 如何解決Linux下USB設備節點名不固定問題
Linux下USB設備節點名不固定問題經常會遇到,下面就是解決的方法:
以USB轉串口為例,通常設備節點名為ttyUSBx(x為0~n),Linux內核會根據插入設備的先後順序進行編號的分配,比如第一個插入的設備編號為0,然後依此加1。
如果僅僅以設備節點ttyUSBn來區別具體是哪個設備,因為末位的編號是隨時會變的,所以就會造成混亂。無法保證A設備就是0,B設備就是1。其實這個問題在LDD3上已經提到過,目前的內核早已經解決類似的問題,將所以有USB設備都導致到sys文件系統中,其實每個USB埠都有唯一的埠號,相當於每個門店的門牌號。只要我們依據埠號來進行設備的區分,那麼問題就迎刃而解了。
比如當前設備插入兩個USB轉串口設備後,查看ttyUSBn所在埠的埠號:
root@android:/ $ ls -l /sys/class/tty/
...
lrwxrwxrwx root root 2011-01-01 13:40 ttyUSB0 -> ../../devices/ff540000.usb/usb3/3-1/3-1.1/3-1.1:1.0/ttyUSB0/tty/ttyUSB0
lrwxrwxrwx root root 2011-01-01 13:43 ttyUSB1 -> ../../devices/ff540000.usb/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1/tty/ttyUSB1
root@android:/ $ 12345
其中ttyUSB0所在的埠號為3-1.1,而ttyUSB1所在的埠號為3-1.2。
其它類型USB設備同理,以上思路清理完畢。
查看系統當前usb設備,下面是對第二列排序的結果。
$ lsusb
Bus 001 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub
Bus 001 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID xxx:xxx Genesys Logic, Inc. GL827L SD/MMC/MS Flash Card Reader
Bus 001 Device 005: ID xxx:xxx Philips (or NXP)
Bus 002 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub
Bus 002 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 003: ID xxx:xxx Intel Corp.
Bus 003 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub
Bus 004 Device 001: ID xxx:xxx Linux Foundation 3.0 root hub
第二列是usb設備的hub編號。pc中usb設備都是接在hub上的,即使你的主板提供好多usb口,他們實際都是接在hub上的。
第四列是usb設備編號,設備在本機的編號。
所以,上面信息顯示一共有4個usb hub(3個usb2.0,一個usb3.0)。如果
黑體字部分是我機器上的三個設備,001.003 是機箱自帶讀卡器,001.005是無線鍵盤,002.003是intel無線網卡藍牙模塊(具體怎麼知道的往下看)。
usb設備也可以用在內核文件中找到/sys/bus/usb/devices。linux將所有設備驅動映射到了/sys下。
ls -1 /sys/bus/usb/devices/
1-0:1.0
1-1
1-1:1.0
1-1.2
1-1.2:1.0
1-1.4
1-1.4.1
1-1.4:1.0
1-1.4.1:1.0
1-1.4.1:1.1
1-1.4.1:1.2
1-1.5
1-1.5:1.0
1-1.5:1.1
1-1.5:1.2
2-0:1.0
2-1
2-1:1.0
2-1.5
2-1.5:1.0
2-1.5:1.1
3-0:1.0
4-0:1.0
usb1
usb2
usb3
usb4
都是符號連接。也可以用ls -l /sys/bus/usb/devices/ 看具體位置
輸出看起來比較亂。用 udevadm工具能比較清楚列出設備信息。命令看起來是這樣的:
udevadm info -p /sys/bus/usb/devices/usb1 -q property
那怎麼找出是那個usb設備呢?
Bus 002 Device 003: ID xxx:xxx Intel Corp.
第二列,002 就要在所有2開頭的文件去找,下面的符合第一規則。
2-0:1.0
2-1
2-1:1.0
2-1.5
2-1.5:1.0
2-1.5:1.1
通常系統的usb hub占據了`-`減號後第一位0。第一個 2-0:1.0,就是usb hub。
2-1.5*文件就是上面的設備。
$ udevadm info -p /sys/bus/usb/devices/2-1.5 -q property
BUSNUM=002
DEVNAME=/dev/bus/usb/002/003
DEVNUM=003
............
ID_MODEL_ID=xxx
............
ID_VENDOR=xxx
............
ID_VENDOR_FROM_DATABASE=Intel Corp.
............
002和003 就是lsusb 的第2/4列. 第6列,來自modelID和vender。
lsusb中的的東東就是這么來的。
那問題是怎麼知道是藍牙呢? 答案是繼續用udevadm查:
$ udevadm info -p /sys/bus/usb/devices/2-1.5:1.0 -q property
ID_USB_CLASS_FROM_DATABASE=Wireless
ID_USB_PROTOCOL_FROM_DATABASE=Bluetooth
ID_USB_SUBCLASS_FROM_DATABASE=Radio Frequency
ID_VENDOR_FROM_DATABASE=Intel Corp.