Resuelva el problema de que el nodo del kernel de la operación JNI no puede escribir

En Android 9.0, debido a la adopción del mecanismo de seguridad SEAndroid/SElinux, incluso si tiene permisos de raíz o establece los permisos en 777 para un nodo del kernel, aún no puede acceder a él en la capa JNI.

Este artículo tomará el nodo kernel definido por el usuario /dev/ wf_bt como ejemplo para enseñar a los lectores cómo obtener acceso a este nodo en la capa JNI.

1. Encuentra el nombre del proceso

Encuentre el proceso (proceso) que necesita acceder al nodo del kernel. El proceso system_server accede al propio nodo del autor.

2. Modificar file_contexts.te

Abra el archivo dispositivo\mediatek\xxx[chip]\sepolicy\basic\ file_contexts.te o file_contexts

Siguiendo la escritura en este archivo, defina el nombre que desea para su nodo:

  1. dev/tegra.* u:objeto_r:video_dispositivo:s0  
  2. /dev/tf_driver u:objeto_r:tee_device:s0  
  3. /dev/tty u:object_r:owntty_device:s0  
  4. /dev/tty[0-9]* u:objeto_r:dispositivo_tty:s0  
  5. # Agregamos aquí  
  6. /dev/wf_bt u:objeto_r:wf_bt_dispositivo:s0  

wf_bt_device está personalizado y el contenido de los lados izquierdo y derecho es coherente con el ejemplo anterior.

3. Modificar dispositivo.te

Abra el archivo \device\mediatek\xxx[chip]\sepolicy\basic\ device.te

Siguiendo el método de escritura en este archivo, declare el wf_bt_device recién escrito en el segundo paso como dev_type:

 

  1. # tipos de dispositivos  
  2. tipo de dispositivo, dev_type, fs_type;  
  3. escriba alarm_device, dev_type, mlstrustedobject;  
  4. escriba adb_device, dev_type;  
  5. escriba ashmem_device, dev_type, mlstrustedobject;  
  6. escriba dispositivo_audio, tipo_dispositivo;  
  7. escriba binder_device, dev_type, mlstrustedobject;  
  8. escriba block_device, dev_type;  
  9. # Agregamos aquí  
  10. escriba wf_bt_device, dev_type;  

 

Cuarto, modifique el archivo del proceso.

Muchos archivos .te en el directorio AndroidL/android/external/sepolicy/ terminan con el nombre del proceso , como surfaceflinger para el proceso de surfaceflinger, vold.te para el proceso de vold,

Solo desde el primer paso, el proceso system_server accede a este nodo, por lo que buscamos system_server.te y lo abrimos, y agregamos el permiso de lectura y escritura para permitir este proceso a /dev/wf_bt,

  1. # Leer/Escribir en /proc/net/xt_qtaguid/ctrl y /dev/xt_qtaguid.  
  2. permitir system_server qtaguid_proc:file rw_file_perms;  
  3. permitir system_server qtaguid_device:chr_file rw_file_perms;  
  4.   
  5. # chr_file indica un archivo de dispositivo de caracteres, si es un archivo ordinario, use file y use dir para el directorio  
  6. # rw_file_perms representa permisos de lectura y escritura  
  7. // Permitir que el proceso system_server tenga permisos de lectura y escritura para el dispositivo de caracteres de wf_bt_device;
  8. //La primera forma de escribir
  9. permitir system_server wf_bt_device:chr_file rw_file_perms;  
  10. //La segunda forma de escribir
  11. permitir system_server wf_bt_device:file {abrir escribir leer};

Paso 5: edición y grabación completas 

おすすめ

転載: blog.csdn.net/BersonKing/article/details/129183999