1

我有一个上网本,它运行风扇有点早,以符合我的喜好。我找到了一个仅限 Windows 的解决方案来降低风扇噪音,但我在这台计算机上使用的是 Ubuntu。

在 Windows 解决方案中,这个人正在使用一个名为 Notebook Hardware Control (NHC) 的程序,据我所知,该程序正在读取和设置 ACPI 值。( http://hpmini110c.siteboard.eu/f3t31-lueftersteuerung-fuer-den-mini.html,7z文件中的相关源代码,其中的.cs文件是一个C#文件,其中包含设置风扇的逻辑上)

我想找到一种在 Linux 环境中复制的方法是:

# Where the value is being set
write = ACPI.FIELD.Write("_SP.PCIO.SBRG.ECO.CTPM", 40);
# Reading the temperature
int temp1 = 0;
bool _tmp = APCI.FIELD.Read("_SB.PCIO.SBRG.ECO.TPM1", ref temp1)

老实说,我对此感到不知所措,但是如果有人可以将我推向正确的方向,我将不胜感激!

4

3 回答 3

5

Michal Kottman 创建了一个内核模块,允许您执行此类 ACPI 命令。它是为调用命令来切换视频卡而设计的,但也可以用于其他目的。它可以从Github获得,安装说明如下:

  1. 安装与当前内核匹配的内核头文件
  2. 获取源代码并构建它

    git clone git://github.com/mkottman/acpi_call.git
    cd acpi_call
    make
    
  3. 加载模块:

    /sbin/insmod acpi_call.ko
    

    如果一切顺利,您现在应该有一个/proc/acpi/call“文件”。

  4. 要执行命令,请将其写入/proc/acpi/call. 我猜您打错字了_SP,因此将其替换为\_SB

    echo '\_SB.PCIO.SBRG.ECO.CTPM' > /proc/acpi/call
    
  5. 要获取此命令的结果,请检查您的内核日志 ( dmesg) 或阅读结果:

    cat /proc/acpi/call
    

    读取后,该值将被清除,因此如果您想稍后重新使用它,请务必将输出保存在某处。

于 2011-09-12T15:32:10.457 回答
0

不确定这是否正是您想要的,但您是否研究过lm_sensors?它们支持使用内核驱动程序进行 hw monoriting,但提供了用户空间库。

于 2010-05-03T16:17:42.620 回答
-2

Reflector说 NHC.exe 是一个托管程序集,它包含提供的类ACPI.FIELD.Write()等等ACPI.FIELD.Read()。NHC 的作者在 chm 文件中描述了如何为特定的硬件类型(例如插件模型)编写包含对这些事物的调用的您自己的类。

但是,您无需放入 .DLL,而是将实际的 C# 代码放入一个特殊的文件夹中;显然 nhc.exe 在 nhc.exe 启动时动态编译并运行此代码。如果所有这些都是真的,您应该能够编写自己的应用程序来使用ACPI.FIELD.ReadWrite调用,将其编译成 exe,指定 nhc.exe 作为参考。

然而,更重要的是,nhc.exe 被混淆了,所有这些类都是不可见的。所以你不能简单地运行csc.exe和引用 nhc.exe。我不确定,但在我看来,只能在 nhc.exe 的上下文中运行该代码,它会进行特殊的编译来处理它。

另一个坏消息是 NHC 的发展似乎已经停止。论坛网站已经死了,最后一次更新是从 2007 年开始的。

于 2010-11-30T16:11:50.040 回答