El sistema Android personaliza y modifica dinámicamente init.custom.rc

En lo más profundo del sistema operativo Android, init.rclos archivos juegan un papel vital, definiendo los servicios y comandos que se ejecutarán cuando se inicie el sistema. Pero, ¿qué sucede si desea agregar su propio init.custom.rc personalizado y luego agregar servicios o comandos personalizados al archivo personalizado? init.custom.rcEn este artículo, exploraré cómo personalizar y modificar archivos dinámicamente en Android .

Serie de artículos
El sistema Android init.rc crea una implementación de nodo de archivos y un análisis de principios cuando se inicia por primera vez. El
sistema Android init.rc ejecuta un script de shell cuando se inicia
el sistema Android. init.rc El nodo del sistema sys/class no se puede escribir en el análisis de principios y soluciones
de Android system init.rc Explicación detallada
del archivo de modificación dinámica personalizada del sistema Android init.custom.rc

1. Supuesto de requisitos

Mi objetivo es init.custom.rc agregar un nuevo servicio en el archivo que ejecute un script una vez que se complete el inicio del sistema. Además, también quiero crear un nuevo directorio después de que los datos del sistema de archivos estén disponibles y poder modificar y agregar dinámicamente servicios y scripts sin tener que volver a compilar el código.

2. Intentos iniciales

La idea inicial era init.rcagregar nuevos servicios y comandos directamente en el archivo. Pero este método puede hacer que el archivo principal init.rcse vuelva confuso, especialmente cuando hay múltiples servicios y comandos personalizados. No quiero que los servicios y sistemas que agregué sean confusos, y luego será inconveniente solucionar el problema y luego intentarlo. más.

3. Trampas atravesadas

Puede ver en el contenido de los archivos y system/core/rootdirproporcionados en el directorio que el proyecto parece utilizar dos sistemas de compilación al mismo tiempo: el antiguo y el nuevo . Para agregar ambos sistemas de compilación , siga estos pasos:Android.mkAndroid.bpAndroid.mkAndroid.bpcustom.init.rc

Agregue Android.mk:

En Android.mkel archivo, busque una ubicación adecuada y agregue el siguiente contenido:

include $(CLEAR_VARS)

LOCAL_MODULE := init.custom.rc
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/init

include $(BUILD_PREBUILT)

Asegúrese de que init.custom.rcel archivo esté en Android.mkel mismo directorio que .

Agregue Android.bp:
  1. En Android.bpel archivo, busque una ubicación adecuada y agregue el siguiente contenido:
prebuilt_etc {
    name: "init.custom.rc",
    src: "init.custom.rc",
    sub_dir: "init",
}

Asegúrese de que init.custom.rcel archivo esté en Android.bpel mismo directorio que .

Sin embargo... este cambio no sirve de nada, así que tenemos que encontrar otra manera.

init.custom.rcDespués de agregar el error, encontré un problema al intentar agregar el nuevo archivo al sistema de compilación de Android: MODULE.TARGET.ETC.custom.init.rcse ha definido dos veces. Esto significa que estamos intentando definir el mismo archivo en dos lugares diferentes build/make/core/base_rules.mk:325: error: system/core/rootdir: MODULE.TARGET.ETC.custom.init.rc ya definido por system/ core/rootdir
(La razón del error es que lo agregué a Android.mk y Android.bp al mismo tiempo, y finalmente eliminar cualquiera de ellos no cumplió con los requisitos)

3. Solución final

Para hacer que el código sea más modular, decidí intentar importar un nuevo archivo nombrado dentro importdel archivo principal usando la declaración . De esta manera, todos los servicios y comandos personalizados se pueden colocar en este nuevo archivo en lugar de mezclarlos en el archivo principal.init.rcinit.custom.rc

.rcUtilice la declaración en un archivo existente import. Esto permite que .rcel contenido de varios archivos se organice de forma más modular y init.rcse importe en el archivo principal.

Para resolver este problema, se tomaron los siguientes pasos:

Modificar personalizar.mk :

En vendor/customizeel directorio, edite customize.mkel archivo y agregue el siguiente contenido:

PRODUCT_COPY_FILES += \
    $(LOCAL_PATH)/init.custom.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.custom.rc
Modificar init.rc :

En system/core/rootdirel directorio, init.rcrealice las siguientes modificaciones al archivo:

@@ -8,6 +8,7 @@ import /init.environ.rc
import /system/etc/init/hw/init.usb.rc
import /init.${ro.hardware}.rc
import /vendor/etc/init/hw/init.${ro.hardware}.rc
+import /vendor/etc/init/hw/init.custom.rc
Se agregó init.custom.rc :

En vendor/customizeel directorio, cree init.custom.rcun archivo y agregue el siguiente contenido:

# Define a service to copy video
service copy_video2 /system/bin/sh /system/bin/copy_video.sh
    class main
    user root
    group root
    seclabel u:r:shell:s0
    oneshot

# Start the service on boot completed
on property:sys.boot_completed=2
    start copy_video2

# Create a directory after the file system data is available
on post-fs-data
    mkdir /mnt/custom3 0755 root root

Aprobado PRODUCT_COPY_FILES, init.custom.rcse copiará en el momento de la compilación /vendor/etc/init/hw/init.custom.rc.

Método de verificación :
Utilice ADB para obtener privilegios de root:
adb root
Vuelva a montar la partición del sistema
adb remount
Extraer init.custom.rcarchivos del dispositivo:
adb pull /vendor/etc/init/hw/init.custom.rc .
Modifique un init.custom.rcarchivo local, por /mnt/custom3ejemplo /mnt/custom4, cámbielo a y luego envíe el archivo nuevamente al dispositivo
adb push .\init.custom.rc /vendor/etc/init/hw/init.custom.rc
Sincronice el sistema de archivos y reinicie el dispositivo
adb shell sync
adb shell reboot
Después de reiniciar, verifique si las modificaciones han surtido efecto:
adb shell
cd /mnt
ls

Si ve custom4el directorio, la modificación se ha realizado correctamente.
Insertar descripción de la imagen aquí

Mediante el método anterior, personalizamos con éxito el script de inicio del sistema Android y verificamos su efectividad. Esto proporciona a los desarrolladores de sistemas Android una forma flexible de personalizar y ampliar la funcionalidad del sistema.

4. Conclusión

A través de este proceso, aprendimos cómo personalizar y modificar dinámicamente init.rcarchivos en el sistema Android. Si bien esto requiere cierta familiaridad con el sistema de compilación de Android, el proceso es relativamente simple una vez que se dominan los conceptos básicos.

Supongo que te gusta

Origin blog.csdn.net/SHH_1064994894/article/details/132488115
Recomendado
Clasificación