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

Configure o ambiente de build

Veja o código no GitHub

Para promover o desenvolvimento sem custo financeiro e aberto, o OpenThread usa CMake no conjunto de ferramentas do build. No momento, esse conjunto de ferramentas é necessário para transferir o OpenThread para uma nova plataforma de hardware.

Outros conjuntos de ferramentas de compilação podem ser compatíveis no futuro, mas eles não estão no escopo deste guia de portabilidade.

Crie um novo repositório

O primeiro passo é configurar um novo lar para sua plataforma de hardware. Neste guia, criaremos um novo repositório chamado ot-efr32, que contém a camada de abstração da plataforma, o SDK da plataforma de hardware e alguns scripts úteis.

Neste exemplo, criamos o repositório SiliconLabs/ot-efr32 no GitHub e o clonamos 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 os repositórios de plataforma existentes na organização do GitHub OpenThread, estruture seu repositório da seguinte maneira:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Pasta Descrição
examples Opcional Aplicativos de exemplo
openthread O repositório openthread como um submódulo
script Scripts para criação, teste, lint
src Implementação da camada de abstração da plataforma
third_party Localização de fontes de terceiros

Adicionar submódulos

A próxima etapa é adicionar o openthread e outros repositórios necessários como 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, adicionaremos uma versão Lite do SDK da Silicon Labs Gecko como um submó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 facilitar tarefas comuns, crie alguns scripts na pasta script. Isso pode incluir scripts de tarefas como inicialização, criação, execução de um linter de código e um script de teste para verificações de CI do GitHub.

Veja abaixo alguns exemplos de scripts padrão para a maioria dos repositórios de plataforma existentes.

bootstrap

Esse script deve instalar todas as ferramentas e pacotes exigidos pela plataforma de hardware. Ele também precisa executar o script de inicialização de openthread para garantir que o usuário tenha tudo o que é necessário para criar a pilha do OpenThread.

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

build

O script de compilação CMake permite que os usuários criem a pilha do OpenThread para sua plataforma. Se o repositório definir algum exemplo de aplicativo, esse script também precisará criá-lo. Esse script deve conter as opções básicas de configuração do sistema, incluindo as definições de macro específicas da plataforma.

Consulte o script de compilação em ot-efr32 para ver um exemplo.

test

Um script de teste pode ser útil para os usuários testarem mudanças usando os testes definidos por você. Pode ser algo tão simples quanto executar verificações de integridade ou executar um conjunto de testes de unidade complexo.

No ot-efr32, o script simplesmente executa o script build para cada placa compatível em cada uma das plataformas efr32.

Veja um exemplo de script no ot-efr32.

make-pretty

Para manter um estilo consistente, esse script precisa formatar o código, scripts e arquivos de marcação.

Você pode definir esse script por conta própria, mas pode ser mais fácil usar o script make-pretty que os repositórios de plataforma existentes estão usando. O script chama os scripts de estilo de openthread e ajuda a garantir o estilo consistente em todos os repositórios OpenThread.

Configuração do script do vinculador

O script GNU Linker descreve como mapear todas as seções nos arquivos de entrada (.o "object" gerados pela Coleção GNU Compiler (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 do vinculador específico da plataforma geralmente é fornecido com o BSP da plataforma.

Configure a ferramenta ld para apontar para o script do vinculador específico da plataforma usando target_link_libraries no destino do CMake da plataforma 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 com o BSP da plataforma. Normalmente, esse código:

  1. implementa a função de entrada (Reset_Handler) do programa executável;
  2. Define a tabela de vetores de interrupção
  3. Inicializa o heap e a pilha
  4. Copia a seção .data da memória não volátil para a RAM.
  5. Pula para a função principal do aplicativo e executa a lógica dele

O código de inicialização (C ou código-fonte assembly) precisa ser incluído na biblioteca openthread-platform-name da sua plataforma. Caso contrário, algumas variáveis principais usadas no script do vinculador não podem ser cotadas corretamente:

  • src/CMakeLists.txt

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

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