Olá caro leitor, como vai? Bom, vamos seguindo com os posts exploratórios do Zephyr RTOS. Nos últimos artigos vimos o que é o projeto Zephyr, como preparar o ambiente e o build system, e como programar a imagem contendo o kernel e a aplicação em um microcontrolador.
Pois bem sabemos que um dos grandes auxiliares do desenvolvedor é capacidade de fazer debug passo a passo para acompanhar a execução das tasks ou mesmo do kernel. Assim, neste artigo, vamos aproveitar os conhecimentos adquiridos nos tutoriais anteriores e o debug on-board da placa Freedom K64F para executarmos debug do kernel do Zephyr. Prontos? Então aqui vamos nós.
Pré requisitos para debug do kernel do Zephyr
Para que possamos efetuar o debug de kernel, é necessário ter instalados os seguintes requisitos em sua máquina:
- Eclipse IDE;
- ARM GNU Eclipse plugin;
- JLink + JLink GDB Server.
Obs: Lembrando que o procedimento vale para Windows, Linux e Mac, desde que o ambiente Zephyr esteja corretamente instalado e configurado (vejam os artigos anteriores). Se possui dúvidas em como fazer, além dos artigos anteriores, você pode consultar este passo-a-passo escrito pelo próprio pessoal do Zephyr.
Instalando o Eclipse IDE
Instale o Eclipse CDT efetuando o download da IDE aqui e descompacte a pasta no local de sua preferência.
Para executar o Eclipse IDE, basta dar um duplo clique no binário que está dentro da pasta (não é necessário instalar).
Para usuários Linux e Mac
Caso o Eclipse não esteja executável, dentro da pasta abra um terminal e execute o seguinte comando:
$ sudo chmod 755 eclipse
Insira sua senha, e ainda no terminal teste digitanto:
$ ./eclipse
Plugin GNU ARM Eclipse
Uma forma de facilitar o acesso às principais ferramentas de debug é com o uso do conhecido ARM GNU Eclipse plugin. Para instala-lo, com o eclipse aberto acesse: Help->Install New Software. Você deve ter uma tela assim:

Na caixa “Work with” insira o seguinte link: https://gnuarmeclipse.sourceforge.net/updates
Ao popular a caixa de texto você deve ver os passos para instalar o plugin:
Selecione o item e clique em Next e siga os passos para instalação do plugin. Em seguida reinicie o eclipse.
Instalando a infraestrutura para debug com o Jlink
Uma das grandes vantagens no uso da placa Freedom K64 é o debugger baseado no OpenSDA, podendo receber diferentes binários para programar e efetuar debug do microcontrolador alvo. Um deles é o conhecidissimo JLink fabricado pela Segger, que para uso com o K64 é livre.
Para instalar a imagem do JLink, obtenha o .bin diretamente no site da Segger. Escolha a versão para a Freedom K64, efetue os mesmos passos utilizados para gravar o cmsis_dap que fizemos nos artigos anteriores.
Para que o JLink seja reconhecido é necessário instalar seu device driver para que o GDB possa falar com ele. Portanto, no site da Segger, acesse especificamente este link. Selecione Software & Documentation Pack para sua distribuição Linux, instale o pacote e guarde principalmente o path de instalação do gdb server para o JLink.
Voltando ao Zephyr
A partir deste ponto assumimos que você está com o Zephyr devidamente configurado. Caso não seja esse o caso, volte nos dois primeiros tutoriais e siga-os até o fim. Entre na pasta do seu projeto, e verique se está tudo bem com ele. Para tal faça:
$ make clean $ make BOARD=frdm_k64f
Se o projeto compilar sem problemas podemos prosseguir. Observe que e o Zephyr gera um arquivo que será muito útil, o .elf que deve ser enviado ao gdb. Vejam no meu host por exemplo:

Ignorem o fato de ser MAC (sim da pra rodar nativo nele), os passos para operar o Zephyr em um e em outro são muito similares (no MAC tem o passo adicional de ter que construir a toolchain).
Voltando ao Eclipse, vamos agora criar o ambiente de debug para nosso projeto, para tal em eclipse vá em New->Project, crie um Empty C project (não se preocupe com a toolchain, o eclipse aqui será usado apenas para debug, o build do seu código continua sendo via make). Com o botão direito clique no seu projeto e selecione Debug As…->Debug Configurations assim:

Você deve ter a seguinte tela:

Vá na aba GDB Segger JLink Debugging e crie um novo target. Em seguida popule os campos desejados, em C/C++ application voce deve passar o local onde esta o .elf da sua aplicação:

Na Aba debugger, configuraremos o local onde esta o JLink gdb server. Para tal, em executable passe o caminho onde encontra-se o executável JLinkGDBServer. Ele deve estar localizado na pasta de instalação do software JLink. Em Device você deve passar o nome do microcontrolador alvo que no nosso caso é: MK64FN1M0xxx12. A tela debug deve estar assim:

Em startup somente precisamos acertar na aba set breakpoint para algum lugar que queremos que o debug pare na inicialização. Pode ser na própria função main, para tanto adicione main na caixa de texto. Com isso deve-se ter:

Dica: O breakpoint inicial da sua aplicação não precisa ser colocado diretamente na função main. No meu exemplo mesmo, tinha uma task chamada de led_red, e como o debug interessava para mim a partir daquele ponto, coloquei o breakpoint inicial naquela função.
Conclusão
A partir deste ponto está tudo pronto, basta clicar no botão debug que o mesmo vai inicializar a gravação do microcontrolador e parar o debug no breakpoint onde você setou, vejam no meu exemplo abaixo:

Agora você já pode depurar o kernel desse fantástico RTOS. Nos próximos artigos vamos começar a realmente explorar o básico do kernel para que você leitor consiga sincronizar e comunicar suas tarefas entre si. Iremos também mostrar um pouco do modelo de Device do Zephyr para a construção de drivers com periférico. Espero que esse tutorial seja de grande serventia, então é isso caríssimos, até a próxima.
Referências









Olá Felipe, gostaria de tirar uma dúvida contigo. Seu artigo me ajudou bastante à entender como configurar multi cores para debug do Kernel, porém estou enfrentando o seguinte problema. Estou tentando configurar a IDE Eclipse Version: 2019-09 R (4.13.0) para depurar o kernel via JLink da SEGGER em um IMX7 com ARM Cortex A7, o device é o seguinte MCIMX7D5_A7_0, com isto não estou conseguindo realizar a conexão do GDB entre o server e o client pelo Eclipse, fazendo todo o procedimento de debug via terminal eu consigo com sucesso, ou seja, realizando a conexão do JLink via terminal com… Leia mais »
Olá Felipe, tudo bem? Gostaria de saber se é possível criar um projeto eclipse do zero e adicionar o código fonte do Zephyr para uma determinada plataforma, no estilo FreeRTOS. Você sabe me dizer se isso é possível? Ou só podemos utilizar os makefiles do projeto para compilar o kernel e as bibliotecas do sistema? Estou ansioso pelo artigo sobre device drivers no zephyr. Abraço, Gustavo.
Ola Gustavo, tudo bem? Desculpe pela demora na resposta (por algum motivo nao estou recebendo notificacao de novos comentarios) A respota eh sim, eh possivel sim, o eclipse nesse caso apenas esta sendo utilizado como ambiente de desenvolvimento, mas nada impede que voce o utilize para criar seu projeto, o que voce deve ter em mente eh que os makefiles gerados automaticamente pelo eclipse nao terao serventia aqui, pois o build system sera o utilizado pelo zephyr, por isso eh importante que os passos de download e configuracao de ambiente do kernel sejam seguidos. Sim o artigo de device drivers… Leia mais »