linux 写入CPU 0/CPU频率/CPU信息最小频率:打开失败:EACCES(权限被拒绝)

8ftvxx2r  于 2023-01-20  发布在  Linux
关注(0)|答案(2)|浏览(261)

我正尝试以编程方式设置一个根电话的最小/最大时钟速度。根据响应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
遗憾的是,报告显示文件未更改为“1512000”。

**编辑:**这个问题现在已经偏离了原来的标题,所以我将最后一次编辑作为a new question altogether发布。

mqkwyuun

mqkwyuun1#

不要将系统文件的权限更改为全局可读/可写(实际上不应该这样做),而是尝试使用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.com/p/roottools/wiki/Usage .

iyr7buue

iyr7buue2#

如果您以root用户身份遇到此错误,则可能需要尝试以下命令:

cpufreq-set -c 0 --max 124200

您还可以使用-c指定不同的内核,使用-g指定调控器

相关问题