在Linux中设置一个ACPI字段

问题描述:

我有一个上网本,为了我的喜好早点运行这个风扇。我发现了一个只有Windows的解决方案来减少风扇噪音,但我在这台电脑上使用了Ubuntu。在Linux中设置一个ACPI字段

在Windows解决方案中,这个家伙正在使用一个名为笔记本硬件控制(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) 

我会说实话,我是在我的脑袋上这一点,但如果有人可以轻移我在正确的方向,我会非常感谢!

不知道这是否正是你想要的,但你看看lm_sensors? 他们支持hw monoriting与内核驱动程序,但提供了一个用户空间库。

+0

我已经测试过lm_sensors,但很遗憾,我的电脑没有显示任何粉丝,它也不允许我设置trip_points。敖从我收集lm_sensors不会帮助,可悲:(谢谢你的建议! – gaqzi 2010-05-03 18:28:40

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

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

不过,踢球者是nhc.exe被混淆了,并且所有这些类都不可见。所以你不能简单地运行csc.exe并引用nhc.exe。我并不确定,但在我看来,只能在nhc.exe的上下文中运行该代码,然后执行特殊编译来处理它。

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

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 
    

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