现在的Soc(System on )性能虽然越来越强,但是在控制手机发热和功耗上效果却并不明显。Soc是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上;从广义角度讲,Soc就是一个微小型系统,如果说中央处理器(CPU)是大脑,那么SoC就是包括大脑、心脏、眼睛和手的系统。
在手机性能过剩的情况下,我们可以手动调整Soc参数,在不影响手机日常使用的前提下,来降低CPU和降低降温阀值,这样可以很好的控制手机发热。同样将下载的ROM包用解压工具解压,一般Soc文件都保存在system文件夹中,具体目录是“/system/etc/init.post_boot.sh”和“/system/etc/init.qcom.post_boot.sh”。而文件我们可以通过记事本直接打开,由于HTC One是采用的msm8960平台的Soc,所以我们要搜索“case "$target" in”,并更改字样为:
case "$target" in
"msm8960")
boot文件可以直接利用写字板打开
要修改Soc,首先应该着手考虑的就是CPU,毕竟它是手机运行的核心,也是日常使用最容易发热的部件。要修改Soc需要在Linux环境中进行(如果没有安装Linux系统,也可以在Windows系统中安装虚拟机进行编译,不过具体的操作同我们反编译后用Notepad++修改完全相同。而且由于没有改变文件类型,在修改后我们直接选择保存即可,无需进行专门的打包,或者签名操作。然后利用“厨房”工具,直接将修改后的ROM打包重新刷入手机即可。
HTC One使用的是高通骁龙600 CPU,高通骁龙600虽然性能强悍,但是耗电相对也比较严重,在进行省电优化时着重需要调整控制CPU的两个调速器:ondemand(按需)以及msm-dcvs(msm动态频率调节)。
调整ondemand(按需)可以让CPU的执行率大大提高,效率上也能得到优化。而调整msm-dcvs(msm动态频率电压调节)可以让CPU更加合理的运行,通过调整它可以很好的控制待机耗电。
在进行省电和调整时,需要对CPU的四个核心进行专门的设置,这些数据的参数,都是进过仔细验证的,可以保证手机流畅运行的情况下,最大程度的节省电量大家可以放心修改,具体的方法如下:
省电设置:
echo "ondemand" > /sys/deves/system/cpu/cpu0/cpufreq/scaling_governor
echo "ondemand" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo "ondemand" > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo "ondemand" > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo 90 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold
echo 50000 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_rate
性能设置:
使用Ondemand
echo "ondemand" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "ondemand" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo "ondemand" > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo "ondemand" > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo 50 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold
echo 30000 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_rate
直接使用msm-dcvs
echo "msm-dcvs" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "msm-dcvs" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo "msm-dcvs" > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo "msm-dcvs" > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
大神技巧:修改Soc控制手机发热量
现在的,虽然性能越来越强悍,但是发热却也同样越来越严重,特别是像HTC One这样使用金属材质打造的手机,因为机身导热性更好,相同温度下同其他材质相比用户会感觉机身温度更高,所以控温显得更为重要。对温度的控制我们依然可以通过修改Soc来实现。
GPU频率调节:
HTC One所配备的GPU是Adreno 320 ,性能虽然强悍,但是发热却同样不容小视,而控制GPU发热唯一有效的方式就是降频,经过长时间的试验,发现可以将原来400M的频率降低到320MHz,在不影响手机性能的同时,让手机温度明显降低,具体的操作如下:
echo 320000000 > /sys/devices/platform/kgsl-3d0.0/kgsl/kgsl-3d0/max_gpuclk
使用第三方内核
由于HTC的官方内核已经加密,所以无法通过直接编译内核进行降温操作,不过可以使用第三方的开源内核进行编译来实现相应的降温操作,这里以ElementalX内核为例,告诉大家如何进行降温阀值的修改。
EX内核降温阀值总共四个,每一个可以根据自己的需要进行专门的设置,而且ElementalX内核有专门的温度监控机制,可以根据手机温度自动调整CPU频率。
为了很好地控制手机温度,建议从46摄氏度开始进行频率限制,将CPU频率降到1242MHz(ElementalX内核L2频率为1242MHz,所以1242MHz是平衡点),54摄氏度降频到918MHz(通过实测1242MHz满载时就很难超过54摄氏度了),75摄氏度降为702MHz,85摄氏度降为度384MHz。具体操作如下:
降温阀值:
echo 46,54,75,85 > /sys/module/msm_thermal/parameters/limit_temp_degC
降温对应频率:
echo 1242000,918000,702000,384000 > /sys/module/msm_thermal/parameters/limit_freq
大神技巧:超频二级缓存和GPU让手机性能更为强
超频二级缓存
CPU会直接把最常用的数据存放在缓存中,在需要时提取,手机在进行一些复杂运算时,缓存就能起到很大作用。而高通CPU的二级缓存频率普遍低于CPU频率,这就让二级缓存成为了CPU性能在发挥时的一个瓶颈。对手机CPU的二级缓存进行超频,可以很大程度的提升手机性能。
二级缓存超频后性能提升效果图
而对二级缓存进行超频的操作也相对比较简单,首先按照上期的内核编译法,将内核进行编译,然后在在内核源码中,找到“\arch\arm\mach-msm\acpuck-8064.c”文件并在其中搜索:“static struct l2_level l2_freq_tbl[] __initdata = {”,然后找到第14档,然后将14档对应的CPU频率改为1134MHz,将15档对应的CPU频率改为1242MHz或1296MHz,这样设置可以在需要CPU满负荷工作时更加稳定,二级缓存性能也能全面提升,当CPU空闲时也能更加节电。
然后将内核代码中“1566,1674,1728”的L2字符后的数字改为“15”并保存即可,这样对二级缓存超频的操作就结束了。经常抱怨CPU性能不够的用户,在执行这个操作之后可以较好地提升手机性能。
修改二级缓存时一定要非常细心
GPU超频
虽然HTC One使用的GPU Adreno 320性能很强大,但是对于1080P的屏幕分辨率,400MHz的Adreno 320还是会多少有些吃力,要解决这个问题,最好的方法还是对GPU进行超频。
不同频率的GPU跑分结果
从测试图中我们可以看出,GPU在保持在450MHz时,性能最为理想。为GPU超频的具体方法和为二级缓存超频没有什么太大的差别,都是通过编译内核实现的。
首先将内核进行编译,然后在内核源码的“\arch\arm\mach-msm”下找到“board-m7-gpu.c”文件,打开并搜索“.gpu_freq = 400000000”,然后将“400000000”改为“450000000”。再找到“clock-8960.c文件”,打开并搜索“static struct clk_freq_tbl clk_tbl_gfx3d_8960[] = {同时在值“F_GFX3D(400000000, 2, 1, 2)”下面加入代码“F_GFX3D(450000000, pll15, 1, 2)”。继续搜索“static unsigned long ax_gfx3d_8064[MAX_VDD_LEVELS] __initdata = {”,找到“[VDD_DIG_HIGH] = 400000000”把“400000000”改成“450000000”。最后搜索“static struct rcg_clk gfx3d_clk = {”并找到值“VDD_DIG_FMAX_MAP3(LOW, 128000000, NOMINAL, 300000000, HIGH, 400000000)”同样改为“450000000”最后保存并将内核编译就可以完成GPU的超频了。