1 Comentário

Extensão do Visual Studio Code para Kernel Linux Embarcado

Extensão do VSCode

Se você está começando a trabalhar com, ou a estudar, desenvolver para sistemas embarcados microprocessados, talvez, você esbarre na tarefa de ter que desenvolver um módulo, ou editar algum device tree, para o Kernel Linux.

 

Então que ferramenta de edição de código ou IDE utilizar para ganhar agilidade nessas tarefas? O editor de código mais popular entre os desenvolvedores do Kernel Linux é o VIM, e seus muitos plugins. Não é minha intenção aqui entrar no mérito de qual a melhor IDE, editor de texto, nem blasfemar contra a religião das pessoas. É, o VIM tem até igreja para seus seguidores 😅. Brincadeiras a parte, cada um tem a sua preferência, e se adapta melhor a uma certa ferramenta.

 

Eu pessoalmente me adapto melhor ao VS Code. Usei o Atom por bastante tempo, mas o VS Code me ganhou, por ser similar ao Atom e pelas extensões, temas, APIs para criar extensões, tarefas e etc. Porém, como nem tudo são flores, para projetos com base de código grandes, caso do Kernel Linux, a extensão padrão da Microsoft para C/C++ é bem pesada, demora para indexar, devora sua memória RAM e deixa tudo travado 😢. Além de sentir falta de alguns plugins para agilizar tarefas em arquivos de device-tree. A solução foi criar uma extensão, pensando no desenvolvimento de Kernel Linux embarcado para o VS Code.

 

Extensão - Embedded Linux Kernel Dev

 

A extensão pode ser baixada no Visual Studio Marketplace. Ou no menu “View > Extensions” do próprio VS Code:

Extensão do VSCode

Estou compartilhando a extensão com licença MIT, open source. Fiquem livres para contribuir ou usar como quiserem.

 

Dependências

 

A extensão, por hora, funciona apenas em sistemas Linux e usa alguns pacotes para seu funcionamento correto. Antes de usar é necessário instalar as seguintes dependências em seu sistema:

 

  • bash
  • universal-ctags

 

Um detalhe importante é que seja instalado o universal-ctags e não o exuberant-ctags. Pois o exuberant não indexa arquivos de device tree.

 

Para uma experiência completa de desenvolvimento para o kernel Linux, durante a instalação da extensão, as seguintes extensões serão requisitadas a serem instaladas em conjunto:

 

  • DeviceTree (implementa syntax highlighting para arquivos de device-tree .dts e .dtsi)
  • kconfig (implementa syntax highlighting para arquivos Kconfig)

 

Funcionalidades

 

Todas as funcionalidades da extensão podem ser executadas, por comandos de click, pela barra de atividades:

Nos próximos tópicos, irei descrever cada uma das funcionalidades da extensão, bem como descrever o problema que resolve.

 

 

Device Driver From Compatible

 

Um das tarefas repetitivas, no meu dia dia, era a procura pelo match em arquivos “.c”, código de driver, de uma certa string “compatible”. Vamos usar o arquivo bcm2837-rpi-3-b.dts como exemplo. Esse é o device tree source que descreve o hardware do Raspberry Pi 3B para o kernel Linux. Note o trecho retirado do arquivo:

O “compatible”, em destaque na imagem, é a string que faz o “bind” entre a descrição do hardware, nó do device tree, e o driver do kernel que irá usar essa descrição. Para saber qual é o arquivo “.c” do driver que será utilizado, eu fazia uma busca, um grep, entre os arquivos “.c”, pela string do compatible. Pegava as respostas listadas, pelo grep, e abria o arquivo no editor. 

 

Agora com a extensão, dentro de um arquivo de device-tree, “.dts” ou “.dtsi”, posso clicar com o mouse sobre uma string de “compatible” e selecionar o comando “Device Driver from compatible”. O VS Code irá realizar o match, busca, automaticamente e vai abrir o arquivo de código, “.c”, do driver que implementa o “compatible”:

 

 

Essa funcionalidade também pode ser selecionada no menu de contexto, com click do botão direito:

 

 

Device Tree Doc From Compatible  

 

Aqui o mesmo problema de procura por string de “compatible” acontecia, só que para arquivos de documentação. Todos os device tree bindings tem uma documentação em “Documentation/devicetree/bindings”. 

 

Agora com a extensão dentro de um arquivo de device-tree, “.dts” , “.dtsi”, ou código “.c”, posso clicar com o mouse sobre uma string de “compatible” e selecionar o comando “Device Tree Doc From Compatible”. O VS Code irá abrir o arquivo de documentação respectivo ao “compatible”:

 

 

Essa funcionalidade também pode ser selecionada no menu de contexto, com click do botão direito:

 

 

ARM/ARM64 dts/dtsi From Include

 

Geralmente arquivos “.dts” tem seus includes, “.dtsi”. A repetição que eu tinha aqui era de ter que ir até o terminal, digitar o caminho e nome do arquivo “.dtsi” para abrir o include.

 

Agora com a extensão dentro de um arquivo de device-tree, “.dts” ou “.dtsi”, apenas clico com o mouse sobre o string, de um device-tree include, e selecione o comando “ARM dts/dtsi From Include”. O VS Code irá abrir o arquivo correspondente automaticamente:

 

 

Essa funcionalidade também pode ser selecionada no menu de contexto, com click do botão direito:

 

 

Há duas opções deste comando, uma para ARM e outra para ARM64, pois os devices-tree para cada uma dessas ficam em caminhos diferentes.

 

Linux Include From Selected

 

Essa é uma funcionalidade da qual sentia falta, que funcionava na extensão padrão do C/C++, para abrir includes “.h”.

 

Dentro de arquivos “.c”, “.dts” ou “.dtsi”, clique com o mouse sobre um string de um include e selecione o comando “Linux Include From Selected”. O VS Code irá abrir o include correspondente:

 

 

Essa funcionalidade também pode ser selecionada no menu de contexto, com click do botão direito:

 

 

Generate CTags

 

Por último, mas, nem de longe, a menos importante. Essa funcionalidade gera um arquivo “.vscode-ctags” na raiz da pasta que foi aberta. Esse arquivo é o índice de tags gerado pelo universal-ctags. Ele é necessário para gerar as ajudas de navegação no código do projeto:

 

  • Pular para a definição:

 

  • Dicas para completar código:

 

  • Mouse hover tags:

 

O Ctags resolve o problema das dicas de código e navegação da extensão C/C++ do VS Code. As funcionalidades são mais básicas, não possui um code linter por exemplo, mas em contrapartida é bem mais leve e fluído.

 

 

Atalhos de Teclado

 

Outro funcionalidade interessante é que a extensão também exporta todos os comandos, para serem usados em atalhos de teclado. Utilize os seguintes nomes para assinar os comandos aos atalhos de sua preferência:

 

  • embeddedLinuxDev.findAndOpenDeviceTreeDoc
    • Device Tree Doc From Compatible
  • embeddedLinuxDev.findAndOpenDeviceTreeMatchDriver
    • Device Driver From Compatible
  • embeddedLinuxDev.openArmDtsDtsi
    • ARM dts/dtsi From Include
  • embeddedLinuxDev.openArm64DtsDtsi
    • ARM64 dts/dtsi From Include
  • embeddedLinuxDev.findAndOpenDeviceTreeMatchDriver
    • Generate CTags

 

Exemplo, definindo o atalho “alt+d” para executar o comando “Device Tree Doc From Compatible”:

Confira também o vídeo aonde mostro na prática a utilização da extensão:

 

 

Conclusões

 

Essas foram as funcionalidades implementadas, que resolvem e agilizam meu workflow, para desenvolvimento de kernel Linux embarcado, utilizando o VS Code.

 

Eu considero o VS Code bem amigável e com uma estrutura bem intuitiva. A utilização de Linux para dispositivos e soluções embarcados é crescente, e eu vejo o VS Code como a ferramenta, para edição de código, de escolha para desenvolvedores que estão migrando para o mundo do Linux embarcado. Digo minha experiência pessoal, ainda lá na época que migrei do Windows e Visual Studio, para o Linux e Atom. Achei o VIM e as outras opções meio “esquisitas” ao que estava acostumado. 

 

A extensão está em uma versão Alfa. Há coisas que poderiam ser melhoradas ou incluídas. Fiquem a vontade para contribuir. O bacana do open source é isso. Você não fica preso a uma ferramenta, pode estender ela, reutilizar funcionalidades, escrever a sua própria 😎.

 

Espero que tenham gostado da extensão, se for útil pra você deixe eu saber. Comente aqui nos comentários. Abraços!

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

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

Software » Extensão do Visual Studio Code para Kernel Linux Embarcado
Talvez você goste:
Comentários:

1
Deixe um comentário

avatar
 
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
André Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
André
Visitante
André

Eu nem sabia que o VS Code roda no Linux kkk

Séries

Menu

WEBINAR
 
Linux Embarcado: Desvendando o Pin Control Subsystem - Kernel Linux

Data: 26/02 às 19:30 h | Apoio: Mouser Electronics
 
INSCREVA-SE AGORA »



 
close-link