tom__bo’s Blog

情報系学生が筋トレしたり、筋トレしたり筋トレしたことを書くブログ。もはやダイアリー

ハードウェア・モジュール関連コマンド

Thinkpad-X260上でハードウェアやカーネルモジュールの設定確認をしたメモ。 Ubuntu 16.04を使っているけど、外部ディスプレイにつなぐとフリーズしてしまったり、まだまだわかってないことが多い。 kernel 4.6も出たのでアップグレードせねば。 あとはできるだけmanを直接読む習慣をつけたいけど、manにはたいてい実行例がないので、その辺もまとめたい。

lspci

PCIデバイスを一覧するコマンド 各カラムは順に"PCI識別番号, デバイスの種類, ベンダー名, デバイス名"となっている

# lspci
00:00.0 Host bridge: Intel Corporation Sky Lake Host Bridge/DRAM Registers (rev 08)
00:02.0 VGA compatible controller: Intel Corporation Sky Lake Integrated Graphics (rev 07)
00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)
00:14.2 Signal processing controller: Intel Corporation Sunrise Point-LP Thermal subsystem (rev 21)
00:16.0 Communication controller: Intel Corporation Sunrise Point-LP CSME HECI (rev 21)
00:17.0 SATA controller: Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] (rev 21)
00:1c.0 PCI bridge: Intel Corporation Device 9d10 (rev f1)
00:1c.2 PCI bridge: Intel Corporation Device 9d12 (rev f1)
00:1f.0 ISA bridge: Intel Corporation Sunrise Point-LP LPC Controller (rev 21)
00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC (rev 21)
00:1f.3 Audio device: Intel Corporation Sunrise Point-LP HD Audio (rev 21)
00:1f.4 SMBus: Intel Corporation Sunrise Point-LP SMBus (rev 21)
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection I219-V (rev 21)
02:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS522A PCI Express Card Reader (rev 01)
04:00.0 Network controller: Intel Corporation Wireless 8260 (rev 3a)

-vや-vvをつけたることで詳細な情報を取得できる。 かなり詳細な出力ができるので、同時にgrepすればデバイスが使用しているdriver,moduleが確認できる

# lspci -v | grep -e Kernel -e '^0'
00:00.0 Host bridge: Intel Corporation Sky Lake Host Bridge/DRAM Registers (rev 08)
00:02.0 VGA compatible controller: Intel Corporation Sky Lake Integrated Graphics (rev 07) (prog-if 00 [VGA controller])
    Kernel driver in use: i915_bpo
    Kernel modules: i915_bpo
00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21) (prog-if 30 [XHCI])
    Kernel driver in use: xhci_hcd
00:14.2 Signal processing controller: Intel Corporation Sunrise Point-LP Thermal subsystem (rev 21)
00:16.0 Communication controller: Intel Corporation Sunrise Point-LP CSME HECI (rev 21)
    Kernel driver in use: mei_me
    Kernel modules: mei_me
00:17.0 SATA controller: Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] (rev 21) (prog-if 01 [AHCI 1.0])
    Kernel driver in use: ahci
    Kernel modules: ahci
00:1c.0 PCI bridge: Intel Corporation Device 9d10 (rev f1) (prog-if 00 [Normal decode])
    Kernel driver in use: pcieport
    Kernel modules: shpchp
00:1c.2 PCI bridge: Intel Corporation Device 9d12 (rev f1) (prog-if 00 [Normal decode])
    Kernel driver in use: pcieport
    Kernel modules: shpchp
00:1f.0 ISA bridge: Intel Corporation Sunrise Point-LP LPC Controller (rev 21)
00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC (rev 21)
00:1f.3 Audio device: Intel Corporation Sunrise Point-LP HD Audio (rev 21)
    Kernel driver in use: snd_hda_intel
    Kernel modules: snd_hda_intel, snd_soc_skl
00:1f.4 SMBus: Intel Corporation Sunrise Point-LP SMBus (rev 21)
    Kernel modules: i2c_i801
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection I219-V (rev 21)
    Kernel driver in use: e1000e
    Kernel modules: e1000e
02:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS522A PCI Express Card Reader (rev 01)
    Kernel driver in use: rtsx_pci
    Kernel modules: rtsx_pci
04:00.0 Network controller: Intel Corporation Wireless 8260 (rev 3a)
    Kernel driver in use: iwlwifi
    Kernel modules: iwlwifi

lshw

ハードウェアの設定を表示するコマンド /proc, /dev, /sys以下に直接見に行くこともできるが、散らばっているので、lshw使うと便利。

長いので、-shortオプションをつけて表示した例

# lshw -short
H/W path        Device     Class          Description
=====================================================
                           system         Computer
/0                         bus            Motherboard
/0/0                       memory         15GiB System memory
/0/1                       processor      Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz
/0/100                     bridge         Sky Lake Host Bridge/DRAM Registers
/0/100/2                   display        Sky Lake Integrated Graphics
/0/100/14                  bus            Intel Corporation
/0/100/14/0     usb2       bus            xHCI Host Controller
/0/100/14/1     usb1       bus            xHCI Host Controller
/0/100/14/1/7              communication  Bluetooth wireless interface
/0/100/14/1/9              generic        Fingerprint Reader
/0/100/14.2                generic        Intel Corporation
/0/100/16                  communication  Intel Corporation
/0/100/17                  storage        Intel Corporation
/0/100/1c                  bridge         Intel Corporation
/0/100/1c/0                generic        Realtek Semiconductor Co., Ltd.
/0/100/1c.2                bridge         Intel Corporation
/0/100/1c.2/0   wlp4s0     network        Wireless 8260
/0/100/1f                  bridge         Intel Corporation
/0/100/1f.2                memory         Memory controller
/0/100/1f.3                multimedia     Intel Corporation
/0/100/1f.4                bus            Intel Corporation
/0/100/1f.6     enp0s31f6  network        Ethernet Connection I219-V
/0/2            scsi1      storage
/0/2/0.0.0      /dev/sda   disk           192GB SAMSUNG MZ7LF192
/0/2/0.0.0/1    /dev/sda1  volume         163GiB EXT4 volume
/0/2/0.0.0/2    /dev/sda2  volume         15GiB Extended partition
/0/2/0.0.0/2/5  /dev/sda5  volume         15GiB Linux swap / Solaris partition

クラスを指定して絞り込むこともできる。

# lshw -C storage
  *-storage
       description: SATA controller
       product: Intel Corporation
       vendor: Intel Corporation
       physical id: 17
       bus info: pci@0000:00:17.0
       version: 21
       width: 32 bits
       clock: 66MHz
       capabilities: storage msi pm ahci_1.0 bus_master cap_list
       configuration: driver=ahci latency=0
       resources: irq:121 memory:f1248000-f1249fff memory:f124e000-f124e0ff ioport:e080(size=8) ioport:e088(size=4) ioport:e060(size=32) memory:f124c000-f124c7ff
  *-scsi
       physical id: 2
       logical name: scsi1
       capabilities: emulated

lsscsi

デフォルトでは入っていなかったがlsscsiコマンドでlsscsiも確認できる。 lshwを使えば良さそうなので、調べていないが、バスやインターフェースごとにls~コマンドがありそう。lsusbはある。

# apt-get install lsscsi
# lsscsi
[1:0:0:0]    disk    ATA      SAMSUNG MZ7LF192 3L1Q  /dev/sda

lsmod

lsmodは/proc/modulesの内容をうまくフォーマットし、現在カーネルにloadされているモジュールを表示してくれる。 カラムは、モジュール名、サイズ、サンショウカイスウ、依存元を表している。 

# lsmod
Module                  Size  Used by
btrfs                 987136  0
xor                    24576  1 btrfs
raid6_pq              102400  1 btrfs
ufs                    73728  0
qnx4                   16384  0
hfsplus               106496  0
hfs                    57344  0
minix                  36864  0
ntfs                   98304  0
msdos                  20480  0
jfs                   180224  0
xfs                   966656  0
libcrc32c              16384  1 xfs
...
...

depmod

モジュールんお依存関係の情報を更新する。 カーネルモジュールがmodules.depより新しいか確認し、新しければ更新。

試しにlsmodをつかってused byである4カラム目のモジュールを見てみると

# lsmod | grep nf_nat_ftp
nf_nat_ftp             16384  0
nf_nat                 24576  1 nf_nat_ftp
nf_conntrack_ftp       20480  1 nf_nat_ftp
nf_conntrack          106496  8 nf_nat_ftp,nf_conntrack_netbios_ns,nf_nat,xt_conntrack,nf_conntrack_broadcast,nf_conntrack_ftp,nf_conntrack_ipv4,nf_conntrack_ipv6


# depmod --dry-run | grep nf_nat_ftp
kernel/net/netfilter/nf_nat_ftp.ko: kernel/net/netfilter/nf_conntrack_ftp.ko kernel/net/netfilter/nf_nat.ko kernel/net/netfilter/nf_conntrack.ko
alias ip_nat_ftp nf_nat_ftp
alias symbol:nf_nat_ftp_hook nf_conntrack_ftp

という感じで、nf_nat_ftpに依存しているモジュールが確認できる。

hdparm

ハードデイスクのパラメータを調整するコマンド。

# hdparm /dev/sda1

/dev/sda1:
 multcount     = 16 (on)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 23348/255/63, sectors = 342700032, start = 2048

using_dmaの項目がないのはDMAの機能がないということなのだろうか? と思っていたら-Iオプションで更に詳細に見れた。DMAの種類がいくつか表示されているので、ひとまずDMAはありそう。

# hdparm -I /dev/sda1
/dev/sda1:

ATA device, with non-removable media
        Model Number:       SAMSUNG MZ7LF192HCGS-000L1
        Serial Number:      S28ZNXAG815690
        Firmware Revision:  FXT03L1Q
        Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
        Used: unknown (minor revision code 0x0039)
        Supported: 9 8 7 6 5
        Likely used: 9
Configuration:
        Logical         max     current
        cylinders       16383   16383
        heads           16      16
        sectors/track   63      63
        --
        CHS current addressable sectors:   16514064
        LBA    user addressable sectors:  268435455
        LBA48  user addressable sectors:  375093936
        Logical  Sector size:                   512 bytes
        Physical Sector size:                   512 bytes
        Logical Sector-0 offset:                  0 bytes
        device size with M = 1024*1024:      183151 MBytes
        device size with M = 1000*1000:      192048 MBytes (192 GB)
        cache/buffer size  = unknown
        Nominal Media Rotation Rate: Solid State Device
Capabilities:
        LBA, IORDY(can be disabled)
        Queue depth: 32
        Standby timer values: spec'd by Standard, no device specific minimum
        R/W multiple sector transfer: Max = 16  Current = 16
        DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
             Cycle time: min=120ns recommended=120ns
        PIO: pio0 pio1 pio2 pio3 pio4
             Cycle time: no flow control=120ns  IORDY flow control=120ns

-tオプションでデバイス名を指定することで読み込み速度をテストできる。

# hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads: 1474 MB in  3.00 seconds = 491.29 MB/sec

modinfo

モジュールの情報を表示する。 説明・著者・ライセンス・依存関係・パラメータ・ファイル名等など

# modinfo -p iwlwifi
swcrypto:using crypto in software (default 0 [hardware]) (int)
11n_disable:disable 11n functionality, bitmap: 1: full, 2: disable agg TX, 4: disable agg RX, 8 enable agg TX (uint)
amsdu_size_8K:enable 8K amsdu size (default 0) (int)
fw_restart:restart firmware in case of error (default true) (bool)
antenna_coupling:specify antenna coupling in dB (default: 0 dB) (int)
nvm_file:NVM file name (charp)
d0i3_disable:disable d0i3 functionality (default: Y) (bool)
lar_disable:disable LAR functionality (default: N) (bool)
uapsd_disable:disable U-APSD functionality (default: Y) (bool)
bt_coex_active:enable wifi/bt co-exist (default: enable) (bool)
led_mode:0=system default, 1=On(RF On)/Off(RF Off), 2=blinking, 3=Off (default: 0) (int)
power_save:enable WiFi power management (default: disable) (bool)
power_level:default power save level (range from 1 - 5, default: 1) (int)
fw_monitor:firmware monitor - to debug FW (default: false - needs lots of memory) (bool)

modprobe

モジュールの情報を表示したり、ロード・アンロードする ロード・アンロードする場合はモジュールの依存関係を考慮してくれるので、insmod, rmmodを使うよりこちらを使ったほうが安全。

## 依存関係の表示
# modprobe --show-depends iwlwifi
insmod /lib/modules/4.4.0-21-generic/kernel/net/wireless/cfg80211.ko
insmod /lib/modules/4.4.0-21-generic/kernel/drivers/net/wireless/iwlwifi/iwlwifi.ko

## モジュールのアンロード
# modprobe -r iwlwifi
# lsmod | grep iwlwifi

## モジュールのロード
# modprobe iwlwifi
# lsmod | grep iwlwifi
iwlwifi               200704  1 iwlmvm
cfg80211              565248  3 iwlwifi,mac80211,iwlmvm

疑問

lspci -vをgrepしているところでKernel driverの表示があってmoduleにないものはカーネル内部に組み込まれていて、 両方が表示されるものはmoduleとして読み込んでいると考えて良いのか。

参考