Я пишу приложение, которое должно работать на корневой 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);
}
Эта функция получает выполняется один раз в секунда:
Все это работает отлично. Я показываю номера в своем приложении, и я вижу, что они ведут себя точно так, как я ожидал. Частоты ядра часто отличаются друг от друга, и когда ядро слишком сильно нагревается (я тоже читаю температуру процессора), скорость уменьшается. Поэтому я уверен, что эти цифры читаются правильно.
Теперь вот где начинается тайна. Если я открою оболочку adb для своего устройства, тогда введите «su» в качестве моей первой команды. Я могу без проблем перейти в каталог «/ sys/devices/system/cpu/cpu0/cpufreq /». Но если я попытаюсь перейти к каталогам для ядра 1,2 или 3. Я получаю «Нет такого файла или каталога». Я сбит с толку.
EDIT: Я просто проверял, используя эмулятор терминала, который работает на самом устройстве, и обнаружил, что я мог получить доступ к директории для всех ядер. Итак, его оболочка adb ведет себя странно.
EDIT: Только что я придумал su -c "ls cpu1/cpufreq/"
, и это сработало, я увидел каталог cpu1. Так что, может быть, набрав su в оболочке adb не, дайте мне доступ к суперпользователю?
EDIT: OMG! Я просто выполнял su -c "ls cpu1/cpufreq/"
снова и снова, чтобы найти, что иногда это сработало (т. Е. Я увидел список каталогов), а иногда и не сделал (т. Е. У меня не было такого файла или каталога)!
EDIT:: По this document, оказывается, что каталоги виртуальный. В какой-то момент в нем говорится: «cd/sys/devices/system/cpu # виртуальный каталог, отображаемый драйверами устройств». Хм, может быть, я испортил драйверы устройств?
Root-доступ не распространяется на ваш код Java или что-либо в ваших процессах приложений, поэтому, по-видимому, он не имеет отношения к вашей цели. Все, что вам удалось изменить в/sys, должно быть исправлено при перезагрузке. –