代码之家  ›  专栏  ›  技术社区  ›  gaqzi

在Linux中设置ACPI字段

  •  1
  • gaqzi  · 技术社区  · 16 年前

    我有一个上网本,它运行风扇有点早,为我的喜好。我已经找到了一个Windows版的解决方案来减少风扇噪音,但是我在这台计算机上使用Ubuntu。

    在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)
    

    老实说,我对这件事不感兴趣,但如果有人能把我推向正确的方向,我会非常感激的!

    3 回复  |  直到 16 年前
        1
  •  5
  •   Lekensteyn    14 年前

    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/调用 . 我猜你是用 _SP 因此被 \_SB :

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

      cat /proc/acpi/call
      

      读取后,该值将被清除,因此如果以后要重新使用该值,请确保将输出保存在某处。

        2
  •  0
  •   zdav    16 年前

    不确定这是否正是你想要的,但是你查过了吗 lm_sensors ? 它们支持带有内核驱动程序的hw单写,但提供了一个用户空间库。

        3
  •  -2
  •   Cheeso    15 年前

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

    不过,您不必插入.DLL,而是将实际的C#代码放入一个特殊文件夹;显然nhc.exe在nhc.exe启动时会动态编译并运行此代码。如果所有这些都是真的,你应该能够编写自己的应用程序,使用 ACPI.FIELD.Read Write 调用,将其编译为exe,指定nhc.exe作为引用。

    但更关键的是,nhc.exe被混淆了,并且所有这些类都不可见。所以你不能就这么跑 csc.exe 并引用nhc.exe。我不确定,但在我看来,只有在nhc.exe的上下文中才能运行该代码,nhc.exe会执行特殊的编译来处理它。

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