Acceso incoherente a los directorios en el teléfono enraizado

Estoy escribiendo una aplicación que necesita trabajar en una raíz Sony xperia z (Android 4.4.2, número de construcción 10.5.A.0.230). La aplicación lee las velocidades de núcleo de los cuatro núcleos pasando una de las siguientes cadenas …

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

… a la siguiente función …

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

Esta función se ejecuta una vez por segundo:

Todo esto funciona perfectamente. Muestro los números en mi aplicación, y veo que se comportan exactamente como yo esperaría. Las velocidades del núcleo a menudo son diferentes entre sí, y cuando el núcleo se calienta demasiado (leo la temperatura de la CPU también), las velocidades se reducen. Así que estoy seguro de que estos números se están leyendo correctamente.

Ahora es aquí donde comienza el misterio. Si abro un shell de adb a mi dispositivo, escriba "su" como mi primer comando. Puedo navegar hasta el directorio "/ sys / devices / system / cpu / cpu0 / cpufreq /" sin problema. Pero si intento navegar a los directorios para el núcleo 1,2 o 3. Consigo "ninguÌ n tal archivo o directorio". Estoy desconcertado.

EDIT: Acabo de probar con un emulador de terminal que se ejecuta en el dispositivo en sí, y encontré que podía acceder a los directorios de todos los núcleos. Así que su shell adb que se está comportando extrañamente.

EDIT: Justo en un palpitar intenté su -c "ls cpu1/cpufreq/" y trabajó, vi el directorio de cpu1. Así que tal vez escribiendo su en el shell de adb no me dio el acceso de superusuario?

EDIT: ¡OMG! Acabo de ejecutar su -c "ls cpu1/cpufreq/" una y otra vez para encontrar que a veces funcionaba (es decir, vi la lista de directorios) ya veces no lo hizo (es decir, no tengo tal archivo o directorio)!

EDIT:: Según este documento , parece que los directorios son virtuales . En un punto dice dice " cd / sys / devices / system / cpu # un directorio virtual hecho visible por los controladores de dispositivo ". Hmmm, tal vez he estropeado los controladores de dispositivo?

One Solution collect form web for “Acceso incoherente a los directorios en el teléfono enraizado”

La razón por la que está viendo los directorios desaparecer es cpu hotplugging . Esta es la característica del kernel de linux que permite al sistema operativo deshabilitar núcleos específicos en la CPU para ahorrar energía. El núcleo predeterminado de Android está diseñado para deshabilitar los núcleos 1-3 en casi todos los teléfonos cuando la carga del sistema es tal que no son necesarios para los cálculos. Cuando estos núcleos están deshabilitados, los directorios correspondientes también se eliminan.

Por lo tanto, puede inferir que si el directorio existe, el núcleo está funcionando a la frecuencia especificada. Si no existe, el núcleo está deshabilitado y por lo tanto no tiene frecuencia.

  • Adb pull -> dispositivo no encontrado
  • Crea Android con Superusuario
  • ANDROID: ¿Cómo obtener acceso root en una aplicación de Android?
  • ¿Es seguro deshabilitar com.android.systemui?
  • Ocultar barra de sistema en Jelly Bean Tablet (enraizado)
  • ¿Cómo modificar AOSP para permitir que aplicaciones específicas obtengan acceso de root?
  • Habilitar depuración USB a través de Clockworkmod con adb
  • Android: copiar programaticamente apk en / system / app
  • usuario root puede acceder a almacenamiento interno en Android?
  • ¿Cómo puede mi aplicación acceder a privilegios de nivel de administración en un dispositivo no enraizado?
  • Espere a que termine el comando en RootTools
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.