【Linux】USBデバイスドライバ、デバイスファイルの接続確認方法

最終更新日 2024年10月24日

USBデバイスドライバ、デバイスファイルの接続確認方法

この記事はこんな人におすすめ!

USBデバイスドライバがPCのどこに保存されているのか知りたい

そもそもデバイドライバとデバイスファイルの違いが分からない

LinuxではどのようにUSBが使用できるようになるのか教えてほしい

記事の概要

usbのデバイスファイルとデバイスドライバについて調べてまとめました。

また、Linuxでusbが使用できるようになるまでの仕組も解説しています。

そして実際にPCのどこにデバイスファイルやデバイスドライバが保管されているのか、

実際の機器を確認し、usbデバイスファイルの場所や、usbデバイスドライバについて記載しています。

usbデバイスの接続状況がおかしいときはこの記事を参考に確認してみてください!

デバイスファイルとデバイスドライバの違い

エンジニアとして働いていると、デバイスファイルや、デバイスドライバという言葉を耳にします。

しかし、デバイスドライバとデバイスファイルを混同されている方がいるので両者の違いについて解説します。

そもそもデバイスドライバとデバイスファイルとは何なのか。

両者の違いが分かっていないとusbデバイスの仕組みが理解できないので、

ちゃんと理解しておく必要があります。

デバイスファイルとは

デバイスファイルとは、ファイルシステムという仕組みのことです。

コンピュータに接続された周辺機器をファイルシステム上で、ファイルとして扱い、ファイルの読み書きと同じような手順で、
データの入出力や制御、周辺機器の操作を出来るようにした仕組みのことである。

デバイスドライバとは

デバイスドライバとはコンピュータの中、コンピュータの外にある装置や機器などの、
ハードウェアを制御するためのソフトウェアのことです。

デバイスファイルとデバイスドライバの違いまとめ

デバイスファイル:周辺機器を操作するために使用するファイルシステムという仕組み

デバイスドライバ:ハードウェアを制御するためのソフトウェア

LinuxにおけるUSBデバイスの仕組み

この章では、LinuxではどのようにUSBデバイスが使用できるようになっているのかを解説します。

USBデバイス認識に必要なドライバ

USBを認識させるには2種類のドライバが必要になる。

1つ目がホストドライバ、2つ目に個々のUSBドライバである。

ホストドライバとは、USB全体を制御するドライバである。

個々のUSBドライバとは、ホストドライバの階層の1つ下にある、個々のUSBデバイスを操作するデバイスドライバである。

USBデバイスは以上の2つのドライバがインストールされることによって、機器に認識され使用できるようになる。

※厳密にいうと、USBが動作するには、USBコントローラも必要です。

USBコントローラによって、最終的にUSBデバイスが使用できるようになります。

USBコントローラとは:

USBコントローラとは、USBによる通信を行うための制御を行う半導体チップのことです。

パソコンなどホスト側の機器に内蔵されています。

USBドライバとUSBコントローラの関係性

クラスドライバとベンダードライバ

USBデバイスが動作するためには、先ほど記載したように、全体のUSBデバイスのドライバであるホストドライバと

個々のUSBドライバ(各デバイスごとのデバイスドライバ)が必要になる。

デバイスドライバには2種類の種類があり、1つ目がクラスドライバで、2つ目がベンダードライバである。

クラスドライバとは、ベンダーに関係なく使用できる汎用的なドライバである。

例えば、キーボードやマウスのように大きな枠組みのデバイスドライバであり、クラスドライバは、

USBデバイスの機器の仕様に依存することなく、汎用的に使用することが出来る。

一方ベンダードライバとは、USBデバイス固有のデバイスドライバのこと。

LinuxでUSBを利用するのに必要なこと

LinuxでUSBを利用するには、最低限2つことが必要になる。

1つ目がホストドライバをインストールすること。

2つ目が利用したいUSBデバイスのデバイスドライバを個別にインストールすること。

そのため、ホストドライバとUSBデバイスドライバがないと、Linux環境では、USB機器は使用不可。

USB接続時のdmesgに出力されるログ

usbデバイスが使用できるようになるためには、usbデバイスがカーネルに認識されている必要がある。

そのため、usbデバイスがカーネルに認識されているか確認するために、ログを確認する。

usbデバイスを物理的なPCから抜き差しすると、dmesgで、usbデバイスに関する情報を出力する、
カーネル操作メッセージを確認することができます。

以下のようにログが確認できれば、カーネルがUSBデバイスを認識していると確認できる。

[loacalhost@]dmesg

[ 1194.160910] usb 1-1: new high-speed USB device number 2 using ehci-pci
[ 1194.904599] usb 1-1: New USB device found, idVendor=056e, idProduct=701a, bcdDevice=10.01
[ 1194.904614] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1194.904623] usb 1-1: Product: ELECOM 2MP Webcam
[ 1194.904629] usb 1-1: Manufacturer: Alcor Micro, Corp.
[ 1195.113861] Linux video capture interface: v2.00
[ 1195.168988] uvcvideo: Found UVC 1.00 device ELECOM 2MP Webcam (056e:701a)
[ 1195.274479] input: ELECOM 2MP Webcam as /devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/input/input6
[ 1195.274722] usbcore: registered new interface driver uvcvideo
[ 1195.274724] USB Video Class driver (1.1.1)
[ 1195.340486] usbcore: registered new interface driver snd-usb-audio
[ 1201.803948] usb 1-1: timeout: still 10 active urbs on EP #83
[ 1202.804161] usb 1-1: timeout: still 8 active urbs on EP #83
[ 1204.590335] usb 1-1: USB disconnect, device number 2
[ 1214.867980] sched: RT throttling activated
[ 1215.793513] usb 1-1: new high-speed USB device number 3 using ehci-pci
[ 1216.479396] usb 1-1: New USB device found, idVendor=056e, idProduct=701a, bcdDevice=10.01
[ 1216.479400] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1216.479403] usb 1-1: Product: ELECOM 2MP Webcam
[ 1216.479405] usb 1-1: Manufacturer: Alcor Micro, Corp.
[ 1216.487284] uvcvideo: Found UVC 1.00 device ELECOM 2MP Webcam (056e:701a)
[ 1216.533014] input: ELECOM 2MP Webcam as /devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/input/input7

ちなみに上記のうちの、↓のログは、マウスのusbを抜き差ししたときのログ。

[ 1201.803948] usb 1-1: timeout: still 10 active urbs on EP #83
[ 1202.804161] usb 1-1: timeout: still 8 active urbs on EP #83

↓のようなその他のログは、usbデバイス(WEBカメラ)をつないだ時のログです。

[ 1194.160910] usb 1-1: new high-speed USB device number 2 using ehci-pci
[ 1194.904599] usb 1-1: New USB device found, idVendor=056e, idProduct=701a, bcdDevice=10.01
[ 1194.904614] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1194.904623] usb 1-1: Product: ELECOM 2MP Webcam
[ 1194.904629] usb 1-1: Manufacturer: Alcor Micro, Corp.
[ 1195.113861] Linux video capture interface: v2.00
[ 1195.168988] uvcvideo: Found UVC 1.00 device ELECOM 2MP Webcam (056e:701a)
[ 1195.274479] input: ELECOM 2MP Webcam as /devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/input/input6
[ 1195.274722] usbcore: registered new interface driver uvcvideo
[ 1195.274724] USB Video Class driver (1.1.1)
[ 1195.340486] usbcore: registered new interface driver snd-usb-audio

usbデバイスの物理的な接続状態の確認方法

<usbデバイスの接続状態の確認ができるコマンド>

usbデバイスを使用するには、usbデバイスが物理的に問題なく接続できている必要がある。

以下のコマンドを使用して、usbデバイスがusbポートで問題なく接続されているか確認する必要がある。

1.lsusb

2.lsusb -t

lsusbコマンド

lsusbコマンドでは、デバイスを特定するIDを確認することができます。

[root@localhost]# lsusb
Bus 001 Device 003: ID 056e:701a Elecom Co., Ltd
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 004: ID 0e0f:0008 VMware, Inc.
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

lsusb -t

lsusb -t コマンドでは、lsusb よりも詳細な情報を調べることができます。

Linuxのマシンにつながったusb機器の物理的な接続の状態を確認する際に使用します。

[root@localhost]# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 12M
        |__ Port 1: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
        |__ Port 1: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
    |__ Port 1: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 1: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 1: Dev 3, If 2, Class=Audio, Driver=snd-usb-audio, 480M
    |__ Port 1: Dev 3, If 3, Class=Audio, Driver=snd-usb-audio, 480M

sysディレクトリによる接続状態の確認方法

Linuxではsysディレクトリにusbデバイス、usbドライバが保存されている。

そのためsysディレクトリを確認し、usbデバイス、usbドライバが作成されているか確認する必要がある。

sysディレクトリとは

unix系のcentosのsysディレクトリは、ドライバに関連するプロセスの情報が入っている。

Linuxのカーネルに関する情報があるディレクトリで、現在のカーネルについてや、現在のシステム全般についての内容が確認できる。また、再起動するたびに新しく作成される。

usbデバイスの確認

usbデバイスがファイルシステムで作成されているか確認する。

先ほどのログを確認すると、usbデバイスは「/sys/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/」に格納されている。

usbデバイスの格納場所を確認し、ファイルシステムとしてのusbデバイスが作成されているか確認する。

上記のusbデバイスディレクトリの中身を確認すると↓のようになっている。

これが先ほど説明した、usbデバイス(WEBカメラ)がデバイスファイルとして、ファイルシステム上で認識されているファイルである。そのためこれが、ファイルシステム上のusbデバイス(WEBカメラ)。

[root@localhost]# ls -l /sys/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1
合計 0
drwxr-xr-x. 10 root root     0  8月  7 10:34 1-0:1.0
-rw-r–r–.  1 root root  4096  8月  7 12:47 authorized
-rw-r–r–.  1 root root  4096  8月  7 12:47 authorized_default
-rw-r–r–.  1 root root  4096  8月  7 12:47 avoid_reset_quirk
-rw-r–r–.  1 root root  4096  8月  7 12:47 bConfigurationValue
-r–r–r–.  1 root root  4096  8月  7 10:44 bDeviceClass
-r–r–r–.  1 root root  4096  8月  7 12:47 bDeviceProtocol
-r–r–r–.  1 root root  4096  8月  7 12:47 bDeviceSubClass
-r–r–r–.  1 root root  4096  8月  7 12:47 bMaxPacketSize0
-r–r–r–.  1 root root  4096  8月  7 12:47 bMaxPower
-r–r–r–.  1 root root  4096  8月  7 12:47 bNumConfigurations
-r–r–r–.  1 root root  4096  8月  7 12:47 bNumInterfaces
-r–r–r–.  1 root root  4096  8月  7 12:47 bcdDevice
-r–r–r–.  1 root root  4096  8月  7 12:47 bmAttributes
-r–r–r–.  1 root root  4096  8月  7 10:44 busnum
-r–r–r–.  1 root root  4096  8月  7 12:47 configuration
-r–r–r–.  1 root root 65553  8月  7 10:44 descriptors
-r–r–r–.  1 root root  4096  8月  7 12:47 dev
-r–r–r–.  1 root root  4096  8月  7 10:44 devnum
-r–r–r–.  1 root root  4096  8月  7 12:47 devpath
lrwxrwxrwx.  1 root root     0  8月  7 11:09 driver -> ../../../../../bus/usb/drivers/usb
drwxr-xr-x.  3 root root     0  8月  7 10:37 ep_00
-r–r–r–.  1 root root  4096  8月  7 12:47 idProduct
-r–r–r–.  1 root root  4096  8月  7 11:09 idVendor
-rw-r–r–.  1 root root  4096  8月  7 12:47 interface_authorized_default
-r–r–r–.  1 root root  4096  8月  7 12:47 ltm_capable
-r–r–r–.  1 root root  4096  8月  7 11:09 manufacturer
-r–r–r–.  1 root root  4096  8月  7 10:44 maxchild
drwxr-xr-x.  2 root root     0  8月  7 10:37 power
-r–r–r–.  1 root root  4096  8月  7 12:47 product
-r–r–r–.  1 root root  4096  8月  7 12:47 quirks
-r–r–r–.  1 root root  4096  8月  7 11:09 removable
–w——-.  1 root root  4096  8月  7 12:47 remove
-r–r–r–.  1 root root  4096  8月  7 12:47 rx_lanes
-r–r–r–.  1 root root  4096  8月  7 12:47 serial
-r–r–r–.  1 root root  4096  8月  7 10:44 speed
lrwxrwxrwx.  1 root root     0  8月  7 10:44 subsystem -> ../../../../../bus/usb
-r–r–r–.  1 root root  4096  8月  7 12:47 tx_lanes
-rw-r–r–.  1 root root  4096  8月  7 10:44 uevent
-r–r–r–.  1 root root  4096  8月  7 12:47 urbnum
-r–r–r–.  1 root root  4096  8月  7 12:47 version

usbドライバの確認

usbドライバが作成されているか確認する。

usbドライバは /sys/bus/usb/driversに格納されている。このディレクトリを確認することによって、

どのドライバがどのデバイスを制御しているか確認することができる。

↓の/sys/bus/usb/drivers/usbがusbドライバ

[root@localhost usb1]# ls -l /sys/bus/usb/drivers
合計 0
drwxr-xr-x. 2 root root 0  8月  7 13:03 btusb
drwxr-xr-x. 2 root root 0  8月  7 13:03 hub
drwxr-xr-x. 2 root root 0  8月  7 11:09 snd-usb-audio
drwxr-xr-x. 2 root root 0  8月  7 12:47 usb
drwxr-xr-x. 2 root root 0  8月  7 13:03 usbfs
drwxr-xr-x. 2 root root 0  8月  7 13:03 usbhid
drwxr-xr-x. 2 root root 0  8月  7 13:03 usbserial_generic
drwxr-xr-x. 2 root root 0  8月  7 13:03 uvcvideo

↓の例では、/sys/bus/usb/drivers/usbの中を確認すると、usb1やusb2を制御しているということが分かる。
これらが、先ほど説明した個々のUSBドライバである。

[root@localhost usb1]# ls -l /sys/bus/usb/drivers/usb
合計 0
lrwxrwxrwx. 1 root root    0  8月  7 13:04 2-1 -> ../../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-1
lrwxrwxrwx. 1 root root    0  8月  7 13:04 2-2 -> ../../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2
lrwxrwxrwx. 1 root root    0  8月  7 13:04 2-2.1 -> ../../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2/2-2.1
–w——-. 1 root root 4096  8月  7 13:04 bind
–w——-. 1 root root 4096  8月  7 13:04 uevent
–w——-. 1 root root 4096  8月  7 13:04 unbind
lrwxrwxrwx. 1 root root    0  8月  7 13:04 usb1 -> ../../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1
lrwxrwxrwx. 1 root root    0  8月  7 13:04 usb2 -> ../../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2

USB接続状況の確認まとめ

1.ログを確認し、カーネルにUSBデバイスが認識されているか確認する。

2.ホストドライバがインストールされているか確認する。

3.個々のUSBドライバがインストールされているか確認する。

※ホストドライバ、個々のUSBドライバはsysディレクトリに保存されている。

4.「lsusb」「lsusb -t」コマンドでusbデバイスの物理的な接続状況を確認する。