1. Instalando o Homebrew
O caminho mais limpo e sem dores de cabeça no Mac é usando o Homebrew. Se você não tiver o Homebrew instalado, basta rodar o comando oficial deles no terminal antes de começar:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. Instalando as dependências
Abra o Terminal e instale as ferramentas de compilação e o Python atualizado.
brew install cmake ninja gperf python3 ccache dfu-util dtc wget xz coreutils
3. Instalar o West e Inicializar o Workspace
O west gerencia todo o ecossistema do Zephyr. Vamos instalá-lo e criar a pasta do projeto.
pip3 install --user -U west
O westnormalmente é instalado no diretório ~/Library/Python/3.x/bin. O x depende da versão do Python instalada no seu sistema. Verifique antes do caminho correto.
Por exemplo, suponha que o westfoi instalado em /Library/Python/3.13/bin. Neste caso, você terá que inserir esse diretório na sua variável PATH. Faça isso editando o arquivo de configuração ~/.zshrc ou ~/.bashrc (dependendo se seu shell é o ZSH ou BASH). Em qualquer um dos casos, edite o arquivo de configuração e acrescente a linha que segue no final.
export PATH="$HOME/Library/Python/3.13/bin:$PATH"
Feche seu terminal e o abra novamente. Isso vai garantir que a variável PATH foi atualizada.
Abra o terminal em uma pasta, por exemplo ~/ZephyrRTOS, onde ficarão todos os seus projetos Zephyr RTOS. Dentro desta pasta, crie outra pasta chamada STM.
Agora, inicalize o Workspace dentro da pasta STM.
west init STM
cd STM
Já que vamos trabalhar com microcontroladores ARM da STM, habilite especificamente o grupo da ST (hal_st) e dependências de arquitetura (cmsis).
west config manifest.group-filter -- "+hal_st,+cmsis"
west update --narrow --fetch-opt=--depth=1
4. Instalando o Toolchain STM32
Agora, você precisa instalar o compilador que vai transformar o seu código em um binário compatível com o seu microcontrolador (no nosso caso, o ARM). Para isso, [clique aqui](Releases · zephyrproject-rtos/sdk-ng · GitHub) e depois clique no título da versão latest.
Na próxima página, aparece duas tabelas: SDK Bundle e GNU Toolchains. Primeiro, instale a versão Minimal compatível com o seu sistema (Linux, macOS ou Windows). Depois, instale o tollchain de acordo com seu microcontrolador e seu sistema. Veja em mais em detalhes em seguida.
Em vez de baixar o pacote completo (_gnu.tar.xz), que vem com compiladores para todas as arquiteturas do planeta, nós vamos baixar o pacote minimal para macOS e adicionar apenas a toolchain para ARM. Faça o que segue.
Criar a pasta toolchain assumindo que você ainda está na pasta STM.
cd ../
mkdir toolchain
cd toolchain
Se o seu Mac for Apple Silicon (M1/M2/M3), faça o seguinte no terminal:
# 1. Baixe o SDK Minimal v1.0.1 para macOS (ARM64 nativo)
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v1.0.1/zephyr-sdk-1.0.1_macos-aarch64_minimal.tar.xz
# 2. Extraia o conteúdo (ele criará a pasta zephyr-sdk-1.0.1)
tar xvf zephyr-sdk-1.0.1_macos-aarch64_minimal.tar.xz
cd zephyr-sdk-1.0.1
# 3. Baixe APENAS a toolchain do compilador GNU ARM (usado pelos STM32)
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v1.0.1/toolchain_gnu_macos-aarch64_arm-zephyr-eabi.tar.xz
# 4. Extraia a toolchain diretamente para dentro do SDK
tar xvf toolchain_gnu_macos-aarch64_arm-zephyr-eabi.tar.xz
Agora, precisamos registrar o toolchain no sistema. Só precisa rodar o script de configuração para que o CMake do Zephyr saiba exatamente onde encontrá-los:
./setup.sh -t arm-zephyr-eabi
O script vai registrar o caminho no arquivo de configuração global do CMake do seu usuário (~/.cmake/packages/Zephyr-sdk). Pronto! Você não precisa configurar variáveis de ambiente complexas no seu ~/.zshrc ou ~/.bashrc.
5. Onde inserir seu projeto
Sua pasta ~/ZephyrRTOS ficará organizada de forma limpa e otimizada como segue:
~/ZephyrRTOS/
├── .west/ <-- Seu Workspace Zep
├── STM/ <-- Seu Workspace Zephyr (Core + HAL ST + Seus Projetos)
│ └── zephyr/
│ | └── samples/
│ └── .west/ <-- Pasta criada pelo comando west init
│ └── meu_projeto/ <-- Pasta base com seu projeto
└── toolchain/ <-- O Compilador Isolado
└── zephyr-sdk-1.0.1/
├── arm-zephyr-eabi/ <-- Único compilador instalado (Cortex-M)
└── setup.sh
Como indicado, ao criar um novo projeto, é importante que a pasta base deste projeto (no exemplo, ela é referenciada por meu_projeto) fique no mesmo nível da pasta oculta .west, criada pelo comando west init.
6. Build
Uma vez que sue projeto for criado e seu código fonte estiver pronto, você pode compilá-lo. Para isso, use o comando que segue.
west build -b weact_stm32g431_core/stm32g431xx
Cada parte dele tem uma função específica no ecossistema do Zephyr:
west
É a ferramenta de gerenciamento do Zephyr (meta-tool). Ela funciona como um “guarda-chuva” que orquestra várias ferramentas por baixo dos panos (como Git, CMake, Ninja, compiladores GCC para ARM e gravadores).build
É o subcomando dowestresponsável por invocar o sistema de compilação (CMake + Ninja). Ele analisa o código-fonte (src/), as configurações (prj.conf), o mapeamento de hardware (app.overlay) e os arquivos de compilação (CMakeLists.txt) para gerar os binários.-b(ou--board)
Sinaliza para o compilador qual é a placa/plataforma de destino.weact_stm32g431_core/stm32g431xx
Indica o identificador da placa e a variante do microcontrolador (SoC):
weact_stm32g431_core: Nome do modelo da placa de desenvolvimento da WeAct./stm32g431xx: A variante específica do chip STM32G431 utilizada nela.
6.1 Como identificar sua placa
A melhor forma de descobrir o nome exato que vem depois do -b (board) no Zephyr é usando a própria ferramenta West através do terminal. Como a árvore de dispositivos (Device Tree) e os nomes das placas mudam ou ganham variações conforme o Zephyr atualiza, os comandos internos são sempre a fonte da verdade.
Aqui estão as três melhores maneiras de descobrir e listar esses nomes:
6.1.1. O Método Definitivo: west boards (A partir do terminal)
O comando mais rápido e prático para listar todas as placas suportadas no seu workspace atual é o west boards.
Por exemplo, caso você esteja focado estritamente na família STM32, você pode filtrar a saída usando o comando padrão do terminal (grep no macOS/Linux).
Navegue até a pasta do seu workspace e rode:
cd ~/ZephyrRTOS/STM/zephyr
west boards | grep stm32
Se você quiser procurar especificamente por uma placa de um fabricante alternativo (como a WeAct Studio, que você mencionou), você pode filtrar por ela:
west boards | grep stm32 | grep weact
O terminal vai retornar exatamente a string mágica que você precisa passar para o -b, por exemplo: weact_stm32g431_core ou weact_stm32g431_core/stm32g431xx.
6.1.2. Olhando a estrutura de pastas do Zephyr
Se você quiser entender de onde o West tira esses nomes, eles refletem exatamente a estrutura de arquivos dentro do repositório do Zephyr.
Todas as placas ficam mapeadas dentro do diretório boards/. Você pode listar as pastas dessa região para encontrar o que procura:
ls ~/ZephyrRTOS/STM/zephyr/boards/weact/
(Nas versões mais recentes do Zephyr, as placas passaram a ser organizadas por fabricante dentro de boards/<fabricante>/<nome_da_placa>).
Se você entrar na pasta da placa (ex: boards/weact/weact_stm32g431_core/), você verá um arquivo chamado board.yml. É dentro desse arquivo que o Zephyr define os alvos de build (como o stm32g431xx).
6.1.3. Deixando o West sugerir (Forçando um erro amigável)
Se você souber parte do nome da placa mas não lembrar o resto, você pode simplesmente digitar um nome errado ou incompleto de propósito. O West interromperá o build e listará as opções mais próximas ou todas as placas disponíveis no sistema.
Por exemplo:
west build -b weact_g431_errado samples/basic/blinky
O Zephyr vai retornar uma mensagem de erro parecida com:
FATAL ERROR: board 'weact_g431_errado' not found.
Valid boards include:
- nucleo_g431rb
- weact_stm32g431_core
...
No seu dia a dia desenvolvendo para a linha STM32G431 ou similares da ST, deixe um terminal aberto e use sempre o west boards | grep g431 para validar se o Zephyr mapeou sua placa exatamente com o sufixo do chip (/stm32g431xx) ou apenas com o nome base da placa.
7. Flash
Após o build, com o binário gerado, ele pode ser gravado no microcontrolador e executado. Para isso, use o comando que segue.
west flash -d build -r openocd --config ./openocd_hla.cfg
Em seguida, cada parte deste comando é dicutida em detalhes.
-
westA ferramenta de gerenciamento do ecossistema Zephyr. Ela atua como uma interface unificada para diversas ações de desenvolvimento (como gerenciar repositórios, compilar e gravar).
-
flashÉ o subcomando do
westencarregado de transferir (gravar) o binário compilado da memória do seu computador diretamente para a memória Flash do microcontrolador (por exemplo, o STM32G431). -
-d build(ou--build-dir build)Especifica a pasta onde estão localizados os arquivos gerados no processo de build (compilação).
- Por padrão, o
westprocura uma pasta chamadabuild/no diretório atual. - Ele precisa acessar essa pasta para localizar o arquivo de metadados do runner (
runners.yaml) e o arquivo binário compilado (zephyr.hexouzephyr.bin).
- Por padrão, o
-
-r openocd(ou--runner openocd)Seleciona o runner (o driver/ferramenta de gravação) que será usado para conversar com a placa.
- O Zephyr suporta múltiplos runners (ex:
jlink,pyocd,nrfjprog,dfu, etc.). - Ao declarar
-r openocd, você está instruindo owesta invocar o utilitário OpenOCD (Open On-Chip Debugger) para gerenciar a comunicação com o programador ST-Link conectado.
- O Zephyr suporta múltiplos runners (ex:
-
--config ./openocd_hla.cfgEsses são argumentos extras passados diretamente para o backend do runner selecionado (OpenOCD).
- Ele diz ao OpenOCD para ler o arquivo de configuração local
openocd_hla.cfgem vez de usar as configurações geradas automaticamente pelo Zephyr. - Isso é essencial para que o OpenOCD saiba que deve operar no modo de alto nível (
hla_swd) e em velocidade reduzida (500 kHz).
- Ele diz ao OpenOCD para ler o arquivo de configuração local
7.1 O arquivo openocd_hla.cfg
Para quem usa aquele gravadores não oficiais e baratos, que usam a versão 2 do ST Link, o arquivo openocd_hla.cfg é indispensável. O conteúdo desde arquivo é o que segue.
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32g4x.cfg]
adapter speed 500
Esse arquivo garante que o OpenOCD usará configurações mais modestas, compatível com o gravador.
8. Conclusão
A instalação manual do Zephyr RTOS no macOS oferece um ambiente de desenvolvimento extremamente limpo, robusto e otimizado para sistemas embarcados. Ao optar pelo uso do West combinado com a instalação cirúrgica do SDK Minimal e apenas o toolchain necessário para a arquitetura ARM (Cortex-M), evita-se o desperdício de espaço em disco e o acúmulo de dependências desnecessárias.
Além disso, a integração direta com o CMake dispensa a necessidade de gerenciar variáveis de ambiente complexas no sistema, enquanto o uso do OpenOCD com configurações personalizadas (como o openocd_hla.cfg) confere a flexibilidade necessária para trabalhar de forma estável com diferentes hardwares de gravação. Com o ecossistema devidamente estruturado e os comandos de build e flash compreendidos, o workspace está pronto para o desenvolvimento de aplicações robustas e de alto desempenho para a linha STM32.
