[分享]MTK满血工具MTKboost及程序源码
2017-04-20 03:57:27 -0500

csngmap语:这是高通吧吧主ioncannon写的MTK满血工具MTKboost,功能相当给力,作者时间有限不打算研究下去了,开源供有兴趣朋友试试

*********************
不root控制的原理是利用了MTK平台的perfservice服务
一般6595之后的机器都会支持(具体看/system/lib/下有没有libperfservice.so和libperfservicenative.so)
6595的话,Flyme 5之后似乎是支持的,之前的旧版不行。
原理上参考https://yq.aliyun.com/articles/26696 这篇文章
个人只是做了一点微小的工作,抓log试了几个针对6797的参数

因为心血来潮用了一晚上随手写的,java部分借用了之前自己的程序,所以比较糙请不要见笑哈哈
源码如下:
*********************
源码说明:
其中Native文件夹是C写的原生代码部分。
-------------------

*注意,频率单位均为kHz
Native界面的3个函数:
resetCPU();取消所有的profile设置
setCPU(int bigNum, int bigFreq, int littleNum, int littleFreq);
旧版API:设置CPU大小核上线数量和频率
对于三集群的MT6797,只能设置高频A53 cluster和低频A53 cluster,无法控制A72
bigNum: 大核心上线数量
bigFreq:大核心频率
littleNum:小核心上线数量
littleFreq:小核心频率
对于MT6795这类,8个核心全部为小核心,则需要设置littleNum=8才能8核全开
setCluster(int cmd, int p1, int p2, int p3, int p4);
新版API:
cmd为命令,p1,p2, p3, p4为参数
cmd:2 设置最少大小核数,对于6797为高配A53和低频A53
参数2个 - param_1:大核数,param_2:小核数
例如: setCluster(2, bigNum, littleNum,0,0);
cmd:3 设置最多大小核数,对于6797为高配A53和低频A53
参数2个 - param_1:大核数,param_2:小核数
例如: setCluster(3, bigNum, littleNum,0,0);
cmd:8 设置GPU最低频率级别
参数1个 - param_1:频率级别,级别越大,频率越高
例如: setCluster(8, gpu, 0,0,0);
由于上述文章和目前可供下载到的代码不是很新,并不支持MT6797三丛集
下面几个参数是文章中没有提供的,个人通过在6797平台上抓log试出来的
cmd:17 设置特定cluster的最小频率
参数2个 - param_1:cluster序号,param_2:频率
对于MT6797:
低频A53: cluster 0
高频A53: cluster 1
A72: cluster 2
例如:
setCluster(17, 0, litteSFreq,0,0);
setCluster(17, 1, litteFreq,0,0);
setCluster(17, 2, bigFreq,0,0);
cmd:18 设置特定cluster的最大频率
参数2个 - param_1:cluster序号,param_2:频率
对于MT6797:
低频A53: cluster 0
高频A53: cluster 1
A72: cluster 2
例如:
setCluster(17, 0, litteSFreq,0,0);
setCluster(17, 1, litteFreq,0,0);
setCluster(17, 2, bigFreq,0,0);
cmd:23 设置整体系统性能
MT6797利用此命令去开启A72
参数1个 - param_1:系统性能级别,貌似是30到1000的整数
例如:
setCluster(23, 800, 0, 0, 0); //开启8个A53+1个A72,满频
setCluster(23, 1000, 0, 0, 0); //开启8个A53+2个A72,满频(安兔兔模式)
====
目前尚无发现直接对A72 cluster的核心数进行设置的命令
因此先采用cmd 23开启需要数量的A72,再对低频和高频A53的核心数进行限制
最后在对3个cluster的频率进行限制
例如:
//开启1个A72
if(bigN==1){
//强开8A53+1A72
setCluster(23, 800,0,0,0);
//设置低频高频A53最小核心数
setCluster(2, littleN,littleSN,0,0);
//设置低频高频A53最多核心数
setCluster(3, littleN,littleSN,0,0);
//18: 设置3个cluster的最大频率
setCluster(18, 0,litteSF* 1000,0,0);
setCluster(18, 1,litteF* 1000,0,0);
setCluster(18, 2,bigF* 1000,0,0);
//17: 设置3个cluster的最小频率
setCluster(17, 0,litteSF* 1000,0,0);
setCluster(17, 1,litteF* 1000,0,0);
setCluster(17, 2,bigF* 1000,0,0);
}
if(bigN ==2){
//强开8A53+2A72,安兔兔模式
setCluster(23, 1000,0,0,0);
//设置低频高频A53最小核心数
setCluster(2, littleN,littleSN,0,0);
//设置低频高频A53最多核心数
setCluster(3, littleN,littleSN,0,0);
//18: 设置3个cluster的最大频率
setCluster(18, 0,litteSF* 1000,0,0);
setCluster(18, 1,litteF* 1000,0,0);
setCluster(18, 2,bigF* 1000,0,0);
//17: 设置3个cluster的最小频率
setCluster(17, 0,litteSF* 1000,0,0);
setCluster(17, 1,litteF* 1000,0,0);
setCluster(17, 2,bigF* 1000,0,0);
}
====================================
目前的问题:
0. 关闭屏幕会进入低功耗模式,清除原有的设置,这是系统限制。

1. MTK或者厂家预先定义了部分场景,比如微博强制不开A72
在进入这些app后,perfservice的status会被该app的预定义场景覆盖
比如好好的满血状态,进微博A72就下线了,回桌面又会上线。
2. 经过测试,cmd:23 设置整体系统性能 中的参数=1000(安兔兔模式)具有最高优先级
因此满血状态可以有效保持。
但在MT6797上,通过新API设置成各个cluster的频率和上线数量后,在MTKboost APP内没有问题,但返回桌面时系统似乎会通过perfservice重新设置A53/A72的数量和频率,导致设置在MTKboost APP外变的无效。(优先级不如安兔兔模式来的高)
本文来源: csngmap资源分享大本营版权所有 (开玩笑啦……),磨友转载时请以链接形式注明作者和原始出处…csngmap分享、发表资源也不容易,大家且转且珍惜,至少留个言也好,谢谢合作!
«Newer      Older»

----Comments(4)----
WRL at 2017-07-27 09:14:
http://www.procedurego.com/article/128372.html
这貌似是新api参数的网址?
【飛龍在天】 (@891622172) | @ at 2017-04-20 11:33:
@csngmap只是好奇问问
csngmap (@csngmap) | @ at 2017-04-20 04:06:
@891622172,一般人用不着的
【飛龍在天】 (@891622172) | @ at 2017-04-20 04:00:
还是不懂有什么用
Comment:
Name:
Back to home 安卓软件 /cat/41116