Cómo escribir Android init.rc-ljbphoebe-ChinaUnix Blog
Acción: Acción
Disparador: Disparador
Servicio: Servicio
Opciones: Opciones
Atributos:
(1) Los comandos son algunas operaciones básicas, como:
mkdir /sdcard 0000 system system mkdir /system
mkdir /data 0771 system system
mkdir /cache 0770 caché del sistema
mkdir /config 0500 rootroot
mkdir /sqlite_stmt_journals 01777 raíz raíz
montar tmpfs tmpfs / sqlite_stmt_journals size=4m
Estos comandos se analizarán en el archivo ejecutable de inicio y luego se llamarán las funciones relevantes para ejecutar estos comandos.
(2) Una acción representa un conjunto de comandos, generalmente llamados en un disparador. La forma de operaciones y disparadores es:
on
Un ejemplo de uso de la operación es el siguiente:
on init
exportar RUTA:/ sbin:/ system/sbin:/system/bin:/system/xbin
mkdir /system
init representa una condición de activación Después de este evento de activación, las variables de entorno son. establece y se crea el directorio se llama "operación". "
(3) Los servicios generalmente se usan para iniciar un programa ejecutable, mientras que las Opciones son componentes adicionales del servicio y se usan junto con el servicio.
service vold /system/ bin/vold
socket vold stream 0660 montaje raíz
servicio de sonido de arranque /system/bin/playmp3
medios de usuario
audio de grupo
oneshot
vold y bootsound son los nombres de los dos servicios, y /system/bin/vold y /system /bin/playmp3 son sus archivos ejecutables correspondientes
<. p>socket.user, group y oneshot son opciones utilizadas por el servicio. La opción oneshot significa que el servicio se inicia solo una vez, mientras que sin la opción oneshot, el ejecutable siempre existirá y se reiniciará cuando se cierre el ejecutable.(4) Las propiedades son valores utilizados en el sistema que se pueden configurar y leer
setprop ro.FOREGROUND_APP_MEM 1536
setprop ro.VISIBLE_APP_MEM. 2048
on property:ro.kernel.qemu=1
start adbd
setprop se usa para establecer propiedades, on property se puede usar para determinar propiedades y las propiedades aquí que se ejecutan en Android son consistentes
Las palabras clave para el script de inicio se pueden encontrar en el archivo system/core/init/keyword.h del proceso de inicio
Para usar init. rc, puede consultar el sistema de archivos/core/init/readme.txt
Si desea modificar el proceso de inicio, solo necesita modificar el contenido de init.c (system/core/ init) o init.rc.
Cómo escribir
Android init.rc (lenguaje de inicio de Android)
El lenguaje de inicio de Android consta de cuatro declaraciones de clases principales: Acciones (operación), Comandos ( Comandos, servicios y opciones. opciones).
* El lenguaje de inicialización consta de "operaciones", que son símbolos del lenguaje separados por espacios. Los espacios en blanco se pueden insertar en los símbolos del lenguaje mediante el escape de barra invertida estilo C. También se pueden utilizar comillas dobles para evitar que el texto se divida en símbolos de varios idiomas mediante espacios. Cuando una barra invertida está al final de una línea, actúa como un salto de línea.
* Las líneas que comienzan con # (se permiten espacios que comienzan con) son líneas de comentarios.
*Las operaciones y servicios declaran implícitamente una nueva sección. Todas las declaraciones de comando u opción que pertenecen a esta sección pertenecen a esta sección. Se ignorarán los comandos u opciones anteriores al primer párrafo.
*Las operaciones y servicios tienen nombres únicos. Declarar clases con nombres idénticos después de ellas se considerará un error y se ignorará.
Acciones
-------
Acciones es el nombre de un grupo de comandos. Las acciones tienen un desencadenante que determina cuándo se realiza la acción. Cuando se ejecuta una operación que cumple con las condiciones de activación, si no se ha agregado a la cola pendiente, se agregará al final de la cola.
Las operaciones en la cola se ejecutan en orden y los comandos en la operación también se ejecutan en orden. Entre ejecuciones de comandos, Init maneja otras actividades (creación/destrucción de dispositivos, configuración de propiedades, reinicio de procesos).
La operación se expresa como:
on
Servicio
--------
Servicio iniciado por init y, opcionalmente, reiniciado al salir. El servicio se representa como:
servicio [ ]*
...
Opciones
-------
Las opciones son modificadores de servicio que afectan cuándo y cómo init ejecuta el servicio.
Servicio Crítico
Este es un servicio de dispositivo crítico. Si se sale más de 4 veces en 4 minutos, el dispositivo se reiniciará en modo de recuperación.
Deshabilitado
Los servicios en este nivel no se iniciarán automáticamente, pero deben iniciarse como se especifica en el nombre del servicio.
setenv
Establece el valor de la variable de entorno para el proceso iniciado
socket [ [ ]
Crea un archivo llamado /dev /socket/ unix domin socket y transfiera su fd al proceso iniciado. Debe ser "gramo" o "flujo". El valor predeterminado para usuarios y grupos es 0.
usuario
Cambie el nombre de usuario antes de ejecutar el servicio. Este comando no se puede utilizar si el proceso requiere capacidades de Linux. Debes solicitar esta característica mientras aún eres root, descendiendo al uid requerido.
grupo [ ]*
Cambie el grupo antes de ejecutar el servicio. Los grupos posteriores al primer grupo se configurarán como grupos adjuntos al proceso (a través de setgroups()). Actualmente el valor predeterminado es root.
oneshot
El servicio no se reiniciará después de salir.
Clase
Especifique un nombre de clase para el servicio. Todos los servicios con el mismo nombre de clase se pueden iniciar o detener juntos. Si no se especifica ninguna clase, el servicio utiliza de forma predeterminada la clase "predeterminada".
Reiniciar
Ejecuta el comando cuando se reinicie el servicio.
Disparadores
--------
Los desencadenadores son cadenas que se pueden usar para hacer coincidir tipos específicos de eventos y realizar acciones.
boot
Este es el primer disparador ejecutado después del arranque (cuando se carga /init.conf)
=
Cuándo el disparador se activa cuando la propiedad se establece en el valor especificado.
dispositivo agregado-
dispositivo-eliminado-
Se activa cuando se agrega o elimina un nodo de dispositivo.
servicio-exitado-
Se activa cuando existe el servicio especificado
Comando
--------
--------
p>
exec [ ]*
Bifurca y ejecuta un programa (). Esto se bloqueará hasta que se complete el programa. Es mejor evitar ejecutar programas que no sean comandos integrados, etc., ya que pueden causar que init se bloquee.
Exportar
Establece el valor de una variable de entorno global que pueden utilizar todos los procesos al ejecutar este comando.
ifup
Pone en línea la interfaz de red.
importar
Analizar el archivo de configuración inicial para expandir el archivo de configuración actual.
Nombre de host
Establecer nombre de host
chmod
Cambiar permisos de acceso a archivos
chown
Cambiar la afiliación y el grupo del archivo
class_start
Iniciar todos los servicios de la clase especificada cuando los servicios de la clase especificada no se estén ejecutando.
class_stop
Cuando los servicios de la clase especificada se estén ejecutando, detenga todos los servicios de la clase.
Nombre de dominio
Establezca el nombre de dominio.
insmod
Cargar módulos en esta ruta
mkdir [modo] [propietario] [grupo]
Crear un directorio que pueda seleccionar : mod, propietario, grupo. Si no se especifica, el directorio se crea con permisos 755, el propietario es raíz y el grupo es raíz Crear.
montar
[ ]*
Intente montar en un directorio
. El nombre del dispositivo de bloque mtd se puede especificar usando el formato mtd@nombre. Incluye "ro", "rw", "remount", "noatime".
Ejemplo:
mount -t vfat -o fmask=0000,dmask=0000,rw,flush,noatime,nodiratime /dev/block/mmcblk1p1 /SD1
sistema chown / SD1
chmod 0777 /SD1
mount -t vfat -o fmask=0000,dmask=0000,rw,flush,noatime,nodiratime /dev/block /mmcblk1p6 /SD3
sistema chown /SD3
chmod 0777 /SD3
setkey
Aún no
setprop
Establecer el valor de propiedad del sistema.
setrlimit
Establecer límites de recursos.
iniciar
Iniciar un servicio que no se está ejecutando.
detener
Detener un servicio en ejecución.
enlace simbólico
Crea un enlace simbólico que apunta a
sysclktz
(GMT es 0)
disparador
Activar un evento. Se utiliza para llamar a otras operaciones.
escribir [ ]*
Abre un archivo y escribe una o más cadenas.
Propiedades
----------
Init actualiza ciertas propiedades del sistema para que puedas ver lo que está haciendo.
init.action
La operación que se está ejecutando actualmente, o ""
init.command
El comando que se ha ejecutado, o " "
init.svc.
El estado del servicio denominado ("Detenido", "En ejecución", "Reiniciado"). Ejecutar", "Reiniciar")
init.svc.
Estado del servicio. Ejemplo de svc:
----------- - -----
# No completado: solo se proporcionan algunos ejemplos de uso
#
en el arranque
exportar RUTA / sbin:/system/sbin:/system/bin
exportar LD_LIBRARY_PATH /system/lib
mkdir /dev
mkdir /proc
mkdir /sys
montar tmpfs tmpfs /dev
mkdir /dev/pts
mkdir /dev/socket
montar devpts devpts /dev/pts
montar proc proc/proc
montar sysfs sysfs /sys
escribir /proc/cpu/alignment 4
ifup lo
nombre de host localhost
nombre de dominio localhost
montar yaffs2 mtd@sistema /sistema
montar yaffs2 mtd@datos de usuario /datos p>
importar /system/etc/init.conf
class_ start default
servicio adbd /sbin/adbd
usuario adb
grupo adb
servicio usbd /system/bin/usbd -r
usuario usbd
grupo usbd
socket usbd 666
servicio zygote /system/bin/app_process -Xzygote /system/bin --zygote
socket zygote 666
tiempo de ejecución del servicio /system/bin/runtime
sistema de usuario
sistema de grupo
en dispositivo agregado-/dev/compass
iniciar akmd
en dispositivo-eliminado-/dev/compass
detener akmd
servicio akmd /sbin/akmd
deshabilitado
usuario akmd
grupo akmd
depuración
---------------
De forma predeterminada, el programa ejecutado por init tendrá errores se envían a /dev/null. Para la depuración, puede ejecutar el programa a través del logwrapper del programa de Android. Esto restablecerá la salida/salida de error en el sistema de registro de Android (accesible a través de logcat).
============================================ === ====================
Script Android--init.rc
Utilice init.rc en el Script de inicio de Android Scripts para realizar operaciones simples en la inicialización del sistema.
Ruta del script de inicio init.rc: system/core/rootdir/init.rc
Contenido:
Comandos: Comando
Acciones: Operaciones
Disparadores: Condiciones de disparo
Servicios.Servicios: Servicios
Opciones: Opciones
Propiedades: Propiedades
Comandos: Los comandos son algunas operaciones básicas. Por ejemplo:
mkdir /system
mkdir /data 0771 sistema sistema
mkdir /persist 0771 sistema sistema
devwait /dev/ block /mmcblk0p12
mount ext3 /dev/block/mmcblk0p
La acción representa una serie de comandos, generalmente llamados en un disparador, como
on init / / representa las condiciones de activación
sysclktz 0
loglevel 3
# Establecer entorno global
exportar RUTA /sbin:/system/sbin: /system /bin:/system/xbin
export LD_LIBRARY_PATH /system/lib
export ANDROID_BOOTLOGO 1
Servicios generalmente significa iniciar un programa ejecutable, y Opciones son opciones adicionales para el servicio. Se puede utilizar con servicios.
service vold /system/bin/vold //vold es el nombre del servicio, /system/bin/vold es el programa ejecutable correspondiente.
socket vold stream 0660 root mount //socket es la opción utilizada por el servicio
ioprio be 2
servicio netd /system/bin/netd p>
sistema raíz socket netd stream 0660
Las opciones utilizadas por el servicio incluyen socket, usuario, grupo y oneshot.
Oneshot significa que el servicio solo se iniciará una vez y, sin la opción oneshot, el ejecutable siempre existirá; si se elimina el ejecutable, el servicio no se iniciará. - Si se elimina el ejecutable, el servicio se reiniciará.
Las propiedades son valores utilizados en el sistema que se pueden configurar, leer y escribir.
setprop ro.HIDDEN_APP_MEM 5120 //setprop se utiliza para establecer propiedades
setprop ro.CONTENT_PROVIDER_MEM 5632
setprop ro.EMPTY_APP_MEM 6144
...
on property:ro.kernel.qemu=1 //la propiedad on se usa para determinar los atributos
start adbd
Los atributos aquí se usan en todo el El proceso de ejecución de Android es consistente.
Las palabras clave del script de inicio se pueden encontrar en el archivo system/core/init/keyword.h en el proceso de inicio. Por ejemplo:
KEYWORD(chroot, COMMAND, 1, do_chroot) //chroot es el comando, do_chroot() es la función llamada, que se define en system/core/init/builtins.c en el proceso de inicio en el archivo.
Ejemplo:
servicio akmd /system/bin/logwrapper /sbin/akmd