Как получить конкретную информацию об устройстве Android из файла "/proc/cpuinfo"?
Как я могу разобрать /proc/cpuinfo
виртуальный файл моего планшета Android, чтобы получить информацию о ядре процессора и тактовой частоте? Мне не нужна вся информация, предоставленная вышеуказанным файлом; только эти два бита. Может кто-нибудь, пожалуйста, помогите?
2 ответа
Не ясно, хотите ли вы, чтобы эта информация была в вашем приложении или только для вашего собственного использования.
Вы можете получить эту информацию с помощью ADB:
adb shell cat /proc/cpuinfo
Если вы хотите использовать эту информацию в своем приложении, создайте простую функцию для возврата
Map<String,String>
, например,public static Map<String, String> getCpuInfoMap() { Map<String, String> map = new HashMap<String, String>(); try { Scanner s = new Scanner(new File("/proc/cpuinfo")); while (s.hasNextLine()) { String[] vals = s.nextLine().split(": "); if (vals.length > 1) map.put(vals[0].trim(), vals[1].trim()); } } catch (Exception e) {Log.e("getCpuInfoMap",Log.getStackTraceString(e));} return map; }
Обратите внимание, что это не будет получать информацию о нескольких процессорах, перезаписывает. Большинство значений в любом случае похожи. или Изменить, чтобы создать Список CpuInfoMaps.
пытаться,
Log.d("getCpuInfoMap test", getCpuInfoMap().toString());
Я надеюсь, что еще не слишком поздно для ответа, но вот как я получаю текущую частоту для конкретного ядра процессора:
public class MainActivity extends Activity{
private static final int INSERTION_POINT = 27;
private static String getCurFrequencyFilePath(int whichCpuCore){
StringBuilder filePath = new StringBuilder("/sys/devices/system/cpu/cpu/cpufreq/scaling_cur_freq");
filePath.insert(INSERTION_POINT, whichCpuCore);
return filePath.toString();
}
public static int getCurrentFrequency(int whichCpuCore){
int curFrequency = -1;
String cpuCoreCurFreqFilePath = getCurFrequencyFilePath(whichCpuCore);
if(new File(cpuCoreCurFreqFilePath).exists()){
try {
BufferedReader br = new BufferedReader(new FileReader(new File(cpuCoreCurFreqFilePath)));
String aLine;
while ((aLine = br.readLine()) != null) {
try{
curFrequency = Integer.parseInt(aLine);
}
catch(NumberFormatException e){
Log.e(getPackageName(), e.toString());
}
}
if (br != null) {
br.close();
}
}
catch (IOException e) {
Log.e(getPackageName(), e.toString());
}
}
return curFrequency;
}
}
Отсюда его кусок пирога, вы просто вызываете метод:-D
int core1CurrentFreq = getCurrentFrequency(1, this);
Иногда ядра отключаются, в этом случае путь к файлу не существует, и возвращается -1
ПРИМЕЧАНИЕ. возвращаемое значение в кГц
Значение МГц равно core1CurrentFreq / 1e3
Значение ГГц: core1CurrentFreq / 1e6
Некоторые пояснения к методу getCurFrequencyFilePath(), поскольку не все так ясно.
Текущая частота обычно хранится в файле: scaling_cur_freq
Путь к файлу:
"/sys/devices/system/cpu/cpu(XX)/cpufreq/scaling_cur_freq"
где (XX) заменяет номер ядра процессора, например:
"/sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq"
Переменная INSERTION_POINT - это не что иное, как индекс (XX), точка, в которую мы хотим поместить число, соответствующее ядру процессора.
Я предлагаю вам взглянуть на некоторые другие файлы в папке cpufreq, вы можете использовать их для получения другой информации, такой как максимальная и минимальная частота, список доступных частот и т. Д.
Нажмите на эту ссылку и прокрутите вниз до заголовка 3