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

Cómo configurar el entorno de compilación

Ver el código fuente en GitHub

Para promover el desarrollo gratuito y abierto, OpenThread usa CMake en la cadena de herramientas de compilación. Actualmente, esta cadena de herramientas es necesaria para trasladar OpenThread a una nueva plataforma de hardware.

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

Crea un repositorio nuevo

El primer paso es crear una nueva casa para tu plataforma de hardware. En esta guía, crearemos un repositorio nuevo llamado ot-efr32 que contenga la capa de abstracción de la plataforma, el SDK de la plataforma de hardware y algunas secuencias de comandos útiles.

En este ejemplo, creamos el repositorio SiliconLabs/ot-efr32 en GitHub y lo clonamos en ~/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 mantener la coherencia con los repositorios de plataforma existentes en la organización de GitHub de OpenThread, te recomendamos estructurar tu repositorio de la siguiente manera:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Carpeta Descripción
examples Aplicaciones de ejemplo opcionales
openthread El repositorio openthread como submódulo
script Secuencias de comandos para compilar, probar y analizar con lint
src La implementación de la capa de abstracción de la plataforma
third_party Ubicación de las fuentes de terceros

Cómo agregar submódulos

El siguiente paso es agregar openthread y cualquier otro repositorio requerido como submódulo.

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, agregaremos una versión lite del SDK de Gecko de Silicon Labs como 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.

Secuencias de comandos

Para facilitar las tareas comunes, puedes crear algunas secuencias de comandos en la carpeta script. Esto puede incluir secuencias de comandos para tareas como arranque, compilación, ejecución de una línea de código y una secuencia de comandos de prueba para las verificaciones de GitHub de GitHub.

A continuación, se muestran algunos ejemplos de secuencias de comandos que son estándar en la mayoría de los repositorios de plataformas existentes.

bootstrap

Esta secuencia de comandos debe instalar todas las herramientas y los paquetes que requiere su plataforma de hardware. También debe ejecutar la secuencia de comandos de arranque de openthread a fin de asegurarse de que el usuario tenga todo lo necesario para compilar la pila de OpenThread.

Consulta la secuencia de comandos de arranque en ot-efr32 para ver un ejemplo.

build

La secuencia de comandos de compilación CMake debe permitir que los usuarios compilen la pila de OpenThread para tu plataforma. Si tu repositorio define alguna aplicación de ejemplo, esta secuencia de comandos también debe compilarlas. Esta secuencia de comandos debe contener las opciones básicas de configuración del sistema, incluidas las definiciones de las macros específicas de la plataforma.

Consulta la secuencia de comandos de compilación en ot-efr32 para ver un ejemplo.

test

Una secuencia de comandos de prueba puede ser útil para que los usuarios prueben los cambios utilizando cualquier prueba que hayas definido. Puede ser algo tan sencillo como ejecutar compilaciones de verificación de estado o tan complicado como iniciar un paquete de prueba de unidades.

En ot-efr32, la secuencia de comandos simplemente ejecuta la secuencia de comandos build para cada placa compatible en cada una de las plataformas efr32.

Consulta la secuencia de comandos de prueba en ot-efr32 para ver un ejemplo.

make-pretty

Para mantener un estilo coherente, esta secuencia debe dar formato al código, a las secuencias de comandos y a los archivos de Markdown.

Puedes definir esta secuencia de comandos por tu cuenta, pero puede ser más fácil usar la secuencia de comandos make-pretty que usan los repositorios de plataformas existentes. La secuencia de comandos llama a las secuencias de comandos de estilo openthread y ayuda a garantizar un estilo coherente en todos los repositorios de OpenThread.

Configuración de la secuencia de comandos del vinculador

La secuencia de comandos GNU Linker describe cómo asignar todas las secciones en los archivos de entrada (.o "object" archivos generados por la colección de compilador 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. A menudo, la secuencia de comandos del vinculador específica de la plataforma se proporciona con el BSP de la plataforma.

Configura la herramienta ld para que apunte a la secuencia de comandos del vinculador específica de la plataforma mediante target_link_libraries en el destino de CMake de tu plataforma 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

A menudo, se proporciona el código de inicio de la cadena de herramientas junto con la BSP de la plataforma. Por lo general, este código hace lo siguiente:

  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 la sección .data de la memoria no volátil a la RAM
  5. Pasa 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 código fuente de ensamblado) se debe incluir en la biblioteca openthread-platform-name de tu plataforma. De lo contrario, algunas variables clave que se usan en la secuencia de comandos del vinculador no se pueden citar 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
    $
)