我可以在 Linux 下的 ASRock x399 Taichi 主板上的 AMD Threadripper 1950x 上监控哪些传感器。去年宣布温度监控适用于 Ryzen 处理器,据称该功能已包含在 4.15 内核中,根据以下内容:https://www.phoronix.com/scan.php?page=news_item&px=AMD-Zen-Temps-Hwmon-Next。然而,温度似乎有所偏移,根据以下内容在内核 4.18.6 中进行了修复:https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.18.6-k10temp-Correct
据我所知,Linux 下绝对没有像 Windows 那样进行每核心温度监控。
然而,其他消息来源表明我可能需要专门基于我的主板构建模块。这些说明似乎表明我可以根据传感器检测的输出构建适当的内核驱动程序:https://linuxconfig.org/monitor-amd-ryzen-temporals-in-linux-with-latest-kernel-modules
根据传感器检测,我有 nct6775,但我找不到任何迹象表明我有适当的内核模块(未使用 lsmod 显示,还有其他地方我应该查看吗?)。不幸的是,我无法从存储库构建,因为它不再位于 github 上。
所以这些是我的问题:
哪些驱动程序和内核模块提供哪些信息?具体来说,哪些提供了 Windows 下可用的每核心读数?
Linux下Ryzen的温度驱动程序状态如何:完整、不完整、拼凑和永远不可靠?
如果我能组装出 nct6775,除了我已经拥有的 K10 之外,还能给我带来什么?我还可以从哪里获取构建它们的源代码?
为什么这方面的记录如此之少?在发布一年半后还没有获得有关此问题的明确信息,按照行业标准来看,AMD 是否异常无助?
答案1
[OP 已删除答案:] 我仍然想知道:现在 nct6775 到底是什么原因可用?
在以下链接中,有很多尝试回答一般问题。不幸的是,它们都不全面,所以我会尽力改进它们。 Linux:如何查找设备使用的设备驱动程序?
在您的情况下,传感器设备可以作为 中所示的链接之一找到ls -l /sys/class/hwmon/*
。您可以尝试扩展该命令,并立即找到您的内核模块:
ls -l /sys/class/hwmon/*/device/driver/module
但是,该命令做出了一些假设。它并非在所有情况下都有效。如果该命令不起作用,请通过检查链中的每个单独链接来缩小范围。有三种可能的情况。
你有
driver
链接,但没有module
链接。这意味着驱动程序已内置到内核中!这可以回答你的问题:-)。
同样可以在链接
ls -l
上driver
。即要查看驱动程序的名称,请更改上面的命令以删除该/module
部分。通常驱动程序名称与可加载模块的名称相同,但有时它们是不同的。链接
driver
不是立即地下device
,但是...如果上述命令不起作用,您可能需要替换
device
为device/device
,等等。该
device
链接会将您带到父设备。但有时驱动程序位于祖父母设备上,甚至更远:-)。父级都
device
没有链接,或者根本driver
没有父级链接。device
该
device
链接会将您带到父设备。例如,您可能有一个网络设备/sys/class/wlan0
,并且/sys/class/wlan0/device
可能指向一个提供wlan0
.就您而言,我可以想象它在标准总线上没有类似设备的东西
pci
。在这种情况下,驱动程序是应该定义自己的自定义设备,在/sys/devices/platform/
.这正是coretemp
我的 Intel CPU 驱动程序的作用。但是,如果您的驱动程序出错,它将创建一个没有父设备的设备,因此没有
device
链接。传感器(hwmon
设备)是比较不起眼的子设备之一;我以前见过这种情况发生过好几次。查看一下ls /sys/devices/virtual/*
,我似乎有三个设备出现此错误,而且它们都是hwmon
设备。如果没有“身体”/父母
device
——那么就不可能有driver
。这是真正的虚拟设备的预期行为,例如环回 (lo
) 或bridge
网络设备。它反映了Linux内核的设备模型。在物理设备上,您可以删除与其绑定的驱动程序,并可能绑定不同的驱动程序。在没有物理设备的情况下支持这一点是没有意义的。不幸的是,因为没有类似的等效方法来查找实现虚拟设备的模块。
内容:
- 在 /sys 中查找的示例结果
- 我找到了模块名称,现在...
1. 在 /sys 中查找示例结果
$ cd /sys/class/hwmon/
$ ls -l *
total 0
lrwxrwxrwx. 1 root root 0 Dec 2 17:50 hwmon0 -> ../../devices/virtual/thermal/thermal_zone0/hwmon0
lrwxrwxrwx. 1 root root 0 Dec 2 17:50 hwmon1 -> ../../devices/virtual/hwmon/hwmon1
lrwxrwxrwx. 1 root root 0 Dec 2 17:50 hwmon2 -> ../../devices/virtual/thermal/thermal_zone8/hwmon2
lrwxrwxrwx. 1 root root 0 Dec 2 17:50 hwmon3 -> ../../devices/platform/coretemp.0/hwmon/hwmon3
$ ls -l hwmon3/device/driver/module
lrwxrwxrwx. 1 root root 0 Dec 2 18:32 /sys/class/hwmon/hwmon3/device/driver/module -> ../../../../module/coretemp
但其他结果看起来并没有那么有帮助:-)。什么是virtual/thermal/thermal_zone0/hwmon0
?
hwmon
设备(和一些其他类型)也有一个name
.例如iwlwifi
传感器,它实际上是由我的英特尔 Wi-Fi 卡提供的。但驱动程序有缺陷,并将其声明为虚拟设备。
$ head */name
==> hwmon0/name <==
acpitz
==> hwmon1/name <==
dell_smm
==> hwmon2/name <==
iwlwifi
==> hwmon3/name <==
coretemp
这是一个不同的设备,其中驱动程序位于“祖父母”上:
$ ls -l */device/device/driver
lrwxrwxrwx. 1 root root 0 Dec 2 18:33 /sys/class/hwmon/hwmon0/device/device/driver -> ../../../../bus/acpi/drivers/thermal
此外,该驱动程序没有模块,因为该驱动程序是内置于内核中的。如果您可以在内核构建配置中找到相应的选项,则可以确认这一点。不过,这不一定与模块命名相同。
$ ls -l */device/device/driver/module
ls: cannot access '*/device/device/driver/module': No such file or directory
$ grep CORETEMP= /boot/config-$(uname -r)
CONFIG_SENSORS_CORETEMP=m
$ grep ACPI_THERMAL= /boot/config-$(uname -r)
CONFIG_ACPI_THERMAL=y
2.我找到了模块名称,现在...
你说你不能100%确定你做了什么。如果您找到了模块名称,但您担心,因为您不记得它是否是从未知网站安装的,那么您可以查看以下一些内容。
您可以重新加载模块并检查模块重新加载的路径:
$ modprobe --remove coretemp
$ modprobe -v coretemp
insmod /lib/modules/4.19.4-200.fc28.x86_64/kernel/drivers/hwmon/coretemp.ko.xz
然后,您可以查询包管理器以确认模块文件来自分发内核包。例如,对于转速:
$ rpm -q --whatprovides /lib/modules/4.19.4-200.fc28.x86_64/kernel/drivers/hwmon/coretemp.ko.xz
kernel-core-4.19.4-200.fc28.x86_64
$ rpm -q --whatprovides /boot/vmlinuz-$(uname -r)
kernel-core-4.19.4-200.fc28.x86_64
您的包管理器还应该让您验证已安装的包文件是否未被修改。
确认包裹来自哪里并不那么简单:-)。通常你会查看包名称并猜测:-)。您可以获取可用软件包的列表以及它们的来源,例如使用dnf info kernel
,但我不认为 dnf 可以显示已安装的 RPM 文件或可用 RPM 的校验和。