Para administrar y reducir esta complejidad, los desarrolladores de software organizan el código en archivos pequeños que se vinculan a módulos específicos. Los desarrolladores pueden compilar cada uno de estos archivos por separado y luego vincularlos para crear un ejecutable de software final.
Un ejemplo de esto es los proyectos C compuestos por archivos de código fuente en .C extensiones e interfaces de software en .H extensiones. Cada archivo fuente se compila junto con los archivos de encabezado para crear. o Objetos vinculados juntos usando bibliotecas, creando así archivos ejecutables.
Para realizar este proceso, los desarrolladores de software usan herramientas, como Make, para automatizar el proceso de compilación y las dependencias de archivos requeridas. Hacer usos makefiles para gestionar el comportamiento del proceso de compilación.
Las herramientas de fabricación de GNU proporcionan un conjunto de reglas y convenciones utilizadas para crear mapas y reducir la complejidad para mejorar la eficiencia.
En este tutorial, discutiremos los kernel de Linux, específicamente Kconfig y Cebo.
Antes de comenzar, es bueno tener en cuenta que este artículo no pretende enseñar todo sobre el sistema de construcción del núcleo. Sin embargo, proporcionamos una descripción general de alto nivel sobre la construcción de una imagen y módulos de Vmlinux.
Si desea información más allá del alcance de este tutorial, recomendamos el siguiente recurso para una mejor información:
https: // linkfy.a/gomakeFilesdocs
https: // linkfy.a/gnumake
Kernel Makefiles: una descripción general
El sistema de compilación del kernel, también llamado sistema de configuración, es una herramienta esencial para aquellos que lo necesitan, que ha existido por un tiempo. Sin embargo, no todos usarán este sistema; Incluso los conductores y otros desarrolladores de software de bajo nivel rara vez lo usan. Como estás leyendo esto, significa que quieres saber más sobre el sistema de construcción del núcleo.
Por lo tanto, discutiremos cómo se compila el núcleo y discutiremos el sistema KBuild y Kconfig para que pueda entenderlos mejor.
El kernel makfile tiene cinco componentes centrales:
https: // elixir.bootlin.com/linux/ortat/source/scripts/kbuild.incluir
Kconfig
El archivo kconfig contiene módulos que ayudan cuando se usa la configuración Make *. Ayuda al núcleo a hacer configuraciones selectivas, creando modularidad y personalización para el proceso de compilación del núcleo.
Hay varios objetivos de configuración especificados por el sistema KConfig. Puede usar la ayuda para ver los objetivos disponibles. Estos objetivos son procesados por varios programas proporcionados por el núcleo durante el proceso de compilación.
Algunos de los objetivos de KConfig incluyen:
Hacer un Windux-Windriver.Menuconfig: ejecuta Menuconfig en una sesión terminal separada.
Hacer un Windux-Windriver.gconfig
Hacer un Windux-Windriver.xconfig
NOTA: Para usar GCONFIG y XCONFIG, debe tener las herramientas de desarrollo QT instaladas en el sistema de host.
Considera lo siguiente:
Instantánea de código Defconfig del siguiente recurso:
https: // elixir.bootlin.com/linux/v5.9/fuente/scripts/kconfig/makefile#l98
1. defconfig: $ (obj)/conf
2. ifneq ($ (comodín $ (srctree)/arch/$ (srcarch)/configs/$ (kbuild_defconfig)),))
3. @$ (kecho) "*** La configuración predeterminada se basa en '$ (kbuild_defconfig)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. demás
6. @$ (kecho) "*** La configuración predeterminada se basa en el objetivo '$ (kbuild_defconfig)'"
7. $ (Q) $ (make) -f $ (srctree)/makefile $ (kbuild_defconfig)
8. terminara si
9.
10. %_defconfig: $ (obj)/conf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configFiles = $ (Wildcard $ (srctree)/kernel/configs/$@ $ (srctree)/arch/$ (srcarch)/configs/$@)
14.
15. De %.config: $ (obj)/conf
dieciséis. $ (si $ (llame configfiles), $ (error no existe configuración para este objetivo en esta arquitectura)))
17. $ (Q) $ (config_shell) $ (srctree)/scripts/kconfig/merge_config.sh -m .config $ (configfiles)
18. $ (Q) $ (make) -f $ (srctree)/makefile Olddefconfig
OldConfig Code Snapshot del siguiente recurso:
https: // elixir.bootlin.com/linux/v5.9/fuente/scripts/kconfig/conf.C#L694
1. Caso OlddefConfig:
2. por defecto:
3. romper;
4.
5.
6. if (input_mode == saveDefConfig)
7. if (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "N *** Error mientras se guarda defconfig a: %s \ n \ n",
9. defconfig_file);
10. regresar 1;
11.
12. else if (input_mode != listNewConfig && input_mode != HelpNewConfig)
13. si (!no_conf_write && conf_write (null))
14. fprintf (stderr ", \ n *** Error durante la escritura de la configuración.\ n \ n ");
15. salida (1);
dieciséis.
17.
18. /*
19. * Crear auto.conf si no existe.
20. * Esto evita que GNU haga 4.1 o más por emitir
21. * "Incluir/config/auto.conf: no hay dicho archivo o directorio "
22. * En el archivo de nivel superior
23. *
24. * SyncConfig siempre crea o actualiza automáticamente.conf porque es
25. * Usado durante la construcción.
26. */
27. if (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "Error de \ n *** durante la sincronización de la configuración.\ n \ n ");
30. regresar 1;
31.
32.
33. regresar 0;
34.
Hay muchos objetivos en el sistema KConfig. Algunos comunes incluyen config y menuconfig.
Como se mencionó, los objetivos son procesados por varios programas en los sistemas de host, ya sea proporcionando una GUI o línea de comandos. Puede encontrar herramientas de kconfig en /scripts /kconfig en la fuente del kernel.
https: // elixir.bootlin.com/Linux/ortat/Source/scripts/kconfig
https: // elixir.bootlin.com/linux/ortat/source/scripts/kconfig/makefile
El primer proceso generalmente es leer el archivo kconfig en el directorio raíz, que se utiliza para crear una base de datos de configuración inicial. A medida que el proceso continúa, la base de datos se actualiza al leer archivos en el siguiente orden:
.configuración
/lib/módulos/$ (shell, uname-r)/.configuración
/etc/kernel-config
/Boot/config-$ (shell, uname-r)
Arch_defconfig
Arch/$ (Arch)/Defconfig
.El archivo de configuración se suelta a SyncConfig, que acepta el .Archivo de configuración como entrada. Procesa los archivos de archivo y emite, que luego se clasifican en varias categorías, como:
Archivos kbuild
Casi todos los archivos de kernel son kbuild makfiles que usan la infraestructura de kbuild, que es una característica de fabricación recursiva. La marca recursiva es una forma de usar la herramienta Make como un comando en un archivo de make. La recursión es muy útil al compilar un proyecto grande.
KBuild funciona refiriéndose a todos los archivos que mencionamos en la sección anterior.
El sistema KBuild construye sus componentes utilizando el archivo principal que incluye el Arch Makefiles con el nombre Arch/$ (Arch)/Makefile en los archivos de configuración. Desciende recursivamente a subdirectorios que invocan la marca en los componentes utilizando las rutinas en scripts/makefile.*. KBuild luego se basa en el objeto adyacente y los vincula en objetos, creando vmlinux.
Para obtener más información sobre la sintaxis utilizada en Kbuild Makefiles, consulte la documentación.
Considere el siguiente script.
https: // github.com/torvalds/linux/blob/master/scripts/link-vmlinux.mierda
Los archivos de objetos O utilizados para crear el vmlinux se compilan primero en sus respectivos incorporados .A archivos como var kbuild_vmlinux_init, main, libs. Estos están compuestos en vmlinux.
https: // github.com/torvalds/linux/blob/master/scripts/makefile.construir
Conclusión
En esta guía, echamos un vistazo a los sistemas KBuild y Kconfig en el sistema de compilación del núcleo y cómo funciona. Como mencionamos al comienzo del tutorial, los temas discutidos son amplios y no se pueden cubrir en un solo tutorial.