为什么 Linux 将 cpu 温度存储在这么多文件中?

spk*_*spk 12 linux-kernel

我有一台带 2 个 CPU 的笔记本电脑(thinkpad)。目前,我可以使用 cat(1) 从以下文件中读取 CPU 温度:

cat /sys/class/thermal/thermal_zone0/temp
cat /sys/class/thermal/thermal_zone1/temp

cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input
cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input

cat /sys/devices/LNXSYSTM:00/LNXCPU:00/thermal_cooling/subsystem/thermal_zone1/temp
cat /sys/devices/LNXSYSTM:00/LNXCPU:01/thermal_cooling/subsystem/thermal_zone0/temp
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么内核将这些信息存储在这么多不同的地方,哪个是读取 CPU 温度的“标准”文件?

这是因为 systemd(我使用的是 Arch Linux)还是像 Slackware 这样的非系统 Linux 发行版有不同的方法?

Gil*_*il' 13

实际上,温度并未存储在任何地方。/sys是一个内存中的文件系统,从文件中读取会/sys调用内核中动态计算值的代码。

不同的目录对应于硬件报告温度的不同方式。这些temp*_input文件有一个关联temp*_label,用于标识报告了哪个组件的温度。

下面的位置/sys往往因内核版本而异(而不是从发行版到发行版)。这是读取数据的程序作者/sys必须忍受的困难(例如)。


der*_*ert 8

首先,/sys/class是一种在/sys. 你会发现里面的所有东西实际上都是一个符号链接;我很确定你的第一节是符号链接到你的第三节。

第二节是内核直接从 CPU/芯片组读取温度。第三节是内核通过 ACPI 从 BIOS 获取值。虽然在您的系统上它们可能会给出相同的答案,但它们不需要(例如,BIOS 可能使用不同的传感器,将几个传感器平均在一起,或应用一些特定于板的调整)。

最后,每节都有两个不同的读数,因为可能有两个温度计。或者至少,硬件的 API 允许这样做。