Thunderobot 911ME 笔记本 Linux 风扇控制研究

背景

我的 Thunderobot 911ME 笔记本在 Linux 下风扇转速太低,散热效果不理想。本文记录了我研究并解决这个问题的完整过程。

环境信息

  • 笔记本型号: THUNDEROBOT 911ME
  • 主板型号: NH58DXQ-H (Clevo OEM)
  • 系统: Debian 13 (Trixie)
  • 内核: 6.12.74+deb13+1-amd64

初步尝试:fancontrol

首先尝试了 Linux 下常用的风扇控制工具 fancontrol

安装 lm-sensors

复制代码
sudo apt install lm-sensors fancontrol

运行传感器检测

复制代码
sudo sensors-detect

检测结果:

  • 检测到 Intel digital thermal sensor (coretemp 驱动)
  • 未检测到风扇控制芯片
  • 没有 PWM 接口暴露给用户空间

问题

运行 sensors 可以看到温度数据,但 /sys/class/hwmon/ 下没有任何 pwm*fan*_input 接口。这说明:

  1. 主板的风扇控制由嵌入式控制器 (EC) 管理
  2. Linux 无法通过标准的 PWM 接口控制风扇
  3. fancontrol 无法使用

尝试 NBFC (NoteBook FanControl)

NBFC 是专门为笔记本设计的风扇控制工具,支持通过 EC 寄存器控制风扇。

安装 NBFC

复制代码
# 下载 Debian 包
wget https://github.com/nbfc-linux/nbfc-linux/releases/download/0.4.1/debian-trixie-nbfc-linux_0.4.1_amd64.deb

# 安装
sudo apt install ./debian-trixie-nbfc-linux_0.4.1_amd64.deb

更新配置

复制代码
sudo nbfc update

问题

运行配置推荐:

复制代码
sudo nbfc config --recommend

结果:没有找到适合的配置文件

NBFC 的配置库中没有 Thunderobot 或 NH58DXQ-H 的配置,需要自己研究。

深入研究:分析 ACPI DSDT

既然没有现成的配置,那就自己分析固件。

导出 DSDT

复制代码
sudo nbfc acpi-dump dsl > dsdt.dsl

分析 EC 寄存器

复制代码
sudo nbfc acpi-dump ec-registers

发现的寄存器:

  • FCMD (0xF8) - 功能命令寄存器
  • FDAT (0xF9) - 功能数据寄存器
  • FBUF (0xFA) - 功能缓冲寄存器

搜索风扇相关代码

在 DSDT 中搜索关键词:

复制代码
grep -i "fan\|fctl" dsdt.dsl

发现关键信息:

  • FANQ 寄存器 - 可能是风扇状态
  • FCMD = 0xD7 - 执行风扇控制命令

分析 FCMD 命令

查看 DSDT 中 0xD7 命令的使用:

复制代码
If ((Local2 == Zero))
{
    ^^PCI0.LPCB.EC.FDAT = 0x02
    ^^PCI0.LPCB.EC.FCMD = 0xD7
}

If ((Local2 == One))
{
    ^^PCI0.LPCB.EC.FDAT = 0x10
    ^^PCI0.LPCB.EC.FCMD = 0xD7
}

If ((Local2 == 0x02))
{
    ^^PCI0.LPCB.EC.FDAT = 0x08
    ^^PCI0.LPCB.EC.FCMD = 0xD7
}

这揭示了风扇控制的机制:

  1. FDAT (0xF9) 写入模式值
  2. FCMD (0xF8) 写入 0xD7 执行命令

FDAT 值含义

根据 DSDT 分析:

  • 0x02 - 静音/低速模式
  • 0x08 - 平衡模式
  • 0x10 - 高性能模式

实现风扇控制

使用 ec_probe 工具

复制代码
# 设置高性能模式
sudo ec_probe -e dev_port write 0xF9 0x10
sudo ec_probe -e dev_port write 0xF8 0xD7

# 设置平衡模式
sudo ec_probe -e dev_port write 0xF9 0x08
sudo ec_probe -e dev_port write 0xF8 0xD7

# 设置静音模式
sudo ec_probe -e dev_port write 0xF9 0x02
sudo ec_probe -e dev_port write 0xF8 0xD7

注意 :需要使用 -e dev_port 参数,默认的 ec_sys 接口写入会失败。

创建控制脚本

为了方便使用,创建了一个简单的控制脚本:

复制代码
#!/bin/bash
# Thunderobot 911ME 风扇控制脚本

usage() {
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  -l, --low       静音模式 (FDAT=0x02)"
    echo "  -b, --balanced  平衡模式 (FDAT=0x08)"
    echo "  -p, --perf      高性能模式 (FDAT=0x10)"
    echo "  -s, --set VAL   自定义 FDAT 值 (1-255)"
    echo "  -h, --help      显示帮助信息"
}

set_fan() {
    local fdat=$1
    ec_probe -e dev_port write 0xF9 "$fdat"
    ec_probe -e dev_port write 0xF8 0xD7
    echo "风扇模式已设置: FDAT=$fdat"
}

case "$1" in
    -l|--low)       set_fan 0x02 ;;
    -b|--balanced)  set_fan 0x08 ;;
    -p|--perf)      set_fan 0x10 ;;
    -s|--set)       set_fan "$2" ;;
    -h|--help|"")   usage ;;
esac

安装脚本

复制代码
sudo cp fun.sh /usr/local/bin/fun

使用示例

复制代码
# 查看帮助
fun -h

# 设置高性能模式
fun -p

# 设置平衡模式
fun -b

# 设置静音模式
fun -l

开机自动设置

如果需要开机自动设置风扇模式,可以创建 systemd 服务:

复制代码
sudo tee /etc/systemd/system/fan-control.service << 'EOF'
[Unit]
Description=Fan Control Service
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/fun -p

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl enable fan-control.service

总结

研究过程

  1. 尝试标准方案 - fancontrol 失败,因为没有 PWM 接口
  2. 尝试 NBFC - 没有现成配置,需要自己研究
  3. 分析 DSDT - 找到 EC 控制风扇的方法
  4. 实现控制 - 通过 ec_probe 写入 EC 寄存器

关键发现

  • Thunderobot 911ME (Clevo NH58DXQ-H) 的风扇由 EC 控制
  • 控制寄存器:FDAT (0xF9) + FCMD (0xD7)
  • 三种预设模式:静音 (0x02)、平衡 (0x08)、高性能 (0x10)

经验教训

  1. 笔记本风扇控制往往需要访问 EC,不能依赖标准 PWM 接口
  2. DSDT 分析是了解硬件控制方法的重要手段
  3. NBFC 是很好的工具,但可能需要自己创建配置
  4. 使用 ec_probe -e dev_port 而非默认的 ec_sys

参考资料

相关推荐
fengyehongWorld4 小时前
TeraTerm ttl脚本登录wsl
linux·teraterm
乌托邦的逃亡者4 小时前
Linux中如何检测IP冲突
linux·运维·tcp/ip
一曦的后花园5 小时前
linux搭建promethes并对接node-exporter指标
linux·运维·服务器
乌托邦的逃亡者5 小时前
CentOS/Openeuler主机中,为一个网卡设置多个IP地址
linux·运维·网络·tcp/ip·centos
念恒123066 小时前
进程控制---自定义Shell
linux·c语言
风曦Kisaki6 小时前
# Linux Shell 编程入门 Day02:条件测试、if 判断、循环与随机数
linux·运维·chrome
李日灐7 小时前
< 6 > Linux 自动化构建工具:makefile 详解 + 进度条实战小项目
linux·运维·服务器·后端·自动化·进度条·makefile
嵌入式×边缘AI:打怪升级日志7 小时前
嵌入式Linux开发:开源组件、第三方库与许可证详解
linux
计算机安禾7 小时前
【Linux从入门到精通】第34篇:搭建FTP与Samba——跨平台文件共享解决方案
linux·运维·服务器