2014-11-17 1 views
5

나는 뿌리 박은 Sony xperia z (인조 인간 4.4.2의 건축업자 10.5.A.0.230)에 작동 할 필요가있는 app를 쓰고있다. 응용 프로그램은뿌리깊은 전화 번호부에 전화 번호부에 일관성없는 접근

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); 
    } 

이 기능은 한 번 당 실행됩니다 ... 아래의 기능에 ... ... 다음 문자열 중 하나를 전달하여

"/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" 

를 4 개 개의 코어의 코어 속도를 읽고 초 :

이 모든 것이 완벽하게 작동합니다. 내 애플 리케이션에 번호를 표시하고, 그들이 예상대로 정확하게 행동하는 것을 볼 수 있습니다. 코어 속도는 종종 서로 다르며, 코어가 너무 많이 가열되면 (CPU 온도도 읽음) 속도가 감소합니다. 따라서이 번호가 올바르게 읽혀지고 있다고 확신합니다.

이제 신비가 시작됩니다. 내 장치에 adb 셸을 여는 경우 첫 번째 명령으로 "su"를 입력하십시오. 문제없이 "/ sys/devices/system/cpu/cpu0/cpufreq /"디렉토리로 이동할 수 있습니다. 그러나 코어 1, 2 또는 3에 대한 디렉토리로 이동하려고하면 "No such file or directory"가 표시됩니다. 나는 당황 스럽다.

편집 : 난 그냥 장치 자체에서 실행되는 터미널 에뮬레이터를 사용하여 테스트, 그리고 액세스 모든 코어에 대한 디렉토리를 발견했다. 그래서 adb 쉘은 이상하게 행동합니다.

편집 : 나는 단지 su -c "ls cpu1/cpufreq/"을 시도했는데 성공했다. 나는 cpu1 디렉토리를 보았다. 그래서 adb 쉘 에 su를 입력하면 수퍼 유저 액세스 권한을 부여하지 않았습니까?

편집 : OMG! 방금 su -c "ls cpu1/cpufreq/"을 실행하여 가끔씩 (예 : 디렉토리 목록을 보았습니다) 가끔씩 (예 : 그런 파일이나 디렉토리가 없습니다.) 발견했습니다.

편집 : : this document에 따르면,이 디렉토리가 가상을 것으로 나타납니다. 한 지점에서 그것은 "cd/sys/devices/system/cpu # 장치 드라이버가 볼 수있는 가상 디렉토리"라고 말합니다. ". 음, 어쩌면 장치 드라이버를 망쳤나요?

+0

루트 액세스는 Java 코드 나 응용 프로그램 프로세스의 어떤 것에도 적용되지 않으므로 목표와 관련이 없습니다./sys에서 변경 한 내용은 재부팅 할 때 수정해야합니다. –

답변

3

디렉토리가 사라지는 이유는 cpu 핫 플러깅입니다. 이것은 OS가 전력을 절약하기 위해 CPU의 특정 코어를 비활성화 할 수있게 해주는 리눅스 커널 기능입니다. 기본 Android 커널은 시스템로드가 계산에 필요하지 않은 경우 거의 모든 전화기에서 코어 1 - 3을 사용하지 않도록 설계되었습니다. 이러한 코어가 비활성화되면 해당 디렉토리도 제거됩니다.

따라서 디렉터리가 있으면 코어가 지정된 빈도로 작동하고 있다고 추측 할 수 있습니다. 존재하지 않으면 코어가 비활성화되어 주파수가 없습니다.

+0

핫 플러깅을 살펴보면 프로세서를 추가/제거하는 것이 전부입니다. 어쩌면 내가 잘못된 문서를보고있을 수도 있습니다. 내가 볼 수있는 참고 자료가 있니? – Mick

+0

_hotplugging_은 다소 과부하 된 용어입니다. 그것은 육체적으로 의미 할 수 있습니다.그러나 핫 플러깅은 논리 수준에서도 발생합니다. 리눅스 커널은 cpus와 같은 cpu 코어를 취급하기 때문에 위의 디렉토리 구조를 사용합니다. 리눅스 커널의 많은 것들과 마찬가지로 온라인에서 이러한 개념에 대한 많은 일화 적 언급이 있지만 명확하고 공식적인 문서는 거의 없다. cpu/core를 핫 플러그하는 방법에 대한 예제는 [이 링크] (http://www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/)를 확인하십시오. Android 관련 정보를 찾으려면 Google 관련 용어 + Android를 사용할 수도 있습니다. –

관련 문제