Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Configurar el entorno de construcción

Ver fuente en GitHub

Para promover el desarrollo libre y abierto, OpenThread utiliza CMake en la cadena de herramientas de construcción. Actualmente, esta cadena de herramientas es necesaria para portar OpenThread a una nueva plataforma de hardware.

Es posible que en el futuro se admitan otras cadenas de herramientas de compilación, pero no están dentro del alcance de esta guía de migración.

Crea un nuevo repositorio

El primer paso es configurar un nuevo hogar para su plataforma de hardware. En esta guía, que se creará un nuevo repositorio llamado ot-efr32 que contiene la capa de abstracción de la plataforma, el SDK de la plataforma de hardware, y algunas secuencias de comandos útiles.

En este ejemplo, hemos creado el SiliconLabs / ot-efr32 repositorio en GitHub y clonado a ~/repos/ot-efr32 .

mkdir -p ~/repos
cd ~/repos
git clone git@github.com:SiliconLabs/ot-efr32.git
Cloning into 'ot-efr32'...
remote: Enumerating objects: 99, done.
remote: Counting objects: 100% (99/99), done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 333 (delta 65), reused 39 (delta 39), pack-reused 234
Receiving objects: 100% (333/333), 170.78 KiB | 5.69 MiB/s, done.
Resolving deltas: 100% (194/194), done.
git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

Estructura del repositorio

Para ayudar a mantener la coherencia con los repositorios de plataformas existentes en la organización OpenThread GitHub, es posible que desee estructurar su repositorio como tal:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Carpeta Descripción
examples aplicaciones opcionales Ejemplo
openthread El openthread repositorio como un submódulo
script Scripts para construir, probar, pelar
src La implementación de la capa de abstracción de la plataforma
third_party Ubicación de cualquier fuente de terceros

Agregar submódulos

El siguiente paso es añadir openthread repositorios necesarios y todas las demás submódulos

git submodule add git@github.com:openthread/openthread.git
Cloning into '/home/user/repos/ot-efr32/openthread'...
remote: Enumerating objects: 78281, done.
remote: Counting objects: 100% (1056/1056), done.
remote: Compressing objects: 100% (488/488), done.
remote: Total 78281 (delta 639), reused 864 (delta 556), pack-reused 77225
Receiving objects: 100% (78281/78281), 76.62 MiB | 35.24 MiB/s, done.
Resolving deltas: 100% (61292/61292), done.

Para este ejemplo, vamos a añadir una versión lite de la Silicon Labs Gecko SDK como un submódulo en third_party .

cd third_party
git submodule add git@github.com:SiliconLabs/sdk_support.git
Cloning into '/home/user/repos/ot-efr32/third_party/sdk_support'...
remote: Enumerating objects: 32867, done.
remote: Counting objects: 100% (8181/8181), done.
remote: Compressing objects: 100% (3098/3098), done.
remote: Total 32867 (delta 4945), reused 7469 (delta 4732), pack-reused 24686
Receiving objects: 100% (32867/32867), 128.83 MiB | 30.91 MiB/s, done.
Resolving deltas: 100% (19797/19797), done.

Guiones

Para hacer más fácil las tareas comunes, es posible que desee crear algunas secuencias de comandos en el script la carpeta. Esto puede incluir secuencias de comandos para tareas como arranque, compilación, ejecución de un linter de código y una secuencia de comandos de prueba para comprobaciones de CI de GitHub.

A continuación se muestran algunos ejemplos de scripts que son estándar para la mayoría de los repositorios de plataformas existentes.

bootstrap

Este script debería instalar todas las herramientas y paquetes requeridos por su plataforma de hardware. También debe ejecutar openthread 's proceso de arranque para garantizar que el usuario tiene todo lo necesario para construir la pila OpenThread.

Ver el proceso de arranque utilizado en ot-efr32 para un ejemplo.

build

El CMake escritura de la estructura debe permitir a los usuarios construir la pila OpenThread para su plataforma. Si su repositorio define aplicaciones de ejemplo, este script también debería crearlas. Este script debe contener las opciones básicas de configuración del sistema, incluidas las definiciones de macro específicas de la plataforma.

Ver el script de construcción en ot-efr32 para un ejemplo.

test

Una secuencia de comandos de prueba puede ser útil para que los usuarios prueben los cambios utilizando las pruebas que haya definido. Esto podría ser algo tan simple como ejecutar compilaciones de verificación de cordura o tan complicado como lanzar un conjunto de pruebas unitarias.

En ot-efr32 , la secuencia de comandos simplemente ejecuta la build guión para cada tabla apoyada en cada una de las plataformas efr32.

Ver el script de prueba en ot-efr32 para un ejemplo.

make-pretty

Para mantener un estilo coherente, esta secuencia de comandos debe formatear el código, las secuencias de comandos y los archivos de rebajas.

Es posible definir usted mismo guión, pero puede ser más fácil de usar el make-pretty script que repos plataformas existentes están utilizando. Las llamadas script en el openthread estilo de guiones 's y ayuda a asegurar el estilo consistente a través de todos los repositorios OpenThread.

Configuración de la secuencia de comandos del vinculador

El enlazador GNU guión describe cómo asignar todas las secciones de los archivos de entrada ( .o archivos "objeto" que genera la colección de compiladores de GNU (GCC)) al archivo de salida final (por ejemplo, .elf ). También determina la ubicación de almacenamiento de cada segmento de un programa ejecutable, así como la dirección de entrada. El script del enlazador específico de la plataforma a menudo se proporciona con el BSP de la plataforma.

Configurar el ld herramienta para el punto de la secuencia de comandos enlazador plataforma específica utilizando target_link_libraries en la plataforma de destino CMake en src/CMakeLists.txt :

set(LD_FILE "${CMAKE_CURRENT_SOURCE_DIR}/efr32mg12.ld")

target_link_libraries(openthread-efr32mg12
    PRIVATE
        ot-config
    PUBLIC
        -T${LD_FILE}
        -Wl,--gc-sections -Wl,-Map=$.map
)

Código de inicio de la cadena de herramientas

El código de inicio de la cadena de herramientas a menudo se proporciona junto con el BSP de la plataforma. Este código normalmente:

  1. Implementa la función de entrada ( Reset_Handler ) del programa ejecutable
  2. Define la tabla de vectores de interrupción
  3. Inicializa el montón y la pila
  4. Copia el .data sección de la memoria no volátil a la RAM
  5. Salta a la función principal de la aplicación para ejecutar la lógica de la aplicación.

El código de inicio (C o montaje de código fuente) debe ser incluido en la plataforma de su openthread- platform-name biblioteca, de lo contrario algunas variables clave que se utilizan en el guión enlazador no puede ser citado correctamente:

  • src/CMakeLists.txt

Ejemplo: startup-gcc.c en ot-cc2538 - src/CMakeLists.txt

add_library(openthread-cc2538
    alarm.c
...
    startup-gcc.c
...
    system.c
    logging.c
    uart.c
    $
)