Linuxデバイス・ハードウェア関連まとめ

この記事は最終更新日から1年以上が経過しています。

ハードウェアが認識されているか確認する

# lspci -v
# lspci -vt
# lspci -vv
# lsusb -v
# lshw

これらのコマンドはCentOSの場合はyum install pciutils usbutils lshwでインストールできる。

lspciの出力における00:01.2という部分の意味は「バス番号:スロット番号.機能番号」。
スロット番号はenp0s3とかの「s3」に対応している。

ハードウェア情報はprocファイルシステムの下記のパスでも参照できる:

  • /proc/bus/pci/*
    • PCIデバイス情報
  • /sys/bus/usb/*
    • USBデバイス情報
  • /proc/scsi/scsi
    • SCSIデバイス情報
  • /proc/cpuinfo
    • CPU情報
  • /proc/interrupts
    • IRQ情報
  • /proc/scsi/scsi
    • SCSIデバイス情報

lspci -vKernel driver in use を見ればどのデバイスドライバ(カーネルモジュール)が使われているか確認できる。

lspci -vKernel modules と出ているものは、そのデバイスのドライバとして使えるモジュールのリスト。

デバイスドライバ(正確にはカーネルモジュール)の操作・情報取得

ロードされている全ドライバの情報を一気に取得

cat /proc/modules  | cut -d' ' -f1 | while read i; do echo $i; modinfo $i; echo "==============="; done

デバイスドライバはディスクのどこに保存されているか

/lib/modules/の中にある。

ロードされているデバイスドライバの確認

lsmod

デバイスドライバの詳細情報表示

modinfo モジュール名(例:cdrom)

デバイスドライバのロード・アンロード

modprobe

insmod rmmodでもできるが、modprobeの方が高機能)

モジュールとメジャー番号の対応を調べる

cat /proc/devices

Linuxのデバイスはメジャー番号とマイナー番号を持っている。

# ls -l /dev/ttyS0
↓キャラクタデバイス      ↓メジャー番号、マイナー番号
crw-rw---- 1 root dialout 4, 64 Feb  6 21:45 ttyS0  ←デバイスファイル

メジャー番号がどのデバイスに対応するかはカーネルのドキュメントに書いてある。
https://www.kernel.org/doc/Documentation/devices.txt
上記ファイル内で「4 char」を検索するとちゃんと「64 = /dev/ttyS0 First UART serial port」と書いてある。

ブロックデバイスとキャラクタデバイス

  • ブロックデバイスはブロック単位(512バイトや1024バイト)で読み書き。ランダムアクセスできる。
  • キャラクタデバイスは1バイト単位。シーケンシャルで、読み戻したりはできない。

デバイスファイルの作成

mknod -m 660 /dev/ttyS0 c 4 64

デバイスはベンダーID、デバイスIDを持っている。
ベンダーID、デバイスIDは有償の登録制。
/usr/share/hwdata/ 内のファイルにIDとテキストの対応が記されている。

異なるカーネルのバージョン間でデバイスドライバの互換性はない

カーネル2.6.10用にコンパイルしたドライバは2.6.12で動くとは限らない。

例:どのグラフィックのドライバが使われているか調べる

lshw -c video
  *-display              
       description: VGA compatible controller
       product: 82865G Integrated Graphics Controller
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 02
       width: 32 bits
       clock: 33MHz
       capabilities: pm vga_controller bus_master cap_list rom
       configuration: driver=i915 latency=0
       resources: irq:16 memory:e8000000-efffffff memory:feb80000-febfffff ioport:ed98(size=8)

driver=i915と書いてあるので、modinfoする:

modinfo i915
filename:       /lib/modules/3.18.6-1-ARCH/kernel/drivers/gpu/drm/i915/i915.ko.gz
license:        GPL and additional rights
description:    Intel Graphics
author:         Intel Corporation
author:         Tungsten Graphics, Inc.
(略)

/lib/modules/3.18.6-1-ARCH/kernel/drivers/gpu/drm/i915/i915.ko.gz が使われていることが分かった。

特定のデバイスドライバを読み込ませないようにする(Arch Linuxの場合)

参考:https://wiki.archlinuxjp.org/index.php/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB#.E3.83.96.E3.83.A9.E3.83.83.E3.82.AF.E3.83.AA.E3.82.B9.E3.83.88

1./etc/modprobe.d/modprobe.confを新規作成して以下のように記述

blacklist joydev
blacklist psmouse
blacklist mousedev
blacklist floppy

2./etc/mkinitcpio.confFILES=にそのファイル名を記述

FILES=/etc/modprobe.d/modprobe.conf

3.initramfsを再作成(カーネルをインストールしたときと同じコマンド)

mkinitcpio -k 4.1.2-aoyama -c /etc/mkinitcpio.conf -g /boot/initramfs-4.1.2-aoyama.img

-kはカーネルバージョンの指定。現行稼働中のカーネルの場合は省略可能のようだ。

参考

●QEMUで仮想PCIデバイスとデバイスドライバを作ってみる
(デバイスドライバの情報がいっぱい)
http://qiita.com/rafilia/items/7e30f1119614964ce4c9

●実践でも役立つLPICドリル(1):表示結果から読み解け! ハードウェア構成の調査 (3/3) - @IT
http://www.atmarkit.co.jp/ait/articles/0804/10/news136_3.html

aosho235
1981年生まれ。駅すぱあとの会社で新規サービスを開発しています。好きなものはOS~ミドルウェアのレイヤー、開発を楽にするためのツールやフレームワークの整備、自分自身が便利だと思うものを作ること。
https://aosho235.com/
val
経路検索システム「駅すぱあと」をはじめ、全国のデータと高い信頼性をベースにさまざまなサービスを展開。
https://www.val.co.jp/
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
コメント
この記事にコメントはありません。
あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした