it87 Linux 驱动会不会和 BIOS 或者硬件设备(主板 ASUS M5A99FX PRO 2)冲突?比如在 Linux 驱动(drivers/hwmon/it87.c)里有一个函数:
/*
* Must be called with data->update_lock held, except during initialization.
* We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
* would slow down the IT87 access and should not be necessary.
*/
static int it87_read_value(struct it87_data *data, u8 reg)
{
outb_p(reg, data->addr + IT87_ADDR_REG_OFFSET);
return inb_p(data->addr + IT87_DATA_REG_OFFSET);
}
下一个情况可能吗?在多核系统上,运行在核心 0 上的固件写入“data->addr + IT87_ADDR_REG_OFFSET”寄存器。然后,运行在核心 1 上的 Linux 驱动程序执行 it87_read_value,从而修改“data->addr + IT87_ADDR_REG_OFFSET”寄存器。然后,固件尝试读取“data->addr + IT87_DATA_REG_OFFSET”,并获取错误数据。
it87 驱动程序还支持警报:“如果触发警报,它将保持触发状态,直到至少读取一次硬件寄存器。这意味着警报的原因可能已经消失!请注意,在当前实施中,只要读取任何数据,就会读取所有硬件寄存器(除非距离上次更新不到 1.5 秒)。这意味着您很容易错过一次性警报。”(Linux 内核,Documentation/hwmon/it87)。如果 Linux 驱动程序读取警报寄存器,固件是否可能会错过警报?
看来硬件监控芯片是IT8721F。
另外,华硕 M5A99FX PRO 2 主板包含 TPU(涡轮处理器单元)和 EPU(能量处理器单元)。这些芯片是否与 IT8721F 交互,是否会发生与所述情况类似的情况?
是否知道华硕 Ai Suite 如何与硬件交互?是否有特定的 ACPI 接口来读取温度、风扇速度等,而 Linux 中没有实现?
“sensors”命令的输出(it87模块手动加载):
it8721-isa-0290
Adapter: ISA adapter
in0: +2.82 V (min = +1.96 V, max = +3.04 V)
in1: +2.84 V (min = +1.27 V, max = +2.78 V) ALARM
in2: +0.95 V (min = +3.02 V, max = +2.10 V) ALARM
+3.3V: +3.29 V (min = +2.71 V, max = +4.61 V)
in4: +1.02 V (min = +2.92 V, max = +2.41 V) ALARM
in5: +2.52 V (min = +3.04 V, max = +2.23 V) ALARM
in6: +1.92 V (min = +1.48 V, max = +1.75 V) ALARM
3VSB: +2.04 V (min = +1.94 V, max = +5.93 V)
Vbat: +3.29 V
fan1: 903 RPM (min = 22 RPM)
fan2: 0 RPM (min = 11 RPM) ALARM
fan3: 0 RPM (min = 10 RPM) ALARM
temp1: +33.0°C (low = -62.0°C, high = +109.0°C) sensor = thermistor
temp2: +32.0°C (low = -72.0°C, high = +60.0°C) sensor = thermistor
temp3: -128.0°C (low = -33.0°C, high = -125.0°C) sensor = disabled
intrusion0: OK
fan2 和 fan3 不存在,因此 0 RPM 是正确的。
在加载“it87”模块并读取温度数据时,我还没有看到任何实际问题。但我不确定是否不会发生此类问题。