Как получить конкретную информацию об устройстве Android из файла "/proc/cpuinfo"?

Как я могу разобрать /proc/cpuinfo виртуальный файл моего планшета Android, чтобы получить информацию о ядре процессора и тактовой частоте? Мне не нужна вся информация, предоставленная вышеуказанным файлом; только эти два бита. Может кто-нибудь, пожалуйста, помогите?

2 ответа

  • Не ясно, хотите ли вы, чтобы эта информация была в вашем приложении или только для вашего собственного использования.

    Вы можете получить эту информацию с помощью ADB:

    adb shell cat /proc/cpuinfo
    

    adb shell 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

Другие вопросы по тегам