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

最終更新日 2024年12月28日

スポンサーリンク

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

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デバイスの機器の仕様に依存することなく、汎用的に使用することが出来ます。

一方、ベンダードライバとは、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のカーネルに関する情報があるディレクトリで、現在のカーネルについてや、現在のシステム全般についての内容が確認できます。
※sysディレクトリは再起動するたびに新しく作成されます。

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確認時のポイントを整理します。

  • ログを確認し、カーネルにUSBデバイスが認識されているか確認する。
  • ホストドライバがインストールされているか確認する。
  • 個々のUSBドライバがインストールされているか確認する。
    ※※ホストドライバ、個々のUSBドライバはsysディレクトリに保存されている。
  • 「lsusb」「lsusb -t」コマンドでusbデバイスの物理的な接続状況を確認する。

この記事も参考になるかも!
この記事を書いた人!

ゴリタン

インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。

CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。