[HarmonyOS HiSpark IPC DIY Camera Trial Series 4] ¿Cómo inicia el kernel liteos-a de HarmonyOS el primer proceso de usuario init_lite?

1. Conocimiento de compilación del sistema operativo Hongmeng

(El principio se cita de la interpretación esencial del código fuente abierto del sistema operativo Hongmeng de Chuangda OpenHarmony Research Group - init) El
sistema de compilación de código fuente OpenHarmony utiliza la herramienta gn desarrollada por Google y ninjia. La combinación de los dos es más eficiente que el sistema de compilación tradicional de archivos MAKE, especialmente adecuado para la compilación paralela de sistemas grandes. Los desarrolladores, si quieren participar en el desarrollo de OpenHarmony, deben tener cierto conocimiento de la sintaxis de gn. Este artículo solo hace algunas introducciones básicas:
1. Si usa la herramienta gn, el desarrollador escribe las reglas de compilación en un archivo llamado BUILD.gn. Al igual que Makefile, el archivo gn tiene sus propias reglas gramaticales y pertenece al lenguaje de dominio (lenguaje específico del dominio, DSL). La gramática gn no es difícil, pero las reglas de compilación en sí mismas tienen mucho contenido, por lo que no es fácil comprender todo el contenido a la vez.
2.gn admite funciones de plantilla personalizadas, que se pueden colocar en un archivo llamado .gni. El archivo de plantilla gn más común en OpenHarmony es ./build/lite/config/component/lite_component.gni. El archivo de plantilla gni se puede importar mediante la importación en el archivo .gn. OpenHarmony define funciones de plantilla como lite_component y lite_library.
3. En gn, la entrada de la función de compilación del archivo ejecutable es ejecutable ("nombre de archivo") y la función de regla de compilación de la biblioteca compartida es biblioteca_compartida ("nombre de archivo"). Por lo tanto, si desea buscar las reglas de compilación correspondientes a un determinado archivo, primero puede buscar todos los archivos BUILD.gn y luego el ejecutable grep. La siguiente es una captura de pantalla de los resultados de nuestro grep para todos los ejecutables.
inserte la descripción de la imagen aquí

2. Observar la estructura del código de Hongmeng OS desde el proceso de compilación.

El comando de compilación de Hi3518EV300 es el siguiente:
python build.py ipcamera_hi3518ev300 -b debug
¿Cómo se ejecuta este comando de compilación?
inserte la descripción de la imagen aquí

El archivo principal compilado es el archivo Build\lite\BUILD.gn y el contenido se intercepta de la siguiente manera:
inserte la descripción de la imagen aquí

Primero compila el kernel y depende de la biblioteca, finalmente compila rootfs, el proceso de compilación de rootfs \build\lite\gen_rootfs.py es compilar userfs primero y luego compilar rootfs.

El archivo de configuración utilizado:
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Abra ipcamera_hi3518ev300.json, donde:
1. Configure el kernel como liteos_a
2. Especifique el compilador como clang
3. Enumere todos los subsistemas del sistema operativo y las ubicaciones del código fuente, incluidos el kernel y los subsistemas de inicio. init_lite en Inicio es el primer proceso en modo de usuario llamado por el kernel;
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3. El primer proceso en modo de usuario init_lite

La ubicación de Init_lite:
inserte la descripción de la imagen aquí

La introducción a init en el manual oficial (init boot se refiere a init_lite)
la recuperación de inicio es responsable de iniciar la capa intermedia del sistema operativo después de que se inicia el kernel y antes de que se inicie la aplicación. Están involucrados los siguientes módulos:

  • inicio inicio arranque

Las plataformas que admiten el kernel LiteOS-A actualmente incluyen: plataforma Hi3516DV300 y plataforma Hi3518EV300.

Responsable de manejar el proceso de inicio del proceso de servicio del sistema desde que el kernel carga el primer proceso en modo de usuario hasta el inicio del primer programa de aplicación. Además de cargar los procesos clave de cada sistema, el subsistema de recuperación de inicio también necesita establecer sus permisos correspondientes al mismo tiempo que el inicio y mantener vivo el proceso especificado después de que se inicia el subproceso (si el proceso sale inesperadamente, es necesario para reiniciar), para procesos especiales. Al salir inesperadamente, al iniciar el subsistema de recuperación también se realiza un reinicio del sistema.

  • incubación de aplicaciones appspawn

    Las plataformas que admiten el kernel LiteOS-A actualmente incluyen: plataforma Hi3516DV300 y plataforma Hi3518EV300.

    Responsable de aceptar el comando del marco de la aplicación para incubar el proceso de solicitud, establecer sus permisos correspondientes y llamar a la entrada del marco de la aplicación.

  • módulo de servicio de inicio bootstrap

    Las plataformas que soportan el kernel LiteOS-M actualmente incluyen: Plataforma Hi3861.

    Proporciona los identificadores de entrada de inicio de varios servicios y funciones. Cuando se inicia SAMGR, se llamará a la función de entrada identificada por boostrap y se iniciará el servicio del sistema.

  • propiedad del sistema

    Plataformas compatibles que utilizan el kernel LiteOS-M y el kernel LiteOS-A, incluidas: plataforma Hi3861, plataforma Hi3516DV300, plataforma Hi3518EV300.

    Responsable de proporcionar acceso a las propiedades del sistema relacionadas con la configuración del sistema operativo.

    Las propiedades del sistema incluyen: propiedades predeterminadas del sistema, propiedades del sistema del fabricante OEM y propiedades del sistema personalizadas. La pieza del fabricante OEM solo proporciona el valor predeterminado y el valor específico debe ser ajustado por el lado del producto OEM según sea necesario; consulte la parte "Uso" para obtener más detalles.

base
├──inicio inicio recuperación subsistema directorio raíz
├──── frameworks
│ └── syspara_lite
│ ├── LICENCIA archivo de LICENCIA de código abierto
│ ├── parámetro sistema propiedad módulo directorio de archivos fuente
│ │ ├── BUI LD.gn
│ ...
_ _
_
_
_
── BUILD.gn
│ └── src
│ ├── token_impl_hal
│ └── token_impl_posix
├──── hals
│ └── syspara_lite módulo de atributos del sistema capa de abstracción de hardware directorio de archivos de encabezado
├─ ─── interfaces
│ └── kits
│ └── directorio de interfaz externa del módulo de atributos del sistema syspara_lite
└──── servicios
├── módulo de incubación de aplicaciones appspawn_lite
│ ├── Configuración de compilación del módulo de incubación de aplicaciones BUILD.gn
│ ├ ── incluir directorio de archivos de encabezado del módulo de incubación de aplicaciones
│ ├── LICENCIA archivo de LICENCIA de código abierto
│ ├── módulo de incubación de aplicaciones moduletest directorio de códigos de autoprueba
│ └── directorio de archivos fuente del bloque de incubación de aplicaciones src
├── módulo de servicio de inicio bootstrap_lite
│ ├── módulo de servicio de inicio BUILD.gn Configuración de compilación
│ ├── LICENCIA archivo de LICENCIA de código abierto
│ └── directorio de archivos fuente del módulo de servicio de inicio de origen
└── módulo de inicio de inicio init_lite
├── BUILD.gn configuración de compilación del módulo de inicio de inicio
├── incluye directorio de archivos de encabezado del módulo de inicio de inicio
├─ ─ LICENCIA archivo de licencia de código abierto
├── moduletest directorio del código de autoprueba del módulo de arranque
└── src directorio del archivo fuente del módulo de arranque
proveedor
└──huawei
└──camera
└──init_configs directorio del archivo de configuración del módulo de arranque (formato json , implementación en el directorio /etc/)

Init_lite usa el archivo de configuración init_configs;
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

main.c de Init_lite leerá y ejecutará la línea de comando del archivo de configuración anterior, y su función es InitReadCfg;
inserte la descripción de la imagen aquí

Init_lite genera "/bin/init" después de la compilación;
el directorio bin está configurado en \build\lite\BUILD.gn;
inserte la descripción de la imagen aquí

El nombre de inicio se especifica en base\startup\services\init_lite\BUILD.gn;
inserte la descripción de la imagen aquí

4. ¿Cómo llama el kernel a Init_lite?

La secuencia de inicio de liteos-a es:
1) reset_vector_up.s
2) \kernel\liteos_a\platform\main.c
3) OsMain
4) OsSystemInit
5) OsSystemInitTaskCreate
6) SystemInit

Se llamará a SystemInit durante el proceso de inicio del kernel Hi3518:
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

La función SystemInit finalmente llamará a la función OsUserInitProcess para iniciar el proceso de inicio;
inserte la descripción de la imagen aquí

La función OsUserInitProcess está definida en \kernel\liteos_a\kernel\base\core\los_process.c:
inserte la descripción de la imagen aquí

La dirección del primer proceso de modo de usuario definido en OsUserInitProcess es __user_init_entry;
__user_init_entry está definido por la definición de macro LITE_USER_SEC_ENTRY, y su archivo es \kernel\liteos_a\kernel\user\src\los_user_init.c;
esta es la entrada para que Kernel llame init_lite:
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Para obtener más información sobre mí, consulte : Recopilación de datos de alta calidad de Harmony OS, que se actualiza continuamente

Supongo que te gusta

Origin blog.csdn.net/qq_31765191/article/details/109839380
Recomendado
Clasificación