在Linux中设置ACPI字段

时间:2010-05-03 16:08:54

标签: linux acpi

我有一台上网本可以让我的爱好早一点运行。我找到了一个仅限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)

我会说实话,我对此很满意,但如果有人能够朝着正确的方向推动我,我将非常感激!

3 个答案:

答案 0 :(得分: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
    

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

答案 1 :(得分:0)

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

答案 2 :(得分:-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.exe执行特殊的编译来处理它。

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