はじめに
急に実績が必要になったので、とりあえず 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