linux主机风扇速度控制 解决记录 it8613E z490 GTN ubuntu 20.04

news/2024/12/2 19:58:40/

OS: ubuntu 20.04、主板:biostar z490 GTN、风扇IO芯片:it8613E

lmsensors 可以获取 温度传感器 与 风扇的转速,也可以自定义调整风扇速度。

1、运行sensors-detect显示it8613E无驱动(如图)

it8613E不是一个新的芯片,所以没有驱动linux很奇怪。

github上找到了https://github.com/a1wong/it87

2、按照readme安装it87报错 Device or resource busy

dmesg显示存在地址冲突

modprobe it87 ignore_resource_conflict=1 # 忽略冲突 

发现在我的主板上不解决冲突也可以使用了、只是无法获取两个风扇口的转速。

如果想要解决这个地址冲突、需要修改dsdt。现在需要重新编译内核才可以修改dsdt。

编译内核太慢了,治好了我的强迫症。

3、执行pwmconfig选择该选的。之后就可以在sensors里面看到风扇了。

可以通过修改 /sys/class/hwmon/hwmon*/pwm*修改风扇pwm值。

如果不能修改 修改对应的enable文件:

echo 0 2>/dev/null > /sys/class/hwmon/hwmon*/pwm*_enable

4、我的小机箱是上下风道,风扇控制策略应该是:

使用max(cpu温度,gpu温度)控制上下的风扇。gpu风扇仍然由gpu的bios控制。主板及硬盘被动散热即可。

写了个脚本,主要逻辑就是获取cpu gpu温度,控温区间为50-85°,对应的pwm范围是70-255.

50°以下风扇处于最安静状态、82°就快达到降频温度了。pwm的70是因为以下转速不再变小,应该是bios的安全策略。

温度-pwm曲线 大概长下面这样

fan.sh & fan.py:

#!/bin/bash
echo "Hello FanS !"
sleep 20s 
# 忽略硬件地址冲突
modprobe it87 ignore_resource_conflict=1
echo 0 2>/dev/null > /sys/class/hwmon/hwmon6/pwm5_enable
echo 0 2>/dev/null > /sys/class/hwmon/hwmon6/pwm2_enablewhile true;dogpu_msg=`nvidia-smi`cpu_msg=` sensors | grep 'Package id 0:'`pwm_val=`python3 /hxy/software/fan/fan.py "$cpu_msg" "$gpu_msg"`echo $pwm_val > /sys/class/hwmon/hwmon6/pwm2echo $pwm_val > /sys/class/hwmon/hwmon6/pwm5sleep 1s 
done
import re
import sys
import logging
logging.basicConfig(filename=r'fan.err', level=logging.INFO)cpu_temp=100
gpu_temp=100
temp1,temp2=50,82
pwm1,pwm2=70,255
pattern1 = r'[+-]{0,1}[0-9]{1,3}[.]{0,1}[0-9]{0,3}[ ]{0,1}[°]{0,1}[c,C] ' # msg -> '+38.2 °C '  or '8C '
pattern2 = r'[0-9]{1,3}[.]{0,1}[0-9]{0,3}' # '+38.2°C ' -> '38.2'
fan1=r'/sys/class/hwmon/hwmon6/pwm2'
fan2=r'/sys/class/hwmon/hwmon6/pwm5'
pwm_res=pwm2
def my_log(*args):logging.error(str(args))if len(sys.argv) == 3:cpu_msg = sys.argv[1]gpu_msg = sys.argv[2]
else:my_log ('arg err',sys.argv)exit()def get_cpu_temp():cpu_res1=re.findall(pattern1,cpu_msg)if len(cpu_res1)>0:cpu_res2=re.findall(pattern2,cpu_res1[0])if len(cpu_res2)>0:cpu_temp=float(cpu_res2[0])if cpu_temp>-30 and cpu_temp<110:return cpu_tempmy_log ('cpu err',cpu_temp,cpu_msg)return temp2def get_gpu_temp():gpu_res1=re.findall(pattern1,gpu_msg)if len(gpu_res1)>0:gpu_res2=re.findall(pattern2,gpu_res1[0])if len(gpu_res2)>0:gpu_temp=float(gpu_res2[0])if gpu_temp>-30 and gpu_temp<110:return gpu_tempmy_log ('gpu err',gpu_temp,gpu_msg)return temp2def get_max_temp(): cpu_temp=get_cpu_temp()gpu_temp=get_gpu_temp()temp_max=max(cpu_temp,gpu_temp) return temp_maxdef temp2pwm(temp_max):pwm_val= int((min(temp2,max(temp1,temp_max))-temp1)/(temp2-temp1) * (pwm2-pwm1)+pwm1)if pwm_val>=pwm1 and pwm_val<=pwm2:return pwm_valelse:my_log('pwm_err',pwm_val,sys.argv)return pwm2try:temp_max = get_max_temp()pwm_res = temp2pwm(temp_max)print(pwm_res)except BaseException:my_log ('python exception',sys.argv)

 

 

 


http://www.ppmy.cn/news/170134.html

相关文章

SY6982E芯片了解

一、芯片基本描述 1.SY6982E是一款3.6-5.5VIN&#xff0c;2A两节电池的同步升压锂离子电池充电芯片。 2.集成1MHz开关频率和全面保护功能。 3.充电电流高达2A可以通过使用外部电阻器来设置不同的便携式应用&#xff0c;并同时指示充电器电流信息。 4.具有用于安全电池充电操…

华硕P8Z77-V LX老主板转换卡升级NVMe M2硬盘经验,老主机的福音,质的飞跃

每年双十一都是淘货升级老家伙的时候&#xff0c;今年也不例外&#xff0c;随着日子长久&#xff0c;软件的增多&#xff0c;虽然已经尽量装在系统盘以外的盘&#xff0c;但C盘还是日渐不够用&#xff0c;从以前的30G系统盘升到60G&#xff0c;60G升到100G&#xff0c;C盘永远不…

mcd, lm, VS lx

LED常识之 mcd&lm&w的关系 转载自&#xff1a; http://1198.vip.blog.163.com/blog/static/202177117201211624535412/ LED 亮度是指发光体&#xff08;反光体&#xff09;表面发光&#xff08;反光&#xff09;强弱的物理量。人眼从一个方向观察光源&#xff0c;在…

ML302 GPIO模拟SPI适配LX12864T5B屏

1.背景说明 最近在搞一个DTU 的小项目&#xff0c;使用的是中移动的ML302&#xff0c;关于ML302的相关资料&#xff0c;在中移动的官网&#xff08;http://iot.10086.cn 、http://onemo10086.com&#xff09;上就有很多教程&#xff0c;而且配套的openCPU SDK里面也有相关的de…

(Lx)Linux 实验

Linux 实验 文章目录 Linux 实验实验2 Red Hat 的使用&#xff08;二&#xff09;实验3 Red Hat 的使用&#xff08;三&#xff09;实验4 Red Hat 的操作&#xff08;四&#xff09;实验5 vi 编辑器、磁盘管理和文件系统实验6 用户账户管理实验7 软件包管理实验8 网络基本配置实…

c语言中e什么作用是什么,c语言中%e是什么意思

满意答案 yeye_pig 2019.11.25 采纳率&#xff1a;40% 等级&#xff1a;9 已帮助&#xff1a;614人 c语言%e的意思是&#xff1a;以指数形式输出实数。 指针的值是语言实现(编译程序)相关的&#xff0c;但几乎所有实现中&#xff0c;指针的值都是一个表示地址空间中某个存储…

c语言 lx,C语言%lx与%x输出结果不同。。?量子力学,怎么证明L^2,Lx对易?

相关问题 EI端上是使能端,作用是控制148工作,低电平有效,即:若该端输入高电平,则148不工作;若该端输入低电平,则148正常工作。 平方和公式n(n+1)(2n+1)/6即1^2+2^2+3^2+…+n^2=n(n+1)(2n+1)/6(注:N^2=N的平方)证明1+4+9+…+n^2=N(N+1)(2N+1)/6证法一(归纳猜想法):…

【定时任务】Java 中 8 种定时任务

一、单机定时任务 1、Timer java.util.Timer 类是 JDK1.3 专门提供的定时器工具&#xff0c;用来在执行指定任务&#xff0c;需要跟 TimerTask 一起配合使用 public class Timer {private final TaskQueue queue new TaskQueue();private final TimerThread thread new Tim…