radeon.hw_i2c=1 与温度读数有关系吗?

radeon.hw_i2c=1 与温度读数有关系吗?

如果可能的话,我想从 Advanced Micro Devices [AMD] nee ATI RS880 [Radeon HD 4290] 卡中读取温度。它集成在 ASUS M4A89GTDPRO/USB3 主板上。

传感器检测报告以下内容:

Do you want to probe the I2C/SMBus adapters now? (YES/no):
Using driver `i2c-piix4' for device 0000:00:14.0: ATI Technologies Inc SB600/SB700/SB800 SMBus
Module i2c-dev loaded successfully.

Next adapter: Radeon i2c bit bus 0x90 (i2c-0)
Do you want to scan it? (yes/NO/selectively): yes

Next adapter: Radeon i2c bit bus 0x91 (i2c-1)
Do you want to scan it? (yes/NO/selectively): yes

Next adapter: Radeon i2c bit bus 0x92 (i2c-2)
Do you want to scan it? (yes/NO/selectively): yes

Next adapter: Radeon i2c bit bus 0x93 (i2c-3)
Do you want to scan it? (yes/NO/selectively): yes

Next adapter: Radeon i2c bit bus 0x14 (i2c-4)
Do you want to scan it? (yes/NO/selectively): yes

命令输出中没有任何相关内容sensors

x.org 网站提供以下信息:

热传感器通过外部 i2c 芯片或内部热传感器(仅 rv6xx-evergreen;2.6.36 或更新版本支持)实现;并非所有 OEM 都实现热传感器。要获取使用 i2c 芯片的 asics 的温度,您需要为主板上使用的传感器(lm63、lm64 等)加载适当的 hwmon 驱动程序。drm 将尝试加载适当的 hwmon 驱动程序。在使用内部热传感器的主板上,drm 将自动设置 hwmon 接口。加载适当的驱动程序后,可以通过 lm_sensors 工具或 /sys/class/hwmon 中的 sysfs 访问温度。

hw.i2c 模块参数默认为 0。从模块描述 ( modinfo radeon) 中,我不清楚它到底是做什么的。启用它有助于获取温度吗?

答案1

我能够使用内核为 3.14 的 Ubuntu 14.04 读取我的 AMD Radeon HD 8670 / R7 250 卡(OLAND 芯片组系列)的温度。

$ sensors
[…]    
radeon-pci-0100
Adapter: PCI adapter
temp1:        +50.0°C  (crit = +120.0°C, hyst = +90.0°C)
[…]

但是,sensors-detect没有检测到 Radeon 卡的温度传感器。sensors仍然“看到”传感器,因为它可以通过内核的 hwmon 接口访问,即radeon驱动程序主动将传感器“暴露”给系统。

您将在目录中/sys/class/hwmon找到所有 hwmon 接口的列表:

$ ls -l /sys/class/hwmon/
total 0
drwxr-xr-x  2 root root 0 Jun 28 15:02 ./
drwxr-xr-x 56 root root 0 Jun 28 15:02 ../
lrwxrwxrwx  1 root root 0 Jun 28 15:02 hwmon0 -> ../../devices/virtual/hwmon/hwmon0/
lrwxrwxrwx  1 root root 0 Jun 28 15:02 hwmon1 -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon1/
lrwxrwxrwx  1 root root 0 Jun 28 15:02 hwmon2 -> ../../devices/platform/coretemp.0/hwmon/hwmon2/
lrwxrwxrwx  1 root root 0 Jun 28 15:02 hwmon3 -> ../../devices/platform/nct6775.2560/hwmon/hwmon3/

中期结论:为了读取 Radeon 卡的温度,I²C 是否工作并不重要。

根据http://xorg.freedesktop.org/wiki/RadeonFeature/HD4290 卡支持温度传感器,就像我的卡 (HD8670) 一样。但是,文档中说的是“i2c 芯片或内部传感器”(脚注 28)。

在同一网站上,您还可以找到以下引文:

热传感器通过外部 i2c 芯片或内部热传感器(仅 rv6xx-evergreen;2.6.36 或更新版本支持)实现;并非所有 OEM 都实现热传感器。要获取使用 i2c 芯片的 asics 的温度,您需要为主板上使用的传感器(lm63、lm64 等)加载适当的 hwmon 驱动程序。drm 将尝试加载适当的 hwmon 驱动程序。在使用内部热传感器的主板上,drm 将自动设置 hwmon 接口。加载适当的驱动程序后,可以通过 lm_sensors 工具或 /sys/class/hwmon 中的 sysfs 访问温度。

底线:可以您的主板上的温度传感器是通过 I²C 连接的。在这种情况下,sensors-detect应该能够找到它。不过,您的显卡也可能没有温度传感器。

后记

对我来说,该参数的语义似乎hw_i2c是 0=禁用和 1=启用:

$ modinfo -p radeon
[…]
hw_i2c:hw i2c engine enable (0 = disable) (int)
[…]

在我的系统上,cat /sys/module/radeon/parameters/hw_i2c仍然0有 8 个 I²C 总线,它们全部来自 Radeon 驱动程序:

$ ls -l /sys/bus/i2c/devices/
total 0
drwxr-xr-x 2 root root 0 Jun 28 14:31 ./
drwxr-xr-x 4 root root 0 Jun 28 14:31 ../
lrwxrwxrwx 1 root root 0 Jun 28 14:31 i2c-0 -> ../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-0/
lrwxrwxrwx 1 root root 0 Jun 28 14:31 i2c-1 -> ../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-1/
lrwxrwxrwx 1 root root 0 Jun 28 14:31 i2c-2 -> ../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-2/
[…]
lrwxrwxrwx 1 root root 0 Jun 28 14:31 i2c-7 -> ../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/i2c-7/

$ grep . /sys/bus/i2c/devices/i2c-*/name
/sys/bus/i2c/devices/i2c-0/name:Radeon i2c bit bus 0x90
/sys/bus/i2c/devices/i2c-1/name:Radeon i2c bit bus 0x91
/sys/bus/i2c/devices/i2c-2/name:Radeon i2c bit bus 0x92
/sys/bus/i2c/devices/i2c-3/name:Radeon i2c bit bus 0x93
/sys/bus/i2c/devices/i2c-4/name:Radeon i2c bit bus 0x94
/sys/bus/i2c/devices/i2c-5/name:Radeon i2c bit bus 0x95
/sys/bus/i2c/devices/i2c-6/name:Radeon i2c bit bus 0x96
/sys/bus/i2c/devices/i2c-7/name:Radeon i2c bit bus 0x97

我能够使用该ddccontrol工具通过 I²C 与 HDMI 连接的显示器“对话”,例如调整背光亮度。因此,I²C 绝对有效。

相关内容