如何在Linux中将外部温度传感器与风扇emc2103绑定。emc2103有自己的温度传感器,用于控制风扇速度。但我想根据CPU温度来控制风扇速度。如何用这个emc2103风扇构建这个CPU温度传感器
这完全取决于BIOS如何配置emc2103芯片。
查看emc2103内核模块源代码,应该可以通过写入/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数据表(以及内核模块源代码(,查看要读取和写入的寄存器。
同样,对于Odroid H2,禁用BIOS启用的查找表就足够了,然后我可以通过写入fan1_target
来控制风扇速度。要禁用它,您需要使用以下命令将值0x00写入寄存器0x50:
i2cset -y bus 0x2E 0x50 0x00
其中总线是设备所在的i2c总线编号。加载emc2103内核模块后,此操作将失败。所以要么卸载它,要么添加-f
参数来强制它
在我的情况下,我希望风扇基于HDD温度运行,所以我将尝试使用LUT表作为BIOS的设置,但添加Temp3的阈值,我将其设置为"0";"推动温度";,其可以使用i2c来设置。这样,我就可以自动评估板温度(由芯片本身测量(和HDD温度值。
另一种可能性是使用类似hddfancontrol或fan2go的东西来控制使用hwmon/sys文件的风扇速度。