Debug do kernel do Zephyr com o Eclipse IDE

Debug do kernel do Zephyr
Este post faz parte da série Zephyr. Leia também os outros posts da série:

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:

 

 

Insira sua senha, e ainda no terminal teste digitanto:

 

 

 

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:

 

Debug do kernel do Zephyr

 

Na caixa "Work with" insira o seguinte link: http://gnuarmeclipse.sourceforge.net/updates

 

Ao popular a caixa de texto você deve ver os passos para instalar o plugin:

 

Debug do kernel do Zephyr

 

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 SeggerEscolha 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 linkSelecione 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:

 

 

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:

 

Debug do kernel do Zephyr

 

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:

 

Debug do kernel do Zephyr

 

Você deve ter a seguinte tela:

 

Debug do kernel do Zephyr

 

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:

 

Debug do kernel do Zephyr

 

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:

 

Debug do kernel do Zephyr

 

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:

 

Debug do kernel do Zephyr

 

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:

 

Debug do kernel do Zephyr

 

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

 

Outros artigos da série

<< Como instalar o Zephyr no Ubuntu 16.04Desenvolvendo com o Zephyr RTOS: Controlando o Kernel >>
Este post faz da série Zephyr. Leia também os outros posts da série:
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Felipe Neves
Engenheiro de sistemas embarcados apaixonado pelo que faz, já trabalhou em diversos setores de tecnologia nos últimos 14 anos com destaque para Defesa, Automação, Agricultura, Wearables, Robótica e mais recentemente Semicondutores. Possui sangue maker, tendo paixão por construir e compatilhar suas próprias coisas e explorar novos sabores dentro do mundo "embedded". Atualmente trabalha como Engenheiro de Software Senior na Espressif, sim aquela do ESP32 e do ESP8266. Tem interesse em tópicos que envolvam Robótica, Controle de Movimento, DSP e Sistemas de Tempo Real.

3
Deixe um comentário

avatar
 
2 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Nícolas Evaristo AraújoFelipe NevesGustavo Denardin Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Nícolas Evaristo Araújo
Visitante
Nicolas Evaristo Araujo

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 »

Gustavo Denardin
Visitante
Gustavo D.

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.