+-
写cpu0cpufreqcpuinfo_min_freq:打开失败。EACCES (Permission denied)

我正试图在一部已root的手机上以编程方式设置minmax时钟速度。根据一个建议,在对 这个问题我发现 一些文件 这说明我把数据写到。

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

我不知道下一步该怎么做。

EDIT: 按照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

遗憾的是,这个报告的文件没有变化,为 "1512000"。

EDIT: 这个问题现在已经偏离了原来的标题 所以我把最后的编辑发到这里来 另一个问题.

0
投票

与其将系统文件的权限改为全局可读可写(你真的不应该这样做),不如尝试直接使用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请求时,是否会弹出一个对话框要求你允许该操作?

另外,由于你正在编写启用root的应用程序,请看一下RootTools库。https:/code.google.comroottoolswikiUsage.