ハードウェアの基本知識と設定

May 08, 2018

はじめに

急に実績が必要になったので、とりあえず LPIC を受けてみようかと思いました。
Level 1 は割と基本的なことを重点的に聞かれるみたいですが、とりあえず勉強ノートとしてここに色々書いていこうと思います。

基本的なシステムハードウェア

とりあえず以下が何かを軽く説明できれば良いっぽい。

  • CPU
  • メモリ
  • ハードディスク
  • 入力装置
  • 拡張カード (NIC, SCSI, RAID 等)
  • USB 機器

BIOS/UEFI

  • BIOS (Basic Input Output System) -
    マザーボードや拡張カードに搭載されたフラッシュ ROM に書き込まれているデバイス制御のプログラム。
    以下のような役割がある。
  • OS の起動に必要なプログラムをディスクから読み込んで実行する
  • デバイス動作の設定
  • 入出力制御
  • UEFI (Unified Extensible Firmware Interface) -
    BIOS の後継にあたり、以下のような拡張が行われている。
  • 一部 OS における起動ドライブの容量制限 (2TB) を撤廃
  • GUI ベースのセットアップ画面が利用可能

BIOS/UEFI セットアップで設定できる項目はシステム BIOS/UEFI により異なるものの、多くの場合以下の設定が可能。

  • 日付/時刻 (Hardware Clock)
  • ディスクドライブ/各種デバイスのパラメータ
  • キーボードの使用/不使用
  • 電源管理
  • 起動ドライブの順序
  • デバイス IRQ の割り当て
  • 各種デバイスの使用/不使用

デバイス情報の確認

Linux はハードウェアのアクセスを抽象化するデバイスファイルを持つ。すべてのハードウェアはデバイスファイルとして表され、デバイスファイルの読み書きを通してハードウェアにアクセスすることが可能となっている。
デバイスファイルは /dev 以下に格納され、これらのデバイスファイルは udev により自動生成される。

$ ls /dev/  
autofs           cuse   log               network_throughput  root      stdin   tty13  tty20  tty28  tty35  tty42  tty5   tty57  tty7   urandom  vcsa   vga_arbiter  
block            disk   loop-control      null                sda       stdout  tty14  tty21  tty29  tty36  tty43  tty50  tty58  tty8   vcs      vcsa1  xen  
btrfs-control    fd     mapper            port                sda1      tty     tty15  tty22  tty3   tty37  tty44  tty51  tty59  tty9   vcs1     vcsa2  xvda  
char             full   mcelog            ppp                 sdf       tty0    tty16  tty23  tty30  tty38  tty45  tty52  tty6   ttyS0  vcs2     vcsa3  xvda1  
console          fuse   mem               psaux               sdh       tty1    tty17  tty24  tty31  tty39  tty46  tty53  tty60  ttyS1  vcs3     vcsa4  xvdf  
core             hpet   memory_bandwidth  ptmx                shm       tty10   tty18  tty25  tty32  tty4   tty47  tty54  tty61  ttyS2  vcs4     vcsa5  xvdh  
cpu              input  net               pts                 snapshot  tty11   tty19  tty26  tty33  tty40  tty48  tty55  tty62  ttyS3  vcs5     vcsa6  zero  
cpu_dma_latency  kmsg   network_latency   random              stderr    tty12   tty2   tty27  tty34  tty41  tty49  tty56  tty63  uhid   vcs6     vfio  

Linux カーネルが認識するデバイスに関する情報は /proc 以下のファイルで確認が可能。

ファイル名 説明
/proc/cpuinfo CPU 情報
/proc/interrupts IRQ 情報
/proc/ioports I/O アドレス情報
/proc/meminfo メモリ情報
/proc/bus/usb/* USB デバイス情報
/proc/bus/pci/* PCI デバイス情報
$ cat /proc/cpuinfo   
processor	: 0  
vendor_id	: GenuineIntel  
cpu family	: 6  
model		: 63  
model name	: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz  
stepping	: 2  
microcode	: 0x3b  
cpu MHz		: 2394.707  
cache size	: 30720 KB  
  
...  
  

また、PCI デバイスの情報を表示するには、lspci コマンドが利用可能。-v や -vv で詳細な情報を表示できる。

$ lspci  
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)  
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]  
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]  
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 01)  
00:02.0 VGA compatible controller: Cirrus Logic GD 5446  
00:03.0 Unassigned class [ff80]: XenSource, Inc. Xen Platform Device (rev 01)  
$ lspci -vv  
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)  
	Subsystem: Red Hat, Inc Qemu virtual machine  
	Physical Slot: 0  
	Control: I/O- Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-  
	Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-  
	Latency: 0  
  
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]  
	Subsystem: Red Hat, Inc Qemu virtual machine  
	Physical Slot: 1  
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-  
	Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-  
	Latency: 0  

USB デバイス

USB (Universal Serial Bus) は周辺機器を接続するために広く普及している規格であり、以下の特徴をもつ。

  • 最大 127 台までデバイスを接続可能
  • 様々なデバイスを同一コネクタで接続可能
  • ホットプラグをサポート
  • プラグ&プレイをサポート
  • USB ポートから USB デバイスに電源を供給可能

USB のバージョン及び、最大データ転送速度は以下。

バージョン 最大データ転送速度
USB 1.0 12 Mbps
USB 1.1 12 Mbps
USB 2.0 480 Mbps
USB 3.0 5 Gbps
USB 3.1 10 Gbps

USB デバイスのドライバは、デバイス固有のものの他に、Linux システムにデフォルトで搭載されている汎用のドライバ (クラスドライバ) がある。
デバイスクラスの使用に沿った USB 製品はクラスドライバで対応可能であるため、専用のドライバをインストールする必要はない。
主なデバイスクラスは以下。

デバイスクラス サポートする USB デバイス
HID (Human Interface Devices) キーボード、マウス
USB マスストレージデバイス USB メモリ、HDD
オーディオ マイク、スピーカー
プリンタ プリンタ
ワイヤレスコントローラ Wi-Fi アダプタ、Bluetooth アダプタ

USB デバイスの情報を表示するには lsusb コマンドを使えば良い。
-v で詳細表示、-t でツリー表示が可能。

$ lsusb  
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub  
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
Bus 001 Device 004: ID 413c:8505 Dell Computer Corp.   
Bus 001 Device 024: ID 0789:0193 Logitec Corp.   
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  

udev

/dev 以下のデバイスファイルは udev (Userspace DEVice management) により自動生成される。従来の Linux では使用する* しないに関わらず、多数のデバイスファイルをあらかじめ /dev ファイルに作成する必要があった。また、カーネルがデバイスを認識していたとしても、デバイスファイルが存在しない限りはアプリケーションがデバイスを利用することはできなかった。

udev の仕組みでは、デバイスが接続されると、カーネルがそれを検知し、/sys にデバイス情報を作成する。
udevd がそのデバイス情報を参照し、/dev 以下にデバイスファイルを作成することとなる。その際に /etc/udev/rule.d 以下の設定ファイルが使用される。
設定ファイルを編集することにより、例えばある USB メモリを /dev/usbmemory とする、といった特定のハードウェアを任意の名前のデバイスファイルとして扱えるようにもできる。

デバイス情報は、D-Bus (Desktop Bus) と呼ばれる、アプリケーション感でやりとりを行うための機構によってアプリケーションに伝えられ、アプリケーションからデバイスを利用できるようになる。

デバイスドライバのロード

デバイスドライバとはデバイスを利用するために必要な制御プログラムのことである。Linux ではデバイスドライバはカーネルの一部 (モジュール) として提供されており、必要なデバイスドライバをカーネルに取り込むことを「ロードする」という。
ロードされているカーネルモジュールを確認するには lsmod コマンドを用いる。

$ lsmod  
Module                  Size  Used by  
rpcsec_gss_krb5        27855  0   
auth_rpcgss            51944  1 rpcsec_gss_krb5  
nfsv4                 545081  3   
dns_resolver            5446  1 nfsv4  
nfs                   243318  2 nfsv4  
lockd                  81043  1 nfs  
grace                   2891  1 lockd  
sunrpc                332914  10 auth_rpcgss,rpcsec_gss_krb5,nfsv4,lockd,nfs  
fscache                47284  2 nfsv4,nfs  
xfs                  1174127  0   
libcrc32c               1516  1 xfs  
  
...  
  

通常、必要なデバイスドライバは自動的にロードされるが、手動でロードする場合は modprobe コマンドを利用する。
例えば以下の例では、NIC ドライバの e1000 をロードしている。

$ sudo modprobe e1000  
$ lsmod | grep e1000  
e1000                 131362  0  

 © 2023, Dealing with Ambiguity