見出し画像

LinuC 挑戦日記 ~ 1.05.1_ハードウェアの基礎知識と設定 ~

この記事は、101試験(Version 10.0)出題範囲の主題 ハードウェア、ディスク、パーティション、ファイルシステム の副題 1.05.1 ハードウェアの基礎知識と設定 の内容を学習しまとめた内容です。
重要度は低くはないので試験に挑むためにもきっちり押さえる必要があります。

重要度 : 3
概要 : 基本的なシステムハードウェアの理解および構成や情報の取得ができる。

▽ 重要な用語と概念

◆コンピュータの5大装置
以下の記事が大変参考になりました。

コンピュータを構成する上で欠かせない、「入力」、「出力」、「制御」、「演算」、「記憶」の機能を総称して、コンピュータの5大装置と呼びます。
コンピュータの5大装置とCPUについて

◆基本的なシステムハードウェア
  ✅CPU
       5大装置における制御装置と演算装置、
       以下の記事が大変参考になりました。

  ✅メモリ【 memory 】
       5大装置における(主)記憶装置
       以下の記事が大変参考になりました。

  ✅ストレージ【 storage 】 
       5大装置における(補助)記憶装置
       以下の記事が大変参考になりました。

## 内蔵/外付ストレージの接続規格
+----------------------------+----------------------------------------+
| 規格                        | 説明                                    |
+----------------------------+----------------------------------------+
| SATA (Serial ATA)          | 現在主流、PCで標準的に搭載                  |
| SAS (Serial Attached SCSI) | SATAよりも高速で信頼性も高い、主にサーバー用途  |
| SCSI                       | 現在はあまり使われない、主にサーバー用途       |
| USB                        | 後述                                    |
+----------------------------+----------------------------------------+

  ✅入力装置
       5大装置における入力装置
       - キーボード
       - マウス

  ✅拡張カード
       - マザーボードの拡張スロットに装着
       - NIC、SCSIカード、ビデオカード、RAIDカードなど
       - USBデバイスと違い、コールドプラグ

◆ BIOS / UEFI
  ✅以前の記事でさわりだけ紹介

  ✅ BIOS【 Basic Input/Output System 】

- キーボードやハードディスクなどのデバイスを制御するもっとも基本的な制御プログラム
- マザーボードや拡張カードに搭載されたフラッシュROMに書き込まれている

  ✅ UEFI【 Unified Extensible Firmware Interface 】

- BIOS の後継ファームウェア規格
- ファームウェアの総称としてBIOSと呼ばれることも多い

◆デバイスファイル【 device file 】
  ✅ハードウェアのアクセスを抽象化したファイル
  ✅このファイルを読み書きすることでハードウェアにアクセス可能
  ✅ /dev 以下に存在
  ✅ udev (という仕組み)により自動的に作成される

$ ls -l /dev
total 0 
crw--w---- 1 root tty  136, 0 Aug 22 04:57 console 
lrwxrwxrwx 1 root root     11 Aug 22 04:57 core -> /proc/kcore 
lrwxrwxrwx 1 root root     13 Aug 22 04:57 fd -> /proc/self/fd 
crw-rw-rw- 1 root root   1, 7 Aug 22 04:57 full 
drwxrwxrwt 2 root root     40 Aug 22 04:57 mqueue 
crw-rw-rw- 1 root root   1, 3 Aug 22 04:57 null 
lrwxrwxrwx 1 root root      8 Aug 22 04:57 ptmx -> pts/ptmx 
drwxr-xr-x 2 root root      0 Aug 22 04:57 pts 
crw-rw-rw- 1 root root   1, 8 Aug 22 04:57 random 
drwxrwxrwt 2 root root     40 Aug 22 04:57 shm 
lrwxrwxrwx 1 root root     15 Aug 22 04:57 stderr -> /proc/self/fd/2 
lrwxrwxrwx 1 root root     15 Aug 22 04:57 stdin -> /proc/self/fd/0 
lrwxrwxrwx 1 root root     15 Aug 22 04:57 stdout -> /proc/self/fd/1 
crw-rw-rw- 1 root root   5, 0 Aug 22 04:57 tty 
crw-rw-rw- 1 root root   1, 9 Aug 22 04:57 urandom 
crw-rw-rw- 1 root root   1, 5 Aug 22 04:57 zero 

  ✅ファイルの種類が特殊

ls -lコマンドで出力すると、行頭のファイルの種類がbあるいはcで表されます。それぞれブロックデバイス、キャラクタデバイスに対応します。

◆ /proc ディレクトリ
  ✅ Linux カーネルが認識しているデバイスに関する情報の一部は、/proc 以下のファイルで確認可能
  ✅ /proc 以下のファイルは、ファイルとして実体のない仮想的なファイル
  ✅ 一部のファイルは、テキストファイルとして閲覧コマンドで確認可能

$ ls -l /proc
total 0 
dr-xr-xr-x  9 root root     0 Aug 22 04:57 1 
dr-xr-xr-x  9 root root     0 Aug 22 12:55 16 
dr-xr-xr-x  9 root root     0 Aug 24 12:28 52 
dr-xr-xr-x  9 root root     0 Aug 24 12:34 62 
dr-xr-xr-x  9 root root     0 Aug 24 14:44 74 
drwxrwxrwt  2 root root    40 Aug 22 04:57 acpi 
-r--r--r--  1 root root     0 Aug 24 14:44 buddyinfo 
dr-xr-xr-x  4 root root     0 Aug 22 04:57 bus 
-r--r--r--  1 root root     0 Aug 24 14:44 cgroups 
-r--r--r--  1 root root     0 Aug 24 14:44 cmdline 
-r--r--r--  1 root root 25920 Aug 24 14:44 config.gz 
-r--r--r--  1 root root     0 Aug 24 14:44 consoles 
-r--r--r--  1 root root     0 Aug 22 04:59 cpuinfo 
-r--r--r--  1 root root     0 Aug 24 14:44 crypto 
-r--r--r--  1 root root     0 Aug 24 14:44 devices 
-r--r--r--  1 root root     0 Aug 24 14:44 diskstats 
-r--r--r--  1 root root     0 Aug 24 14:44 dma 
dr-xr-xr-x  2 root root     0 Aug 24 14:44 driver 
-r--r--r--  1 root root     0 Aug 24 14:44 execdomains 
-r--r--r--  1 root root     0 Aug 24 14:44 fb 
-r--r--r--  1 root root     0 Aug 22 04:59 filesystems 
dr-xr-xr-x  8 root root     0 Aug 22 0

$ ls -l /proc | grep info 
-r--r--r--  1 root root     0 Aug 24 14:44 buddyinfo
-r--r--r--  1 root root     0 Aug 22 04:59 cpuinfo ## CPU情報
-r--r--r--  1 root root     0 Aug 24 14:44 meminfo ## メモリ情報
-r--r--r--  1 root root     0 Aug 24 14:44 pagetypeinfo
-rw-------  1 root root     0 Aug 24 14:44 slabinfo
-r--------  1 root root     0 Aug 24 14:44 vmallocinfo
-r--r--r--  1 root root     0 Aug 24 14:44 zoneinfo

$ ls -l /proc | grep swaps 
-r--r--r--  1 root root     0 Aug 24 14:44 swaps ## スワップ領域情報

$ ls -l /proc | grep ioports 
-r--r--r--  1 root root     0 Aug 24 14:44 ioports ## I/Oアドレス情報

$ ls -l /proc | grep interrupts 
-r--r--r--  1 root root     0 Aug 24 14:44 interrupts ## IRQ (interrupt Request)情報

$ ls -lF /proc/bus
total 0 
dr-xr-xr-x 2 root root 0 Aug 25 00:30 input/ 
dr-xr-xr-x 2 root root 0 Aug 25 00:30 pci/ ## PCIデバイス情報
※もしUSBデバイスが接続されていれば /usb も存在

$ cat /proc/cpuinfo 
processor       : 0 
vendor_id       : GenuineIntel 
cpu family      : 6 
model           : 85 
model name      : Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz 
・・・

◆ /sys ディレクトリ
  ✅ /proc 以下のファイル同様、ファイルとして実体のない仮想的なファイルが格納される
  ✅ /sys 以下のファイルは、テキストファイルとしてシステム情報にアクセス可能
  ✅ドライバ関連のプロセス情報群
  ✅ /proc が膨大になるのを防ぐために使われる

$ ls -l /sys
total 0 
drwxr-xr-x   2 root root  0 Aug 18 15:21 block 
drwxr-xr-x  25 root root  0 Aug 18 15:21 bus 
drwxr-xr-x  47 root root  0 Aug 18 15:21 class 
drwxr-xr-x   4 root root  0 Aug 18 15:21 dev 
drwxr-xr-x  14 root root  0 Aug 18 15:21 devices 
drwxrwxrwt   2 root root 40 Aug 22 04:57 firmware 
drwxr-xr-x   9 root root  0 Aug 18 15:21 fs 
drwxr-xr-x   2 root root  0 Aug 18 15:21 hypervisor 
drwxr-xr-x  10 root root  0 Aug 18 15:21 kernel 
drwxr-xr-x 139 root root  0 Aug 18 15:21 module 
drwxr-xr-x   2 root root  0 Aug 18 15:21 power 

◆ udev【 userspace device management 】
デバイス(ハードウェア)が接続されると、カーネルがそれを検知し、自動的にデバイス情報を作成
  └─> /sys 以下に作成
以下の記事が大変参考になりました。

udevはデバイスファイルを動的に作成、削除する仕組みです。
以下にデバイスファイルを作成するまでの流れを示します。
(1) カーネルがデバイスの追加、削除を検知
(2) /sys配下にデバイスの情報を反映
(3) udevdにイベント通知(Netlinkでイベント通知)
(4) udevdは、/sys配下の情報とudevルールを参照
(5) (4)の結果にもとづいて、デバイスファイルを作成

◆(デバイス)ドライバ【 (device) driver) 】
  ✅カーネルの一部(カーネルモジュール)として提供される
  ✅必要なデバイスドライブをカーネルに組み込む
       = ロードする

◆クラスドライバ
Linuxに標準で搭載される汎用のドライバ

◆ USB【 Universal Serial Bus 】

✅周辺機器を接続するために広く普及している規格
✅ホットプラグ
     └─> 電源を入れたままの状態で、接続、取り外し可能
✅USBポートからUSBデバイスに電源供給可能
✅いくつかのバージョンがあり、最大データ転送速度などが異なる
✅参考 : USBの規格の違いについて(USB3.0USB2.0USB1.1

◆デバイスクラス
以下の記事が大変参考になりました。

USB通信を実現するためには、ホストSW(ドライバ)とデバイスSW(ファームウェア)が必要です。ただし特定機能に関しては、ホストSWを開発する必要がありません。この特定機能をデバイスクラスと呼びます。デバイスSWがデバイスクラスに対応すると、ホスト(パソコン等)に標準でインストールされているドライバが呼び出され、動作します。

▽ 重要なコマンド

◆ lspci コマンド
PCI デバイスの情報を確認 

$ lspci 
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01) 
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01) 
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08) 
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) 
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08) 
00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10) 
00:0f.0 VGA compatible controller: VMware SVGA II Adapter 
00:11.0 PCI bridge: VMware PCI bridge (rev 02) 
00:15.0 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:15.1 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:15.2 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:15.3 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:15.4 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:15.5 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:15.6 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:15.7 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:16.0 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:16.1 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:16.2 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:16.3 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:16.4 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:16.5 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:16.6 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:16.7 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:17.0 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:17.1 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:17.2 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:17.3 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:17.4 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:17.5 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:17.6 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:17.7 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:18.0 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:18.1 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:18.2 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:18.3 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:18.4 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:18.5 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:18.6 PCI bridge: VMware PCI Express Root Port (rev 01) 
00:18.7 PCI bridge: VMware PCI Express Root Port (rev 01) 
02:01.0 SATA controller: VMware SATA AHCI controller 
03:00.0 Serial Attached SCSI controller: VMware PVSCSI SCSI Controller (rev 02) 
0b:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01) 
13:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01) 
1b:00.0 USB controller: VMware USB3 xHCI 1.0 Controller 

$ lspci -v
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01) 
       Subsystem: VMware Virtual Machine Chipset 
       Flags: bus master, medium devsel, latency 0 
       Kernel driver in use: agpgart-intel 
・・・

$ lspci -vv
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01) 
       Subsystem: VMware Virtual Machine Chipset 
       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 
       Kernel driver in use: agpgart-intel
・・・ 

◆ lsmod コマンド
  ✅ロードされているカーネルモジュールを確認
  ✅ /proc/modules の情報を出力

$ lsmod 
Module                  Size  Used by 
xt_nat                 12681  1 
nf_conntrack_netlink    36354  0 
xt_addrtype            12676  2 
xt_CHECKSUM            12549  1 
ipt_MASQUERADE         12678  5 
nf_nat_masquerade_ipv4    13463  1 ipt_MASQUERADE 
ip6t_rpfilter          12595  1 
ip6t_REJECT            12625  2 
nf_reject_ipv6         13717  1 ip6t_REJECT 
ipt_REJECT             12541  4 
nf_reject_ipv4         13373  1 ipt_REJECT 
xt_conntrack           12760  15 
ebtable_nat            12807  1 
ebtable_broute         12731  1 
ip6table_nat           12864  1 
nf_conntrack_ipv6      18935  8 
nf_defrag_ipv6         35104  1 nf_conntrack_ipv6 
nf_nat_ipv6            14131  1 ip6table_nat 
ip6table_mangle        12700  1 
ip6table_security      12710  1 
ip6table_raw           12683  1 
iptable_nat            12875  1 
nf_conntrack_ipv4      15053  9 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4 
nf_nat_ipv4            14115  1 iptable_nat 
nf_nat                 26583  4 nf_nat_ipv4,nf_nat_ipv6,xt_nat,nf_nat_masquerade_ipv4 
iptable_mangle         12695  1 
iptable_security       12705  1 
iptable_raw            12678  1 
nf_conntrack          139224  8 nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4,nf_conntrack_ipv6 
ebtable_filter         12827  1 
ebtables               35009  3 ebtable_broute,ebtable_nat,ebtable_filter 
ip6table_filter        12815  1 
ip6_tables             26912  5 ip6table_filter,ip6table_mangle,ip6table_security,ip6table_nat,ip6table_raw 
iptable_filter         12810  1 
ip_tables              27126  5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw 
veth                   13458  0 
tun                    32026  1 
devlink                60067  0 
br_netfilter           22256  0 
nfs                   261876  0 
lockd                  98048  1 nfs 
grace                  13515  1 lockd 
fscache                64980  1 nfs 
overlay                91659  2 
bridge                151336  2 br_netfilter,ebtable_broute 
stp                    12976  1 bridge 
llc                    14552  2 stp,bridge 
ip_set                 45799  0 
nfnetlink              14519  3 ip_set,nf_conntrack_netlink 
vmw_vsock_vmci_transport    30577  1 
vsock                  36526  2 vmw_vsock_vmci_transport 
sunrpc                354099  3 nfs,lockd 
iosf_mbi               15582  0 
crc32_pclmul           13133  0 
ghash_clmulni_intel    13273  0 
ppdev                  17671  0 
aesni_intel           189456  0 
lrw                    13286  1 aesni_intel 
gf128mul               15139  1 lrw 
vmw_balloon            18094  0 
glue_helper            13990  1 aesni_intel 
ablk_helper            13597  1 aesni_intel 
cryptd                 21190  3 ghash_clmulni_intel,aesni_intel,ablk_helper 
pcspkr                 12718  0 
joydev                 17389  0 
sg                     40719  0 
vmw_vmci               67168  1 vmw_vsock_vmci_transport 
parport_pc             28205  0 
parport                46395  2 ppdev,parport_pc 
i2c_piix4              22401  0 
xfs                   993020  2 
libcrc32c              12644  3 xfs,nf_nat,nf_conntrack 
sr_mod                 22416  0 
cdrom                  42556  1 sr_mod 
vmwgfx                291993  3 
ata_generic            12923  0 
pata_acpi              13053  0 
drm_kms_helper        186531  1 vmwgfx 
syscopyarea            12529  1 drm_kms_helper 
sysfillrect            12701  1 drm_kms_helper 
sysimgblt              12640  1 drm_kms_helper 
fb_sys_fops            12703  1 drm_kms_helper 
sd_mod                 46281  3 
crc_t10dif             12912  1 sd_mod 
crct10dif_generic      12647  0 
ttm                    96673  1 vmwgfx 
ahci                   34056  0 
drm                   456166  6 ttm,drm_kms_helper,vmwgfx 
nfit                   55479  0 
ata_piix               35052  0 
libahci                31992  1 ahci 
libnvdimm             155545  1 nfit 
crct10dif_pclmul       14307  1 
crct10dif_common       12595  3 crct10dif_pclmul,crct10dif_generic,crc_t10dif 
libata                243133  5 ahci,pata_acpi,libahci,ata_generic,ata_piix 
crc32c_intel           22094  1 
serio_raw              13434  0 
vmxnet3                58059  0 
vmw_pvscsi             23130  2 
drm_panel_orientation_quirks    17180  1 drm 
dm_mirror              22289  0 
dm_region_hash         20813  1 dm_mirror 
dm_log                 18411  2 dm_region_hash,dm_mirror 
dm_mod                124501  8 dm_log,dm_mirror

$ lsmod | grep cdrom 
cdrom                  42556  1 sr_mod 

$ lsmod | grep nfs 
nfs                   261876  0 
lockd                  98048  1 nfs 
fscache                64980  1 nfs 
sunrpc                354099  3 nfs,lockd

$ cat /proc/modules
xt_nat 12681 1 - Live 0xffffffffc0874000 
nf_conntrack_netlink 36354 0 - Live 0xffffffffc0865000 
xt_addrtype 12676 2 - Live 0xffffffffc085b000 
xt_CHECKSUM 12549 1 - Live 0xffffffffc0856000
・・・

◆ modprobe コマンド
✅手動でデバイスドライバをロード(カーネルに組み込む)
✅カーネルモジュール同士の依存関係を自動で解決

$ modprobe usb
modprobe: FATAL: Module usb not found.

◆ lsusb コマンド
USB デバイスの情報を確認

$ lsusb 
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub 
Bus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

-v, --verbose    詳細に表示する
-t, --tree       ツリー状に表示する

もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。