刹那(せつな)の瞬き

Willkömmen! Ich heiße Setsuna. Haben Sie etwas Zeit für mich?

B450 AORUS PRO WIFIのBIOS更新後、lm_sensorsの出力結果に変化あり

先日、GIGABYTEB450 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 を実行して期待通りの結果になれば作業完了です。