ハードウェアが認識されているか確認する
# 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 -v
で Kernel driver in use
を見ればどのデバイスドライバ(カーネルモジュール)が使われているか確認できる。
lspci -v
で Kernel 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の場合)
1./etc/modprobe.d/modprobe.conf
を新規作成して以下のように記述
blacklist joydev
blacklist psmouse
blacklist mousedev
blacklist floppy
2./etc/mkinitcpio.conf
のFILES=
にそのファイル名を記述
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