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として読み込んでいると考えて良いのか。