先日、GIGABYTE 製 B450 AORUS PRO WIFI の BIOS を F64e まで更新しました。
更新直後は何も問題ないと思ってたのですが、Linux 環境で lm_sensors を動作させると、期待したものとは異なる結果になりました。
幸い、すぐに対策が見つかったので、今は問題ありません。
※過去記事にもその対策を追記しておきました。
私の環境では、KDE neon 5.27.9, Ubuntu 22.04.3 LTS, openSUSE Tumbleweed で確認しているので、当面は問題ないと判断しました。
....
この件について掘り下げて調査していたところ、「最新の Ubuntu の it87 ドライバなら対応しているのでは?(意訳)」との英文記事が目に付きました。
半信半疑ですが、それが真実ならドライバをビルドしなくて済むので助かります。
タイミングよく Ubuntu 23.10 がリリースされたばかりなので、そのインストールついでに調べてみました。
Ubuntu 23.10 インストール直後に lm_sensors を導入
まずは lm_sensors をインストールして実行してみます。
$ sudo apt install lm-sensors
$ sensors
iwlwifi_1-virtual-0
Adapter: Virtual device
temp1: N/A
acpitz-acpi-0
Adapter: ACPI interface
temp1: +16.8°C (crit = +20.8°C)
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +31.2°C
BIOS が F32 の頃とは結果が異なりますが、it87 ドライバがロードされていない状態での実行結果と同じです。
念の為、環境やドライバの所在について調べてみます。
$ sudo sensors-detect --auto
# sensors-detect version 3.6.0
# System: Gigabyte Technology Co., Ltd. B450 AORUS PRO WIFI [Default string]
# Board: Gigabyte Technology Co., Ltd. B450 AORUS PRO WIFI-CF
# Kernel: 6.5.0-10-generic x86_64
# Processor: AMD Ryzen 5 2600X Six-Core Processor (23/8/2)
Running in automatic mode, default answers to all questions
are assumed.
(...ざっくり省略...)
To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
it87
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!
Do you want to add these lines automatically to /etc/modules? (yes/NO)
Unloading cpuid... OK
$ sudo modprobe -D it87
insmod /lib/modules/6.5.0-10-generic/kernel/drivers/hwmon/hwmon-vid.ko.zst
insmod /lib/modules/6.5.0-10-generic/kernel/drivers/hwmon/it87.ko.zst
既定の it87 ドライバが提供されているので、ロードして確認します。
$ sudo modprobe it87
$ sensors
iwlwifi_1-virtual-0
Adapter: Virtual device
temp1: N/A
acpitz-acpi-0
Adapter: ACPI interface
temp1: +16.8°C (crit = +20.8°C)
it8792-isa-0a60
Adapter: ISA adapter
in0: 916.00 mV (min = +0.00 V, max = +2.78 V)
in1: 1.08 V (min = +0.00 V, max = +2.78 V)
in2: 1.10 V (min = +0.00 V, max = +2.78 V)
+3.3V: 3.36 V (min = +0.00 V, max = +5.56 V)
in4: 1.26 V (min = +0.00 V, max = +2.78 V)
in5: 1.15 V (min = +0.00 V, max = +2.78 V)
in6: 2.78 V (min = +0.00 V, max = +2.78 V) ALARM
3VSB: 3.33 V (min = +0.00 V, max = +5.56 V)
Vbat: 3.25 V
fan1: 0 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
temp1: +29.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp2: +34.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp3: +35.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
intrusion0: ALARM
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +34.4°C
表示される内容が増えましたが、求めている内容ではありません。
IT8686 の情報が欠落し、肝心の CPU コア 6 個分の温度が表示されません。
残念ですが今までと同様に、別途 it87 ドライバを用意する必要があるみたいです。
必要なドライバのソースを取得してビルドする
過去記事と同様にソースを取得して it87 ドライバを構築してみます。
まずはビルド環境を用意します。
$ sudo apt install build-essential dkms
また、ドライバのソースを取得するのに git が必要です。
$ sudo apt install git
適当なフォルダを用意してドライバのソースを取得します。
$ mkdir ~/work
$ cd ~/work
$ git clone https://github.com/a1wong/it87.git
ビルド前にロードしてあったドライバを解放しておきます。
$ sudo modprobe -r it87
準備が整ったら it87 ドライバをビルドしてみます。
$ cd it87
$ sudo make dkms
Creating symlink /var/lib/dkms/it87/v1.0-48-g40bec4b/source -> /usr/src/it87-v1.0-48-g40bec4b
Sign command: /usr/bin/kmodsign
Certificate or key are missing, generating them using update-secureboot-policy...
Secure Boot not enabled on this system.
Signing key: /var/lib/shim-signed/mok/MOK.priv
Public certificate (MOK): /var/lib/shim-signed/mok/MOK.der
Building module:
Cleaning build area...
make -j12 KERNELRELEASE=6.5.0-10-generic TARGET=6.5.0-10-generic...
Signing module /var/lib/dkms/it87/v1.0-48-g40bec4b/build/it87.ko
Cleaning build area...
it87.ko.zst:
Running module version sanity check.
- Original module
- Installation
- Installing to /lib/modules/6.5.0-10-generic/updates/dkms/
depmod...
modprobe: ERROR: could not insert 'it87': Device or resource busy
make: *** [Makefile:101: dkms] エラー 1
結果を見ると、ビルドは成功したのに modprobe でエラーが発生しています。
ドライバの確認と対策
ビルド自体は成功しているので、成果物である新しいドライバの所在を確認します。
$ sudo modprobe -D it87
insmod /lib/modules/6.5.0-10-generic/kernel/drivers/hwmon/hwmon-vid.ko.zst
insmod /lib/modules/6.5.0-10-generic/updates/dkms/it87.ko.zst
改めてこのドライバをロードしてみます。
$ sudo modprobe it87
modprobe: ERROR: could not insert 'it87': Device or resource busy
既定のドライバでは何も表示されなかったのですが、ビルド時と同様に modprobe でエラーが発生します。
この件について、ネットの類似事例にあるように OS 起動時のパラメータやドライバロード時の ID 指定等、色々と試してみましたが解決しません。
どうやらマザーボードの製造メーカーによって対策は異なるらしく、最終的に GIGABYTE の B450 マザーボードで有効なパラメータはこちらでした。
$ sudo modprobe it87 ignore_resource_conflict=true
$
modprobe を実行して、エラーが表示されなければロード成功です。
この状態で sensors を実行すると期待通りの結果になります。
$ sensors
it8792-isa-0a60
Adapter: ISA adapter
in0: 403.00 mV (min = +0.00 V, max = +2.78 V)
in1: 916.00 mV (min = +0.00 V, max = +2.78 V)
in2: 1.05 V (min = +0.00 V, max = +2.78 V)
+3.3V: 3.36 V (min = +0.00 V, max = +5.56 V)
in4: 1.26 V (min = +0.00 V, max = +2.78 V)
in5: 1.13 V (min = +0.00 V, max = +2.78 V)
in6: 2.78 V (min = +0.00 V, max = +2.78 V) ALARM
3VSB: 3.33 V (min = +0.00 V, max = +5.56 V)
Vbat: 3.25 V
fan1: 0 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
temp1: +29.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp2: +34.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp3: +35.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
intrusion0: ALARM
iwlwifi_1-virtual-0
Adapter: Virtual device
temp1: N/A
acpitz-acpi-0
Adapter: ACPI interface
temp1: +16.8°C (crit = +20.8°C)
it8686-isa-0a40
Adapter: ISA adapter
in0: 1.39 V (min = +0.00 V, max = +3.06 V)
in1: 2.02 V (min = +0.00 V, max = +3.06 V)
in2: 2.00 V (min = +0.00 V, max = +3.06 V)
in3: 2.02 V (min = +0.00 V, max = +3.06 V)
in4: 924.00 mV (min = +0.00 V, max = +3.06 V)
in5: 900.00 mV (min = +0.00 V, max = +3.06 V)
in6: 1.21 V (min = +0.00 V, max = +3.06 V)
3VSB: 3.26 V (min = +0.00 V, max = +6.12 V)
Vbat: 3.14 V
fan1: 394 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
fan5: 0 RPM (min = 0 RPM)
temp1: +32.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp2: +37.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp3: +34.0°C (low = +127.0°C, high = +127.0°C) sensor = AMD AMDSI
temp4: +35.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp5: +40.0°C (low = +0.0°C, high = -120.0°C) sensor = thermistor
temp6: +46.0°C (low = +0.0°C, high = -120.0°C) sensor = thermistor
intrusion0: ALARM
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +34.2°C
後は OS 起動時にこの状態になるように設定します。
ドライバの追加とドライバオプションの設定
次の 2 つのファイルにそれぞれ追記します。
※存在しなければ、ファイルを作成します。
(1) /etc/modules
/etc/modules
に以下の内容を追記
# Chip drivers
it87
(2) /etc/modprobe.d/it87.conf
/etc/modprobe.d/it87.conf
に以下の内容を追記
options it87 ignore_resource_conflict=1
modprobe コマンド実行時とは異なり true ではなく 1 をセットします。
この記述があれば modprobe コマンド実行時、オプション指定しなくてもパラメータが反映されます。
(3) OS 再起動
OS 再起動後、sensors を実行して期待通りの結果になれば作業完了です。