Red de conocimiento informático - Material del sitio web - Cómo escribir Android init.rc-ljbphoebe-ChinaUnix Blog

Cómo escribir Android init.rc-ljbphoebe-ChinaUnix Blog

Comando: Comando

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

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

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