我正在尝试以编程方式在有根手机上设置最小/最大时钟速度。根据针对此问题提出的建议,我找到了一些文档,建议我将数据写入:
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
和
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
我已经有
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在我的清单中。我也可以成功读取这两个文件。当我尝试写入文件时,我得到了open failed: EACCES (Permission denied)
.所以我试了...
Runtime.getRuntime().exec("su -c "chmod 777 /sys/devices/system/cpu/cpu0/cpufreq/*"");
。执行没有错误,但这没有区别。当我执行这两行中的第二行时,会发生错误:
File file = new File("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
我不确定接下来可以尝试什么。
编辑:按照Pjer先生的建议,我运行了adb shell。我输入了su
并导航到/sys/devices/system/cpu/cpu0/cpufreq
.然后我打字
chmod 777 scaling_max_freq
并通过键入确认已接受权限
ls -l scaling_max_freq
果然被列为-rwxrwxrwx
.然后我打字
echo 124200 > scaling_max_freq
然后
cat scaling_max_freq
可悲的是,这报告说该文件未更改为"1512000"。
编辑:这个问题现在已经偏离了原来的标题,所以我将把最后的编辑作为一个新问题发布。
与其将系统文件的权限更改为全局可读/可写(您真的不应该这样做),不如尝试使用 root 访问权限直接编写文件。
您可以通过在 su 调用中使用 echo 而不是 chmod 来轻松完成此操作。
例如Runtime.getRuntime().exec("su -c "echo 1234 > /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq"");
exec 调用还应该返回一个 Process 对象,您可以在该对象上调用 waitFor(),该对象将为您提供调用的返回代码。如果这与零有任何不同,则出了问题。
最后,确认您确实获得了root访问权限 - 执行su请求时,是否弹出一个对话框要求您允许该操作?
另外,由于您正在编写启用根的应用程序,请查看 RootTools 库:https://code.google.com/p/roottools/wiki/Usage。
root 身份收到此错误,则可能需要尝试以下命令:
cpufreq-set -c 0 --max 124200
同样,您可以使用 -c 指定不同的内核,并使用 -g 指定调速器