O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Configure o ambiente de construção

Ver fonte no GitHub

Para promover o desenvolvimento livre e aberta, OpenThread utiliza CMake no conjunto de ferramentas de construção. Atualmente, este conjunto de ferramentas é necessário para portar OpenThread para uma nova plataforma de hardware.

Outros conjuntos de ferramentas de construção podem ser suportados no futuro, mas não estão no escopo deste guia de portabilidade.

Crie um novo repositório

A primeira etapa é configurar um novo lar para sua plataforma de hardware. Neste guia, vamos estar a criar um novo repositório chamado ot-efr32 que contém a camada de plataforma de abstração, SDK da plataforma de hardware, e alguns scripts úteis.

Neste exemplo, criamos o Silicon Laboratories / ot-efr32 repositório no GitHub e clonado para ~/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

Estrutura do repositório

Para ajudar a manter a consistência com repositórios de plataformas existentes na organização OpenThread GitHub, você pode querer estruturar seu repositório como tal:

tree -F -L 1 --dirsfirst
.
\u251c\u2500\u2500 examples/
\u251c\u2500\u2500 openthread/
\u251c\u2500\u2500 script/
\u251c\u2500\u2500 src/
\u251c\u2500\u2500 third_party/
\u251c\u2500\u2500 CMakeLists.txt
\u251c\u2500\u2500 LICENSE
\u2514\u2500\u2500 README.md
Pasta Descrição
examples Exemplos de aplicação opcionais
openthread O openthread repositório como um sub-módulo
script Scripts para construção, teste, linting
src A implementação da camada de abstração da plataforma
third_party Localização para quaisquer fontes de terceiros

Adicionar submódulos

O próximo passo é adicionar openthread repos necessários e qualquer outra 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 exemplo, nós estaremos adicionando uma versão lite do Silicon Labs Gecko SDK como um sub-módulo em 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.

Scripts

Para tornar as tarefas comuns mais fácil, você pode querer criar alguns scripts no script pasta. Isso pode incluir scripts para tarefas como inicialização, construção, execução de um code-linter e um script de teste para verificações de CI do GitHub.

Abaixo estão alguns exemplos de scripts que são padrão para a maioria dos repositórios de plataforma existentes.

bootstrap

Este script deve instalar todas as ferramentas e pacotes exigidos por sua plataforma de hardware. Ele também deve executar openthread 's script bootstrap para garantir que o usuário tem tudo o necessário para construir a pilha OpenThread.

Veja o script bootstrap no ot-efr32 para um exemplo.

build

O CMake script de construção deve permitir aos usuários construir a pilha OpenThread para sua plataforma. Se o seu repositório define qualquer aplicativo de exemplo, este script deve construí-lo também. Este script deve conter as opções básicas de configuração do sistema, incluindo quaisquer definições de macro específicas da plataforma.

Veja o script de construção em ot-efr32 para um exemplo.

test

Um script de teste pode ser útil para os usuários testarem as alterações usando quaisquer testes que você tenha definido. Isso pode ser algo tão simples como executar compilações de verificação de integridade ou tão complicado quanto iniciar um pacote de teste de unidade.

Em ot-efr32 , o script simplesmente executa a build de script para cada placa apoiada em cada um dos efr32 plataformas.

Veja o script de teste no ot-efr32 para um exemplo.

make-pretty

Para manter um estilo consistente, este script deve formatar códigos, scripts e arquivos markdown.

Você pode definir esse mesmo script, mas pode ser mais fácil de usar o make-pretty script que repos plataformas existentes estão usando. As chamadas de script para o openthread scripts de estilo 's e ajuda a garantir estilo consistente em todos os repositórios OpenThread.

Configuração de script do linker

O Linker GNU roteiro descreve como mapear todas as seções em arquivos de entrada ( .o arquivos "objeto" gerados pelo GNU Compiler Collection (GCC)) para o arquivo de saída final (por exemplo, .elf ). Ele também determina o local de armazenamento de cada segmento de um programa executável, bem como o endereço de entrada. O script de vinculador específico da plataforma geralmente é fornecido com o BSP da plataforma.

Configure o ld ferramenta para apontar para o script vinculador específico da plataforma usando target_link_libraries em sua plataforma de destino CMake em 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 inicialização do conjunto de ferramentas

O código de inicialização do conjunto de ferramentas geralmente é fornecido junto com o BSP da plataforma. Este código normalmente:

  1. Implementa a função de entrada ( Reset_Handler ) do programa executável
  2. Define a tabela de vetor de interrupção
  3. Inicializa o Heap e Stack
  4. Copia o .data seção de memória não volátil de RAM
  5. Salta para a função principal do aplicativo para executar a lógica do aplicativo

O código de inicialização (C ou montagem código fonte) deve ser incluído no de sua plataforma openthread- platform-name biblioteca, caso contrário, algumas variáveis-chave usadas no script vinculador não pode ser citado corretamente:

  • src/CMakeLists.txt

Exemplo: startup-gcc.c em ot-cc2538 - src/CMakeLists.txt

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