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
Desenvolvedor de sistemas embarcados apaixonado pelo que faz, divide seu tempo entre trabalhar no Venturus desenvolvendo firmware de tudo quanto é coisa, na Aeolus Robotics se envolvendo com o que há de mais legal em robótica e na Overlay Tech desenvolvendo algumas coisas bem legais para o campo de motion control. Possui mestrado em engenharia elétrica pela Poli-USP e possui interesse em tópicos como: Software embarcado, sistemas de tempo real, controle, robótica móvel e manipuladores, Linux embedded e quase qualquer coisa por onde passe um elétron.

2
Deixe um comentário

avatar
 
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Felipe NevesGustavo Denardin Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
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.