这完全取决于BIOS如何配置emc2103芯片。
查看 emc2103 内核模块source code,应该可以通过在/sys/class/hwmon/hwmonX 中写入文件fan1_target 来修改风扇速度,其中X 是分配给模块的数字。它是i2c(在我的示例中为hwmon2)的符号链接。
ll /sys/class/hwmon/
total 0
lrwxrwxrwx 1 root root 0 Apr 5 16:20 hwmon0 -> ../../devices/virtual/thermal/thermal_zone0/hwmon0
lrwxrwxrwx 1 root root 0 Apr 5 16:20 hwmon1 -> ../../devices/pci0000:00/0000:00:13.0/0000:01:00.0/hwmon/hwmon1
lrwxrwxrwx 1 root root 0 Apr 5 16:20 hwmon2 -> ../../devices/pci0000:00/0000:00:1f.1/i2c-1/1-002e/hwmon/hwmon2
lrwxrwxrwx 1 root root 0 Apr 5 16:20 hwmon3 -> ../../devices/pci0000
但至少在我的 Odroid H2 机器上,emc2103 芯片由 BIOS 控制,写入fan1_target 文件没有任何效果。如果我在 BIOS 中禁用风扇控制,它可能会切断风扇的电源,因为我无法使其运行。
但由于 emc2103 芯片是 i2c 设备,它可以通过i2cget 和i2cset 命令手动配置(Debian 中的i2c-tools 包)。首先你需要加载i2c_dev内核模块,然后确定芯片所在的i2c总线(你可以使用i2cdetect命令)。 emc2103 芯片位于地址 0x2E。在 Odroid H2 的情况下,它与 DRAM SPD 内存芯片 (dmesg|grep SPD) 在同一总线上,但是在每次启动时,它被分配不同的总线号。
您可以查看 emc2103 datasheet(和内核模块源代码)来查看要读取和写入的寄存器。
同样,对于 Odroid H2,禁用由 BIOS 启用的查找表就足够了,然后我可以通过写入 fan1_target 来控制风扇速度。要禁用它,您需要使用命令将值 0x00 写入寄存器 0x50:
i2cset -y bus 0x2E 0x50 0x00
其中 bus 是设备所在的 i2c 总线号。这将在加载 emc2103 内核模块时失败。所以要么卸载它,要么添加-f参数强制它。
在我的情况下,我希望风扇根据 HDD 温度运行,因此我将尝试使用 LUT 表作为 BIOS 设置,但为 Temp3 添加阈值,我将其设置为“Pushed Temperature”,这可以使用 i2c 设置。这样我就可以自动评估电路板温度(由芯片本身测量)和硬盘温度值。
另一种可能性是使用hddfancontrol 或fan2go 之类的东西来使用hwmon /sys 文件控制风扇速度。