- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一个应用程序,需要在已获得 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/
我是一名优秀的程序员,十分优秀!