编写cpu0 / cpufreq / cpuinfo_min_freq:打开失败:EACCES(权限被拒绝)

时间:2014-11-13 14:21:27

标签: android linux android-securityexception

我试图以编程方式在root电话上设置最小/最大时钟速度。根据对this question的回复提出的建议,我发现some documentation表示我将数据写入:

/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));  

我不确定接下来我能尝试什么。

编辑:根据mrPjer的建议,我运行了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

遗憾的是,据报道该文件未改变为&#34; 1512000&#34;。

编辑:此问题现在已经从原始标题中略微偏离,因此我要将最后一次修改发布为a new question altogether

1 个答案:

答案 0 :(得分:0)

不要将系统文件的权限更改为全局可读/可写(您实际上不应该这样做),而是尝试使用root访问权直接编写文件。

您可以在su调用中使用echo而不是chmod轻松完成此操作。 E.g。

Runtime.getRuntime().exec("su -c \"echo 1234 > /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq\"");

exec调用还应返回一个Process对象,您可以在其上调用waitFor(),它将为您提供调用的返回代码。如果有任何不同于零,则出现问题。

最后,确认您确实获得root访问权限 - 在执行su请求时,会弹出一个对话框,要求您允许该操作吗?

此外,由于您正在编写支持root的应用程序,请查看RootTools库:https://code.google.com/p/roottools/wiki/Usage