[LAB] Configurando o Eclipse IDE

Para o treinamento vamos utilizar o Eclipse IDE para o desenvolvimento de algumas aplicaƧƵes. Esta escolha foi feita com base na praticidade da utilizaĆ§Ć£o da ferramenta, visto que a maiorida dos desenvolvedores embarcados jĆ” tiveram algum tipo de contato com a ferramenta.

AlĆ©m disso, uma abordagem utilizando editores de texto fazendo as compilaƧƵes por Makefiles/CMake pode ser um pouco abrupta para aqueles que nĆ£o tem familiaridade, visto que a curva de aprendizado Ć© mais complexa.

Desta forma, vamos realizar o download, configuraĆ§Ć£o e integraĆ§Ć£o desta ferramente para o desenvolvimento de aplicaƧƵes em Sistemas Linux Embarcados.

Instalando e iniciando o Eclipse

Instale o Eclipse CDT (C/C++ Development Tooling) atravĆ©s dos repositĆ³rios oficiais do Ubuntu:

sudo apt install eclipse-cdt*

O '*' no terminal Linux significa algo como don't care, desta forma ele seleciona todos os pacotes que contenham o comeƧo "eclipse-cdt".

Ao terminar o processo de instalaĆ§Ć£o, abra o Eclipse (via terminal ou pelo launcher) e configure um Workspace de sua preferĆŖncia. Ex: /home/gbs/dsle20/workspace. Em seguida, clique no Ć­cone superior direito Workbench.

Configurando a conexĆ£o entre Eclipse e Target

A conexĆ£o entre o Eclipse e a RPi serĆ” realizada via SSH, por meio do plugin RSE (Remote System Explorer). Se o comando anterior, de instalaĆ§Ć£o do Eclipse, foi executado corretamente, este plugin jĆ” estarĆ” instalado.

Antes de prosseguir nas configuraƧƵes do Eclipse, faƧa a liberaĆ§Ć£o de login sem senha de seu usuĆ”rio/mĆ”quina no servidor SSH da RPi. Para isso, primeiro gere uma chave RSA para seu host (Ubuntu):

ssh-keygen

A ferramenta irĆ” perguntar sobre local para salvar a chave criada e senha, deixe ambos como padrĆ£o, apenas tecle ENTER.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/gbs/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/gbs/.ssh/id_rsa.
Your public key has been saved in /home/gbs/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1E1uso97KS4cQYY6bo5nU5+W7H+zFnmDFhuqJaGAfeI gbs@dsle20
The key's randomart image is:
+---[RSA 2048]----+
|       .    .    |
|      . o. +     |
|   o . o. o +    |
|  . * ..o  +o    |
|   o = .So.. *   |
|    E o o oo* o  |
|   + . + B...+ . |
|  . =   X ..*    |
|   o . o.++=.o   |
+----[SHA256]-----+

Em seguida, copie sua chave recĆ©m criada para a RPi, utilizando o usuĆ”rio que vocĆŖ deseja vincular a key:

ssh-copy-id gbs@10.1.1.100
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
gbs@10.1.1.100's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'gbs@10.1.1.100'"
and check to make sure that only the key(s) you wanted were added.

Por fim, adicione sua key recĆ©m-criada ao agente de autenticaĆ§Ć£o SSH:

ssh-add
Identity added: /home/gbs/.ssh/id_rsa (/home/gbs/.ssh/id_rsa)

Este passo final vincularƔ a key com o usuƔrio utilizado no passo anterior. Assim, sempre que o comando ssh gbs@10.1.1.100 for chamado, o agente fornece tal key e remove a necessidade de digitar uma senha. FaƧa o teste:

ssh gbs@10.1.1.100

Pronto. Agora retorne ao Eclipse. Abra a perspectiva do RSE em: "Window > Open Perspective > Other...". Selecione Remote System Explorer e clique em OK.

Na janela mais a esquerda, chamada Remote Systems, clique com o botĆ£o direto no espaƧo em branco e selecione: "New > Connection...".

Na janela New Connection selecione o tipo Linux e clique em Next. Preencha com as seguintes informaƧƵes:

  • Host name: 10.1.1.100 - O endereƧo de IP da RPi;

  • Connection name: RPi3 - O nome para esta conexĆ£o (pode colocar o nome que achar melhor);

  • Description: Alguma descriĆ§Ć£o sobre essa conexĆ£o (opcional).

Clique em Next. Na janela superior esquerda, Configuration, marque a opĆ§Ć£o ssh.files e Next.

Novamente, na janela superior esquerda, Configuration, marque a opĆ§Ć£o processes.shell.linux e Next.

Em seguida, na mesma janela, marque ssh.shells, Next e por Ćŗltimo marque ssh.terminals e Finish.

A partir deste momento, serƔ possƭvel explorar os arquivos da RPi atravƩs do Eclipse.

Expanda o menu Sftp Files e perceba que todas as pastas do RootFS estĆ£o listadas ali. Ɖ possĆ­vel copiar arquivos, editar, apagar, tudo de forma integrada com o Eclipse. Provavelmente serĆ” pedida a senha do seu usuĆ”rio da RPi, apenas digite-a e o acesso aos arquivos serĆ” liberado. Caso digite errado, clique no com o botĆ£o direito no projeto e limpe as senhas.

Logo abaixo de Sftp Files, no menu Shell Processes, vocĆŖ possui acesso Ć  todos os processos (incluindo threads) em execuĆ§Ć£o no target. Ɖ possĆ­vel finalizar um processo pelo Eclipse e escolher o tipo de sinal que deseja enviar (botĆ£o direito no processo -> kill -> signal type).

No canto superior direito do Eclipse, existe um Ć­cone de atalho para a opĆ§Ć£o "Open Perspective", ele estarĆ” do lado do atalho para Remote System Explorer perspective. Clique nele e selecione a perspectiva C/C++.

Adicione tambĆ©m a View do Remote Systems na perspectiva C/C++. Dessa forma vocĆŖ pode explorar os arquivos do target na mesma perspectiva de programaĆ§Ć£o.

Selecione o menu "Window > Show View > Other...". Em seguida, selecione "Remote Systems > Remote Systems". A View Remote System Details tambĆ©m Ć© interessante. Ela exibe informaƧƵes de permissĆ£o de arquivos e diretĆ³rios.

Na aba recĆ©m-adicionada Remote Systems, Clique no Ćŗltimo Ć­cone da lista com o botĆ£o direito, Ssh Terminals, e escolha a opĆ§Ć£o Launch Terminal. Note que um novo terminal SSH serĆ” aberto numa nova aba. A partir de agora Ć© possĆ­vel tambĆ©m acessar o terminal da RPi3 via SSH, pelo Eclipse.

Cross-Compilando sua Primeira AplicaĆ§Ć£o

Na perspectiva C/C++, clique no menu "File > New > C Project". Em Project type, selecione Hello World ANSI C Project.

Em Toolchains, selecione Cross GCC. DĆŖ um nome para seu projeto em Project name: "MyFirstApp". Clique em Next e, se desejar, adicione informaƧƵes de autor (suas iniciais, por exemplo).

Next novamente, Next e, em Cross compiler prefix: arm-linux- e no campo Cross compiler path: selecione o caminho do toolchain gerado na primeira aula: /home/gbs/dsle20/toolchains/x-tools/armv8-rpi3-linux-gnueabihf/bin. Finalmente, clique em Finish.

Para compilar o projeto, acesse o menu "Project > Build All " ou CTRL+B. Se tudo foi configurado corretamente, algo como a seguinte mensagem serĆ” exibida na aba Console: "15:46:14 Build Finished (took 183ms)"

Para testar o binƔrio, copie-o da pasta Binaries, logo abaixo da pasta do seu projeto para sua pasta home, na RPi, atravƩs da janela Remote Systems. Para fazer isso, basta clicar e segurar a pasta Binaries e arrasta-la para o Home em Remote Systems.

Note que ao tentar executar o arquivo pelo terminal SSH, serĆ” exibida uma mensagem de erro, dizendo que nĆ£o Ć© possĆ­vel executar o binĆ”rio:

./MyFirstApp
-sh: ./MyFirstApp: Permission denied

Para corrigir este problema, basta dar permissƵes de execuĆ§Ć£o para o arquivo. Ainda no terminal SSH digite:

chmod +x MyFirstApp

Pronto, basta rodar a aplicaĆ§Ć£o:

./MyFirstApp
!!!Hello World!!!

Configurando o GDB no Eclipse

Acesse o menu "Run > Debug Configurations":

  • Clique duas vezes em C/C++ Remote Application;

  • Na aba "Main", no campo "Connection", selecione o nome ("RPi3") da conexĆ£o que vocĆŖ criou anteriormente no Remote System Explorer;

  • Em "Remote Absolute File Path for C/C++ Application", digite o caminho do executĆ”vel na RaspberryPi . Por exemplo: "/home/gbs/MyFirstApp";

  • Na aba "Debugger", digite "arm-linux-gdb";

  • Clique em "Apply"e depois em "Debug";

  • Ao abrir a janela perguntando se vocĆŖ deseja abrir a perspectiva de "Debug", apenas clique em Yes;

Configurando o Eclipse para Copiar seu ExecutƔvel no Target Automaticamente

Clique com o botĆ£o direito no seu projeto, na janela da esquerda chamada Project Explorer, e acesse propriedades.

Na janela exibida, navegue em "C/C++ Build > Settings". Clique na aba "Build Steps" e digite o seguinte comando no campo "Command"do bloco "Post-build steps": scp MyFirstApp gbs@10.1.1.100:/home/gbs

O comando acima faz com que o Eclipse copie seu binƔrio para o Target, na pasta "/home/gbs", a cada novo build. Apague o arquivo via terminal SSH:

rm /home/gbs/MyFirstApp

e em seguida, compile o projeto novamente e verifique que o novo binĆ”rio estarĆ” disponĆ­vel na pasta e pronto para execuĆ§Ć£o:

ls
./MyFirstApp

Configurando e Linkando Bibliotecas Externas no Eclipse

TrĆŖs configuraƧƵes devem ser realizadas no intuito de linkar uma biblioteca a um projeto do Eclipse:

  • Definir o diretĆ³rio de headers da biblioteca: A adiĆ§Ć£o deste diretĆ³rio no projeto possibilita que o indexer do Eclipse reconheƧa as funƧƵes, definiƧƵes de constantes, declaraƧƵes em geral da biblioteca. Uma vez reconhecida a biblioteca, Ć© possĆ­vel utilizar o recurso autocompletar durante a programaĆ§Ć£o. Para adicionar um diretĆ³rio de headers a um projeto do eclipse: Clique com o botĆ£o direito no projeto desejado e selecione Properperties > C/C++ Build > Settings. Em seguida, no Menu da direita, selecione as opƧƵes: Cross GCC Compiler > Includes e, finalmente, adicione o path onde se encontra os headers da biblioteca a ser incluĆ­da.

  • Definir o nome da biblioteca para linkagem durante a compilaĆ§Ć£o: AlĆ©m de definir o diretĆ³rio de headers, Ć© necessĆ”rio especificar ao compilador quais sĆ£o as bibliotecas que devem ser linkadas com o executĆ”vel do seu projeto. Para isso: Clique com o botĆ£o direito no projeto desejado e selecione Properperties > C/C++ Build > Settings. Em seguida, no Menu da direita, selecione as opƧƵes: Cross GCC Linker > Libraries e, finalmente, adicione o nome das bibliotecas que deseja linkar com seu projeto. Note que, em C, apesar de os executĆ”veis de bibliotecas normalmente serem nomeados como libNOMEDABIBLIOTECA.so, deve- se adicionar apenas o NOMEDABIBLITOECA, sem o lib e o .so. Ex: se o nome do executĆ”vel da biblioteca Ć© libpigpio.so, adiciona-se somente pigpio.

  • Definir o diretĆ³rio onde se encontra o executĆ”vel da biblioteca: AlĆ©m de definir quais bibliotecas deseja-se linkar com o executĆ”vel, Ć© necessĆ”rio indicar no projeto, o diretĆ³rio onde tal executĆ”vel se encontra, caso a biblioteca seja externa ou nĆ£o esteja incluĆ­da na GLibC. Navegue atĆ© o mesmo ponto descrito no passo anterior: Clique com o botĆ£o direito no projeto desejado e selecione Properperties > C/C++ Build > Settings. Em seguida, no Menu da direita, selecione as opƧƵes: Cross GCC Linker > Libraries. Note que existe uma barra de rolagem lateral e, ao rolĆ”-la para baixo, uma nova opĆ§Ć£o serĆ” exibida: Library Search Path:. Este Ć© o local onde deve ser indicado o diretĆ³rio contendo o executĆ”vel da biblioteca a ser adicionada.

Configurando o Path de Bibliotecas Externas no GDB

Normalmente, para debugar uma aplicaĆ§Ć£o remotamente que foi compilada com alguma biblioteca externa (nĆ£o incluĆ­da na GLIBC), Ć© necessĆ”rio definir o path de tal biblioteca em um arquivo de configuraĆ§Ć£o do GDB, chamado .gdbinit. Esse arquivo, na verdade, Ć© utilizado para passar parĆ¢metros ao gdb, que normalmente seriam passados via linha de comando.

Crie um arquivo chamado .gdbinit e adicione a seguinte linha no arquivo:

set solib-search-path /PATH/DA//BIBLITOECA

Salve o arquivo e adicione-o nas configuraƧƵes de Debug do seu projeto. Acesse o menu "Run > Debug Configurations":

  • Selecione a configuraĆ§Ć£o jĆ” realizada no passo descrito na seĆ§Ć£o de ConfiguraĆ§Ć£o do GDB no Eclipse.

  • Na aba "Debugger", no campo "GDB command file", clique no botĆ£o browse e selecione o path do arquivo .gdbinit;

Obs: a) Ɖ possĆ­vel selecionar um path qualquer para o arquivo ou; b) deixar essa opĆ§Ć£o inalterada e criar o arquivo na raiz do seu workspace atual;

Last updated