如何在Linux中将外部温度传感器与扇emc2103绑定。As emc2103有自己的温度传感器,用于控制风机转速。但我想控制风扇的速度基于CPU的温度。如何用emc2103风扇构建CPU温度传感器
发布于 2022-04-05 20:41:56
这都取决于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存储芯片(dmesg|grep SPD)在同一总线上,但是在每次引导时都分配不同的总线号。
您可以查看emc2103 数据表 (以及内核模块源代码)来查看要读和写的寄存器。
同样,对于Odroid H2来说,禁用BIOS启用的查找表就足够了,然后我可以通过向fan1_target写入来控制风扇的速度。要禁用它,需要使用命令编写值0x00来注册0x50:
i2cset -y bus 0x2E 0x50 0x00其中总线是设备所在的i2c总线号。这将在加载emc2103内核模块时失败。所以要么卸载它,要么添加-f参数来强制它。
在我的示例中,我希望基于HDD温度运行风扇,因此我将尝试使用LUT表作为BIOS的设置,但添加Temp3的阈值,我将其设置为“推送温度”,可以使用i2c设置。这样,我就可以让板温度(由芯片本身测量)和HDD温度值自动评估。
另一种可能是使用类似于hddfancontrol控制或fan2go的东西来使用hwmon /sys文件来控制风扇速度。
https://stackoverflow.com/questions/60305520
复制相似问题