sytzz 写了:riverzhou 写了:如果,遇到死机,
那就在启动参数里加上 intel_idle.max_cstate=1 ,对比一下稳定性,
然后在论坛上给我个反馈,或者直接在我的 github 的 issues里反馈也可以。
CPU的C6睡眠,开和不开,待机功耗差一倍。
好的,十分感谢,周末我折腾一下试试~昨天刚把内核编译好,这次编译很顺畅。目前磁盘空间有些不足,需要点时间调整一下。
update一下几个信息。
首先,说明一下内核的代码基,现在工作都基于upstream的4.4.y内核branch(当前是4.4.49)。
1,有关高版本内核。
4.8.y 4.9.y 4.10-rc8都测试过,甚至还包括intel自己维护的i915分支。
都有两个共同的问题。
1)触摸屏初始化失败:
hid-multitouch 在初始化 ATML1000 的时候错误,原因不详。
2)蓝牙模块无法使用:
hciattch到uart的时候timeout,原因不详。
此外,看不到任何明显的收益(特别是依旧无法驱动AXP288电源芯片),
完全负收益,所以不再投入精力研究。
以下的内容都基于4.4.y内核
2,有关cstate
现在完全不限制cstate短期内也不会死机,但是长期稳定性测试中还是会挂掉。
目前我推荐的方案是intel_idle.max_cstate=2。
这是让CPU进入C6但是整个MOD不进入C6,目前测试下来还很稳定没什么异常。
CPU进入C6之后,待机功耗下降非常多(接近于完全关闭CPU的核心)。
是不是能进C6N(cstate2)差别很大,更高级的cstate(C6S)差别很小。
所以,如果没有异常,推荐 intel_idle.max_cstate=2 ,否则推荐 intel_idle.max_cstate=1 (这个基本很安全稳定)
至于GPU,现在RC6是默认开的,很正常很安全,待机功耗下降有一半也许更多(仅GPU部分)
3,有关背光
现在有一个新的放是解决背光问题,
不打patch加入直接操控寄存器的代码,而是让i915原生的驱动去控制背光。
但是这里有两个问题。
1)初始化顺序的问题。
原生的驱动之所以无法关闭背光,是因为其驱动初始化的时候,GPIO驱动还没完全准备好,
所以,当他通过I2C总线尝试去管理背光芯片的时候,会注册失败。
解决方案就是,把I915驱动以模块方式编译,并且在i2c的驱动(也编译成模块)加载之后再加载,
这样的话,原生的i915可以直接管理背光。
好处就是,在低亮度的时候,屏幕有很好的稳定性(否则,会有波纹。但是最大亮度时没问题)
2)当I915驱动以模块方式加载之后
fastboot流程会无效(就是说和不用fastboot模式一样),启动后会黑屏,第一次休眠后正常(老问题了)。
这是个BUG,原因是,i915在初始化DSI的时候,没有做状态检测,之前EFI初始化过一次,然后他再初始化一次,状态就异常了。
有一个笨拙的方案,是开机先进BIOS,再从BIOS菜单里选择启动系统(晕)。
理想的解决方案,是给I915驱动打个patch(这个patch在4.9.2的内核更新里),我把这个patch backport 到了4.4.49里,目前工作正常。
4,现在最头痛的问题还是电源问题(最后一个重要的问题)
看不到电池状态,也看不到充电状态。
内核启动的时候,会有个i2c读错误,然后看不到任何axp芯片驱动初始化的信息(驱动已加入内核)。
分析下来是两个可能。
1)我的板子的硬件坏了
2)内核驱动的初始化顺序问题,在I2C去读芯片信息的时候,芯片还没初始化完成。
我的机器的信息是:
[root@miix28 kernel]# dmesg |grep -i i2c
[ 1.800279] i2c i2c-0: i2c read failed
[ 1.827626] i2c i2c-0: i2c read failed
[ 1.851106] i2c i2c-0: i2c read failed
[ 1.880925] i2c i2c-0: i2c read failed
[ 2.148913] i2c i2c-0: i2c read failed
[root@miix28 kernel]# dmesg |grep -i axp
(空的)