2016年10月4日火曜日

デバイス情報

Linuxにはデバイスファイルというものがあります。デバイスファイルとはなにかというと、ハードウェアへアクセスを抽象化するものです。LinuxはOperating Systemなのでハードウェアにもアクセスするわけですが、それらのアクセスはデバイスウェアというファイルを通じてなされます。Linuxは直接ハードにアクセスしているわけではなくて、デバイスウェアを通してハードにアクセスしているわけですね。

このデバイスウェアは /dev 以下にあります。以下を見てみてください。


このようなデバイスウェアは udev という仕組みによって自動的に作られます。わざわざ自分でつくらなくてもいいわけですね。

こういうデバイスウェアはLinuxカーネルが色々と利用するわけですが、Linuxカーネルとは次のようなものです。
カーネル(英: kernel)は、階層型に設計されたオペレーティングシステム (OS) の中核となる部分である。 アプリケーションとハードウェアレベルでの実際のデータ処理との間の架け橋である。 システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理する。 - Wikipedia カーネル より
このLinuxカーネルが認識しているデバイスの情報は/proc以下のファイルで確認することができます。
/proc/cpuinfo CPU情報
/proc/interrupts IRQ情報
/proc/ioports I/Oアドレス情報
/proc/meminfo メモリ情報
/proc/bus/usb/* USBデバイス情報
/proc/bus/pci/* PCIデバイス情報
この/proc以下のファイルは仮想的なもので実態のないファイルですが、catコマンドで中の情報が見れたりします。例えば、
$ cat /proc/meminfo
とターミナルに打つと次のように表示されます。これは/proc以下の/meminfoを閲覧するコマンドです。このコマンドを打つと以下のように表示されます。/meminfoは先述の通りメモリの情報に関するファイルですから、メモリの情報が表示されていることがわかりますね。



PCIデバイスは「広義」では「PCIバス」に接続されているデバイス「すべて」を指すようです[1]。
例としてはLANカード、SATAチップ、サウンドカードなどです。ただし、一般的にはPCIスロットに増設したデバイスを指します。例えばこのLANカードをパソコンのマザーボードのPCIスロットに差し込むとLANがLinuxカーネルに認識されるようになります。LANカードがLinuxカーネルに認識されるようになると何が嬉しいのかというと、そのパソコンでインターネットが使えるようになるのです。

このように大切なPCIデバイスですが、Linuxカーネルが認識しているPCIデバイス一覧を表示するためにはlspciコマンドを使います。ターミナル上で「lspci」と打つと以下のようにLinuxカーネルが認識しているPCIデバイスの一覧が表示されます。Host bridgeがどうとかAudio deviceがどうとか書いてありますね。


詳細な情報がほしいときは-vオプションを使います。さらに詳細な情報がほしいときは-vvオプションを使います。以下は-vオプションをつけてlspciを使ってみたものです。細かい情報まで出ていることがわかりますね。-vvオプションをつけるとより詳しい情報が表示されます。


なお、以下のように
cat /proc/pci
というコマンドでもpci情報が見れる・・・らしいのですが、私のLinuxPCでは見れませんでした。他にも私と同様に見れない人もいるようです[2]。これはどうやらデフォルトで使えないように設定されているみたいですね[3]。redgrenという名前のユーザーさんが「SUSE(ドイツ企業開発のLinuxベースのOS[4])は kernelのrecompileで使えるようになるが、おそらくデフォルトでcat /proc/pciは使えないのではないか」と言っています。おそらくLinux mintもSUSEと同じくデフォルトで使えないのでしょう。lspciコマンドがあるので使わないでしょうしね。

以下はそのredgrenさんからの引用[3]
CONFIG_PCI_LEGACY_PROC:                                                                  │
  │                                                                                          │
  │ This feature enables a procfs file -- /proc/pci -- that provides a                       │
  │ summary of PCI devices in the system.                                                    │
  │                                                                                          │
  │ This feature has been deprecated as of v2.5.53, in favor of using the                    │
  │ tool lspci(8). This feature may be removed at a future date.                             │
  │                                                                                          │
  │ lspci can provide the same data, as well as much more. lspci is a part of                │
  │ the pci-utils package, which should be installed by your distribution.                   │
  │ See <file: Documentation/Changes> for information on where to get the latest              │
  │ version.                                                                                 │
  │

情報の出典
[1] http://oshiete.goo.ne.jp/qa/540644.html
[2] http://www.dd-wrt.com/phpBB2/viewtopic.php?p=343063
[3] http://www.linuxquestions.org/questions/suse-opensuse-60/not-able-to-find-proc-pci-379372/
[4] https://ja.wikipedia.org/wiki/SUSE