我正在编写一个需要在root xyla 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"
Run Code Online (Sandbox Code Playgroud)
...到下面的功能......
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);
}
Run Code Online (Sandbox Code Playgroud)
此函数每秒执行一次:
一切都很完美.我在我的应用程序中显示数字,我发现它们的行为完全符合我的预期.核心速度通常彼此不同,当核心加热太多时(我也读取CPU温度),速度会降低.所以我相信这些数字正在被正确阅读.
现在这就是神秘的开始.如果我打开一个adb shell到我的设备,然后键入"su"作为我的第一个命令.我可以毫无问题地导航到"/ sys/devices/system/cpu/cpu0/cpufreq /"目录.但是,如果我尝试导航到核心1,2或3的目录.我得到"没有这样的文件或目录".我很困惑.
编辑:我刚刚使用在设备上运行的终端仿真器进行了测试,发现我可以访问所有核心的目录.所以它的adb shell表现得很奇怪.
编辑:只是在预感我试过su -c "ls cpu1/cpufreq/"它工作,我看到了cpu1目录.所以也许在adb shell中输入su 并没有给我超级用户访问权限?
编辑:天啊!我只是su -c "ls cpu1/cpufreq/"一遍又一遍地执行,发现有时它工作(即我看到目录列表),有时它没有(即我没有这样的文件或目录)!
编辑::根据这个文件,似乎目录是虚拟的.有一次它说" cd/sys/devices/system/cpu#一个虚拟目录被设备驱动程序看到 ".嗯,也许我搞砸了设备驱动程序?
您看到目录消失的原因是cpu 热插拔。这是 Linux 内核功能,允许操作系统禁用 cpu 上的特定内核以节省电量。默认 Android 内核设计为在系统负载不需要计算时禁用几乎所有手机上的核心 1-3。当这些核心被禁用时,相应的目录也会被删除。
因此,您可以推断,如果该目录存在,则核心正在以指定的频率运行。如果不存在,则内核被禁用,因此没有频率。
| 归档时间: |
|
| 查看次数: |
326 次 |
| 最近记录: |