gpt4 book ai didi

android - 对 root 手机上的目录的访问不一致

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:54:49 25 4
gpt4 key购买 nike

我正在编写一个应用程序,需要在已获得 root 权限的 Sony xperia z(Android 4.4.2,内部版本号 10.5.A.0.230)上运行。该应用程序通过传递以下字符串之一来读取四个内核的内核速度...

"/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"
"/sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq"
"/sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq"
"/sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq"

...到下面的函数...

   long sysfilenum(String str)
{
String text = null;
try
{
File file = new File(str);

BufferedReader br = new BufferedReader(new FileReader(file));
text = br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
return Long.valueOf(text);
}

这个函数每秒执行一次:

这一切都很完美。我在我的应用程序中显示数字,我发现它们的行为与我预期的完全一样。核心速度通常彼此不同,当核心过热时(我也读取了 CPU 温度),速度会降低。所以我相信这些数字被正确读取了。

现在这就是谜团开始的地方。如果我为我的设备打开一个 adb shell,然后输入“su”作为我的第一个命令。我可以毫无问题地导航到“/sys/devices/system/cpu/cpu0/cpufreq/”目录。但是如果我尝试导航到核心 1,2 或 3 的目录,我会得到“没有这样的文件或目录”。我很困惑。

编辑:我刚刚使用在设备本身上运行的终端仿真器进行了测试,发现我可以访问所有内核的目录。所以它的 adb shell 行为异常。

编辑: 凭直觉我尝试了 su -c "ls cpu1/cpufreq/" 并且成功了,我看到了 cpu1 目录。所以也许在 adb shell 中输入 su 没有给我 super 用户访问权限?

编辑:天哪!我只是一遍又一遍地执行 su -c "ls cpu1/cpufreq/" 发现有时它有效(即我看到了目录列表)有时它没有(即我没有这样的文件或目录)!

编辑::根据this document , 这些目录似乎是虚拟的。有一次它说“cd/sys/devices/system/cpu # 设备驱动程序可见的虚拟目录”。嗯,也许我搞砸了设备驱动程序?

最佳答案

您看到目录消失的原因是cpu hotplugging。这是 linux 内核功能,它允许操作系统禁用 cpu 上的特定内核以节省电量。默认的 Android 内核设计为在系统负载过高时禁用几乎所有手机上的核心 1-3 以致于计算不需要它们。当这些核心被禁用时,相应的目录也会被删除。

因此,您可以推断,如果该目录存在,则内核正在以指定频率运行。如果不存在,则内核被禁用,因此没有频率。

关于android - 对 root 手机上的目录的访问不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26973590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com