You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Linux终端读取PMBus/SMBus提供的台式机供电电压

如何通过Linux终端读取PMBus/SMBus提供的台式机供电电压

兄弟,我懂你这种明明能控制供电电压却读不回准确数值的憋屈——之前帮朋友排查过类似的问题,给你几个实际可行的方向试试:

  • 重新梳理hwmon的正确使用姿势
    很多人用hwmon踩的坑是找错了对应的传感器设备。先跑ls /sys/class/hwmon/,每个hwmonX目录里都有个name文件,先挨个看哪个是你的电源管理芯片(常见的比如pmbus、isl68137这类)。找到对应目录后,里面的in*_input文件就是电压读数,注意数值是以毫伏为单位的,比如读出来12000就代表12V。
    举个实际操作例子:

    1. 先确认芯片名称:cat /sys/class/hwmon/hwmon2/name(把hwmon2换成你找到的目录)
    2. 查看对应电压的标签:cat /sys/class/hwmon/hwmon2/in1_label(会告诉你这个是“VCC_12V”还是CPU核心电压之类的)
    3. 读取电压值:cat /sys/class/hwmon/hwmon2/in1_input
  • 用i2c-tools直接读取PMBus寄存器
    既然你能控制电压,说明设备肯定在I2C总线上。先装i2c-tools工具包:sudo apt install i2c-tools(Debian/Ubuntu系)或者sudo yum install i2c-tools(RHEL/CentOS系)。
    步骤如下:

    1. 查看系统上的I2C总线:i2cdetect -l
    2. 扫描目标总线的设备地址:i2cdetect -y 0(把0换成你找到的总线号,比如i2c-1),找到电源管理IC的地址(一般是0x40到0x70之间的十六进制数)
    3. 用PMBus标准寄存器读取电压:输入电压对应寄存器0x08,输出电压对应0x0B,用i2cget命令读取16位数据:sudo i2cget -y 0 0x40 0x08 w(这里0是总线号,0x40是设备地址)
    4. 换算数值:PMBus的电压用线性11格式编码,读出来的十六进制数需要转成实际电压。比如读出来0x199A,换算公式是(数值 >> 3) * (2^(数值 & 0x7)) / 1000,或者你可以搜个在线的线性11转换器快速计算。如果厂商有自定义寄存器,得查对应芯片的 datasheet找准确的寄存器地址。
  • 排查容易忽略的权限和BIOS问题

    • 要是跑命令时提示权限不足,记得加sudo
    • 检查I2C相关模块是否加载:lsmod | grep i2c,如果没看到i2c_dev和pmbus,手动加载:sudo modprobe i2c_dev、sudo modprobe pmbus
    • 进BIOS看看有没有禁用SMBus/PMBus的选项,比如“I2C/SMBus Controller”要设为Enabled,有些台式机默认是关闭的

备注:内容来源于stack exchange,提问作者ajax spencer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:58:20