写入嵌入式控制器寄存器在Ubuntu 14.04

问题描述:

我一直在努力调整我的笔记本电脑,我可以通过欧共体的地址20 (0x14)设置为28 (0x1C)41 (0x29)写入嵌入式控制器寄存器在Ubuntu 14.04

之间的值在Windows实现(风扇转速我从这个文件中得到这些数字:https://github.com/hirschmann/nbfc/blob/master/Configs/HP%20ENVY%20m6%20Sleekbook.xml

当我在Windows中使用它时,它工作正常。所以我试图在Ubuntu 14.04中复制它。下面是我的尝试:

  1. 首先我写sudo modprobe ec_sys write_support=1这让/sys/kernel/debug/ec/ec0/io可探测的ec_sys模块。事实证明,如果我省略了write_support=1,我会在下一步收到“权限被拒绝”错误。
  2. 我试着运行printf '\x1C' | sudo dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=20 count=1 conv=notrunc,以便我可以将0x1c (28)写入EC的地址20 (0x14)并调整风扇转速。
  3. 我检查是否上述的寄存器被通过键入sudo od -t x1 /sys/kernel/debug/ec/ec0/io,然后输出更新:

    0000000 00 00 00 00 00 01 50 04 00 00 ff 10 00 33 13 05 0000020 00 19 24 19 1c 00 ff ff ff ff ff ff 00 00 00 00 ...

现在,它可能会出现我是能够更新该寄存器的,但它不会影响风扇速度。此外,当我试图在后面写41 (0x29)到相同的地址时,它并没有改变这个值。

配置文件(为此我提供了一个链接)说,读取寄存器的风扇速度在地址17 (0x11),所以我期望这两个地址的内容是相同的(这是这种情况在Windows中)。不过,我注意到地址17与地址19具有相同的值。当我试图写这封邮件时,我无法做出任何改变。我非常困惑。

事实证明,第15个寄存器负责启用写入,因此我首先将0D写入该位置,如Notebook FanControl所做的那样,然后开始如上所述控制风扇速度。下面是完整的代码,如果任何人有兴趣(它适用于惠普Envy m6系列笔记本电脑,也应该首先安装光电传感器)

sudo modprobe -r ec_sys 
sudo modprobe ec_sys write_support=1 
echo -n -e "\015" | sudo dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=15 count=1 conv=notrunc 2> /dev/null 
echo "Fan control enabled" 
while [ 1 ]; do $(if [ "0$(bc -q <<< $(echo "`sensors -A -u | grep "temp1_input" --max-count=2 | tail -n1 | cut -d 'n' -f 2 | tr -cd '\.'`-0 > 54");)" -eq 1 ]; then echo -n -e "\051"; else echo -n -e "\031"; fi | sudo dd of="/sys/kernel/debug/ec/ec0/io" bs=1 seek=20 count=1 conv=notrunc 2> /dev/null); sleep 1; done 
+0

哦,我的天。我记得我正在急着制造可怕的笔记本电脑,而没有经常关闭,但仍然......这个代码的唯一优点是它的工作原理。 – kubuzetto 2017-05-30 04:52:22