Estructura interna de un proyecto Zephyr
Comenzar arrow_downwardCada archivo tiene un propósito específico. Entender su función es clave para desarrollar aplicaciones.
Define cómo construir el proyecto. Carga el sistema de build de Zephyr y especifica qué archivos compilar.
Configuración de software mediante Kconfig. Habilita o deshabilita funcionalidades del kernel y drivers.
Modifica la descripción del hardware (DeviceTree) sin tocar los archivos base. Ideal para personalizar pines.
Tu código de aplicación. Aquí va la lógica de negocio que utiliza las APIs de Zephyr.
El corazón del sistema de build. Define cómo CMake debe construir tu aplicación.
Especifica la versión mínima de CMake. Zephyr requiere al menos la versión 3.20.0.
Carga todo el sistema de build de Zephyr: toolchain, Kconfig, DeviceTree, etc. Esta línea es la que hace la "magia".
Define el nombre de tu proyecto. Aparecerá en los logs de build y en algunos metadatos.
Lista los archivos fuente (.c) que deben compilarse. El target app es creado automáticamente por Zephyr.
find_package(Zephyr) debe ir antes de project(). Este orden es específico de Zephyr.
Habilita o deshabilita funcionalidades del sistema. Cada opción se traduce en #define en el código.
CONFIG_<SIMBOLO>=<valor>y (sí), n (no), números, strings entre comillas.
La configuración final es el resultado de combinar varias fuentes:
_defconfig)
prj.conf
No necesitas memorizar todas las opciones. La GUI de Kconfig te permite explorar y modificar la configuración visualmente.
En VS Code, abre la paleta de comandos (Ctrl+Shift+P)
Escribe nRF Kconfig y selecciona "Open nRF Kconfig GUI"
Explora las categorías, activa opciones y guarda los cambios
Usa el buscador de la GUI para encontrar opciones rápidamente:
Encuentra todas las opciones relacionadas con Bluetooth
Los overlays te permiten modificar la configuración del hardware sin editar los archivos base de la placa.
<board_target>.overlay
Conoce los elementos clave para escribir overlays correctamente.
&uart0 { current-speed = <115200>; };
&spi1 { status = "disabled"; };
/ { aliases { mi-led = &led0; }; };
Así es cómo todos los archivos trabajan juntos para generar el binario final.
Cada fase genera archivos intermedios que el siguiente paso necesita.
Kconfig procesa prj.conf y genera autoconf.h con todos los #define.
Los DTS y overlays se combinan para generar devicetree_generated.h con macros de hardware.
GCC compila tu código junto con el kernel de Zephyr y los drivers habilitados. Ninja coordina el proceso.
zephyr.hex listo para flashear en tu placa. Contiene tu aplicación, el RTOS y todos los drivers necesarios.
Define el proyecto y carga el sistema de build de Zephyr. Es obligatorio en todo proyecto.
Configura el software con opciones Kconfig. Habilita drivers, protocolos y funcionalidades.
Personaliza el hardware vía DeviceTree. Cambia pines, baudrates y añade dispositivos.
"Cada archivo tiene su propósito. Aprende a usar los tres y tendrás control total."
prj.conf para software, overlay para hardware, CMakeLists.txt para el build. Así de simple.
Pondremos en práctica lo aprendido controlando LEDs y leyendo botones usando las APIs de Zephyr.