sábado, 7 de dezembro de 2024

MILK-V - UTILIZANDO QT IDE PARA PROGRAMAR - Hello e Blink

Configurando um IDE para Build e execute no Milk-V Duo

A construção de programas com C ou C++ para o dispositivo Milk-V Duo é bem explicada pelos exemplos do Milk-V Duo no GitHub . No entanto, embora o processo explicado nos exemplos seja bom para prova de conceito, eu realmente quero o conforto e a conveniência fornecidos pelo meu IDE.
(Tradução, adaptações, acertos e testes)

ABSTRACT:

Esta postagem explica como você pode configurar o QtCreator para criar um aplicativo C++, implantá-lo e executá-lo em um dispositivo Milk-V Duo.

REQUISITOS:

Uma máquina de desenvolvimento Linux funcional (foi utilizado WSL2 com UBUNTU 24)
Configuração de acesso ssh ou similar.

1 Baixando o SDK e Toolchain, bem como o QTcreator

Primeiro clone o SDK e a cadeia de ferramentas (TOOLCHAIN) e $SOMEWHERE como na listagem 1

$ cd $SOMEWHERE
$ git clone --recursive --depth 1 https://github.com/milkv-duo/duo-sdk.git

Listagem 1: Clone o SDK com sysroot e toolchain.



sudo apt install -y qtcreator qtbase5-dev qt5-qmake cmake


2 Adicione GCC como compiladores ao QtCreator

Inicie o QtCreator e selecione "Edit" → "Preferences" na barra de menu principal. Ele pode se mover entre as versões, mas você deve acabar com um diálogo semelhante à imagem 1. Clique:


  1.  Edit-->Preferences--> "Kits"
  2. "Compilers"
  3. "Add▾" e selecione "GCC" → "C++"
  4. Navegue ou insira o caminho completo para c++
  5. Selecione "riscv-linux-generic-elf-64bit"
    /home/ubuntu/duo-sdk/riscv64-linux-musl-x86_64/bin/riscv64-unknown-linux-musl-c++
  6. Digite um nome de sua preferência que permita que você se lembre de que este é o compilador C++ para seu Milk-V Duo.
Adicione um compilador C++. O caminho está vermelho nesta imagem por causa do $SOMEWHERE.
Imagem 1: Adicione um compilador C++. O caminho está vermelho nesta imagem por causa do $SOMEWHERE. 🔍

Repita o processo acima, mas selecione "GCC" → "C" e navegue até o compilador C como na imagem 2.
/home/ubuntu/duo-sdk/riscv64-linux-musl-x86_64/bin/riscv64-unknown-linux-musl-gcc

Adicione um compilador C. O caminho é lido nesta imagem por causa do $SOMEWHERE.
Imagem 2: Adicione um compilador C. O caminho é lido nesta imagem por causa do $SOMEWHERE. 🔍

Agora você pode fechar a caixa de diálogo de preferências.

3 Certifique-se de ter o CMake

sudo apt install -y qtcreator qtbase5-dev qt5-qmake cmake

Como você tem o QtCreator instalado, provavelmente já tem o CMake instalado. Se você sabe que tem o CMake instalado e registrado no QtCreator, pode pular para a seção 5. Se não, continue abaixo.

Abra novamente a caixa de diálogo de preferências selecionando "Edit" → "Preferences" na barra de menu principal e clique em

  1. CMake
  2. Tools
  3. Verifique se você tem um CMake detectado automaticamente. Se você tiver um CMake detectado, você está bem e pode pular diretamente para seção 5.


Se você já tem o CMake, você terá ❸
Imagem 3: Se você já tem o CMake, você terá ❸ 🔍

Se você não tiver o CMake instalado, instale-o usando o gerenciador de pacotes do seu sistema, reinicie o QtCreator e repita a seção 3 até que você tenha um CMake detectado automaticamente na etapa 3.

sudo apt install -y qtcreator qtbase5-dev qt5-qmake cmake

4 Crie um 'Dispositivo'  (Device)

O QtCreator entende vários tipos de dispositivos: Desktop, celulares e dispositivos embarcados, para citar alguns. 'Dispositivos' contêm informações sobre como implementar um binário e como se conectar ao dispositivo. Criaremos um dispositivo 'Milk-V Duo'.

Abra a caixa de diálogo 'Preferences' novamente. Agora você já deve estar familiarizado com como fazer isso. Clique

  1. Devices
  2. A aba "Devices".
  3. "Add…"

como na figura 4.

Navegando para 'Adicionar…' novo dispositivo.
Imagem 4: Navegando para 'Adicionar…' novo dispositivo. 🔍

Na caixa de diálogo pop-up, conforme mostrado na figura 5, clique

  1. "Remote Linux Device"
  2. "Start Wizard"
Inicie o assistente para criar um novo dispositivo Linux remoto.
Imagem 5: Inicie o assistente para criar um novo dispositivo Linux remoto. 🔍

Agora será apresentada uma caixa de diálogo semelhante à da figura 6 .

  1. Insira um nome que você ache adequado. Já que estamos montando uma placa Milk-V Duo, 'Milk-V Duo' é um ótimo nome, eu acho. Muito melhor que "BeagleBone(r) Black Industrial", pelo menos.
  2. Insira o endereço IP ou nome do host. Supondo que você tenha configurado conexões ssh  insira 'milkvduo'
  3. Digite a porta, sua placa está escutando. A menos que você tenha mudado deliberadamente a configuração ssh na placa , digite 22. 
  4. Insira o usuário com o qual você quer fazer login. Para placas pristine, é 'root'. Se você alterou isso, consulte o item 3, frase 3 acima.
  5. Por fim, clique em "Next"
Insira detalhes para o novo dispositivo. O nome do host usando um nome de host pressupõe que você tenha um servidor DNS ou um .ssh/config apropriado
Imagem 6: Insira detalhes para o novo dispositivo. Nome do host usando um nome de host "pressupõe" que você tenha um servidor DNS ou um .ssh/config apropriado 🔍

Agora você será presenteado com a possibilidade de implantar chaves para seu Milk-V Duo como na imagem 7. Não faça isso. Eu assumo que você já fez isto , então simplesmente clique em "Next".

Não preencha nenhum detalhe. Basta clicar em 'Próximo'
Imagem 7: Não preencha nenhum detalhe. Basta clicar em 'Próximo' 🔍

Após clicar em "Next", o QtCreator testará a conexão com seu novo 'Device' e, eventualmente, você verá algo semenhante à imagem 8. Se você vir algo que pareça "sem sucesso", tente desligar e ligar o computador novamente e começar tudo de novo. Vamos supor que você está com sorte e simplesmente clicar em "Close"

Meu DUO S estava no IP 192.168.100.128


QtCreator testando conectividade. Veja todos os 'found's. Isso está ótimo!
Imagem 8: QtCreator testando conectividade. Veja todos os 'found's. Isso está ótimo! 🔍

Agora você está pronto para criar um 'kit' 🥳

5 Crie um 'Kit'

Um 'Kit' é uma coleção de compiladores, um dispositivo e uma versão das bibliotecas Qt. Se você não sabe o que são bibliotecas Qt, não se preocupe. Não a usaremos aqui, mas o QtCreator é criado para desenvolvimento em C++ com as bibliotecas Qt e, como tal, as bibliotecas Qt são parte integrante de um kit, mas o deixaremos em branco.

Vamos lá e abrimos a caixa de diálogo "Preferences" e

  1. Clique em "Kits"
  2. Selecione a aba "Kits"
  3. Clique em "Add". Isso criará um kit sem nome e vazio, que preencheremos agora.
  4. Selecione um nome apropriado para seu kit. Eu sugiro "Milk-V Duo via RDNSS" porque "Raspberry Pi sobre RFC 2549" seria enganoso.
  5. No menu suspenso, selecione "Dispositivo Linux remoto"
  6. Selecione o dispositivo que criamos anteriormente na seção 4 .
  7. Selecione o dispositivo que criamos anteriormente na seção 4 .
  8. Selecione o compilador C que você registrou na seção 2. .
  9. Selecione o compilador C++ que você registrou na seção 2 .
  10. Navegue até, ou insira, o caminho para a pasta sysroot no SDK que você clonou na seção 1 .

exatamente como mostrado na imagem 9.

  1. É opcional, mas você pode especificar um ícone legal para seu novo kit. Vou sugerir algo com uma mão fechada e um dedo médio estendido, porque parece ser assim que seu novo conselho pensa em você.
Crie um 'kit' para seu dispositivo Milk-V Duo.
Imagem 9: Crie um 'kit' para seu dispositivo Milk-V Duo. 🔍
  1. Por fim, clique em "Apply" e seu novo kit estará criado!

Qt version deve ser "None" (não alertado pelo Autor no texto, mas está na imagem 9)


Agora podemos prosseguir com a utilização do kit e programar a placa Milk-V Duo.

6 Crie um programa C++ para o Milk-V Duo

Finalmente, é hora de escrever código!! OBA!

Inicie o QtCreator e clique em CTRL-SHIFT-Npara iniciar um novo projeto e clique em

  1. "Non-Qt Project"
  2. "Plain C++ Application"
  3. "Choosen…"

como na imagem 10.

Crie um novo projeto C++ sem as bibliotecas Qt.
Imagem 10: Crie um novo projeto C++ sem as bibliotecas Qt. 🔍

no próximo diálogo, imagem 11

  1. Insira um nome de sua preferência. Neste post, usaremos "mil-qt-v" :)
  2. Escolha uma pasta para armazenar seu novo projeto
  3. Clique em "Next >"
Insira o nome e o local do seu novo projeto.
Imagem 11: Insira o nome e o local do seu novo projeto. 🔍

Na próxima etapa, como na imagem 12,

Escolha CMake como sistema de compilação.
Imagem 12: Escolha CMake como sistema de Build. 🔍

selecione CMake como sistema de compilação e clique em "Next >".

Agora você precisa selecionar o kit que acabamos de criar para seu novo projeto, como na imagem 13

Escolha seu novo kit.
Imagem 13: Escolha seu novo kit. 🔍
  1. Desmarque todos os kits que você possa ter
  2. Certifique-se de que seu novo kit esteja verificado.
  3. Verificando o kit, irá desdobrar uma lista de caminhos que você pode preencher. Apenas deixe-os vazios
  4. Clique em "Next >"



Tudo o que você precisa fazer agora é configurar o sistema de controle de revisão, você pode querer usar e pronto. Veja a imagem 14.

Configurar sistema de controle de revisão.
Imagem 14: Configurar sistema de controle de revisão. 🔍

Neste exemplo iremos

  1. Selecione <None> para controle de revisão e
  2. Clique em "Finish"

O QtCreator agora fará algum trabalho e, eventualmente, você deverá ver uma tela como a imagem 15.


O novo projeto está configurado e preenchido com algum código boilerplate pronto para ser construído!
Imagem 15: O novo projeto está configurado e preenchido com algum código pronto para ser  efetuado o Build 🔍

A imagem 15 também mostra alguns recursos interessantes do QtCreator:

  1. Uma visualização do projeto com os únicos dois arquivos em seu projeto no momento:
    • CMakeLists.txt
    • main.cpp Ao clicar neles você pode editá-los na visualização principal,
  2. Um conjunto de visualizações de relatórios. Ao clicar no nome de uma visualização, você pode abri-la e ocultá-la.
  3. O "martelo verde!" Quando habilitado, você pode pressioná-lo e seu projeto é "Build"ado. A saída do processo de Build será visível no relatório "4 Compile Output".

Quando terminar de olhar ao redor, clique no martelo e dê uma olhada no "4 Compile Output". Deve ser parecido com listagem 2

13:49:56: Running steps for project mil-qt-v...
13:49:56: Starting: "/usr/bin/cmake" --build /tmp/mil-qt-v --target all
[0/1 0.0/sec] Re-running CMake...
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/mil-qt-v
[1/2 6.1/sec] Building CXX object CMakeFiles/mil-qt-v.dir/main.cpp.o
[2/2 9.8/sec] Linking CXX executable mil-qt-v
13:49:56: The process "/usr/bin/cmake" exited normally.
13:49:56: Elapsed time: 00:00.
Listagem 2: Uma compilação bem-sucedida do seu projeto


ubuntu@DESKTOP-UHGFA4M:~/mil-qt-v$ ls -l total 140 -rwxr-xr-x 1 ubuntu ubuntu 25328 Dec 7 11:11 192.168.100.28 -rw-r--r-- 1 ubuntu ubuntu 17023 Dec 7 10:22 CMakeCache.txt drwxr-xr-x 6 ubuntu ubuntu 4096 Dec 7 11:11 CMakeFiles -rw-r--r-- 1 ubuntu ubuntu 316 Dec 7 10:22 CMakeLists.txt -rw-r--r-- 1 ubuntu ubuntu 31136 Dec 7 11:07 CMakeLists.txt.user -rw-r--r-- 1 ubuntu ubuntu 7109 Dec 7 10:22 Makefile drwxr-xr-x 3 ubuntu ubuntu 4096 Dec 7 10:22 Testing -rw-r--r-- 1 ubuntu ubuntu 2510 Dec 7 10:22 cmake_install.cmake -rw-r--r-- 1 ubuntu ubuntu 108 Dec 7 10:22 main.cpp -rwxr-xr-x 1 ubuntu ubuntu 25328 Dec 7 10:27 mil-qt-v -rw-r--r-- 1 ubuntu ubuntu 941 Dec 7 10:22 qtcsettings.cmake ubuntu@DESKTOP-UHGFA4M:~/mil-qt-v$







Finalmente é hora de executar o programa no seu Milk-V Duo. Ansiosamente você clica em e espera o relatório "3 Application Output" aparecer, Hello World!mas infelizmente. Tudo o que você obtém é listagem 3 :


13:52:17: Cannot deploy: rsync is only supported for transfers between different devices.
Error while building/deploying project mil-qt-v (kit: Milk-V Duo via RDNSS)
When executing step "Deploy files"
Listagem 3: A implantação no Milk-V Duo falhou.

Bem. Você se lembra da nota de rodapé da seção Criar um Novo Dispositivo? É isso que volta a nos morder agora. Não tenho ideia do porquê é assim, mas felizmente posso ajudar você a encontrar uma solução. Temos que excluir algumas das chamadas etapas de implantação e adicionar algumas. Continue com outro par de luvas de borracha e clique como na imagem 16

Navegue até a configuração de implantação do seu projeto.
Imagem 16: Navegue até a configuração de implantação do seu projeto. 🔍
  1. Clique em "Projects"
  2. Selecione o projeto em que estamos trabalhando.
  3. Selecione a opção relevante "Run" 

Isso deve abrir algumas configurações na janela principal, como na imagem 17:

Exclua todas as etapas de implantação existentes.
Imagem 17: Excluir todas as etapas de implantação existentes. 🔍

Você precisa excluir todas as etapas de implantação existentes. No exemplo da imagem 17, há duas etapas de implantação existentes:

  • "Kill current application instance". Veja ①.
  • "Deploy files". Veja ①.

Você pode excluir essas etapas clicando no 🞫 à direita, veja ➁, mas por algum motivo foi decidido ocultá-las até que você passe o mouse lá, então mova seu mouse para as áreas marcadas com ➁ e os 🞫es aparecerão (veja ➂). Clique nos 🞫es e vá embora com essas etapas de implantação irritantes.

Agora, adicionaremos nossa própria etapa de implantação. Clique em "Add Deploy Step", selecione "Custom Process Step" e preencha os detalhes relevantes como na imagem 18:

Crie uma nova etapa de implantação.
Imagem 18: Criar nova etapa de implantação. 🔍
Alterado

  1. Entrar /usr/bin/scp como "Command"
  2. Entrar -O mil-qt-v root@192.168.100.29:/root como "Arguments"
  3. Entrar %{buildDir} como "Working directory"

Eventualmente, seu comando inteiro, veja ➃, deve ficar assim: scp -O mil-qt-v milkvduo:. Vamos dividir isso:

scp
Este é o utilitário de linha de comando que executará a cópia do seu executável da sua máquina de desenvolvimento para o seu Milk-V Duo.
-O
Este sinalizador diz scp para usar um protocolo mais antigo. Isso pode ou não ser estritamente necessário dependendo do seu Milk-V Duo.
mil-qt-v
Este é o nome do executável que será copiado para o Milk-V Duo.
milkvduo: 
root@192.168.100.29:/root
Este é o host e o caminho para onde queremos copiar o executável.

Vários desses valores podem ser extraídos do kit ou Build system usando o sistema de substituição de variáveis ​​do QtCreator, mas por enquanto isso está mais claro e fácil de entender. Usar variáveis ​​é deixado como um exercício para o leitor.

Agora é hora de configurar a execução real do binário no seu Milk-V Duo. Este é o passo "Run" e vamos configurar essa linha na imagem 18 .

  1. Marque a opção "Use this command instead"
  2. Digite `/root/mil-qt-v` como "Executable on host"
  3. Digite `/root` como "Working directory"

e deixe todo o resto como deveria estar. E isso é tudo. Agora você configurou o QtCreator para Build, Deploy e Run seu aplicativo para e no Milk-V Duo.

🎉 🥳

Clicamos ansiosamente again e olhamos para a saída do aplicativo na visualização de relatório 3 e vemos a saída na imagem 19:


Que porra é essa!?!.
Imagem 19: Que p** é essa!?!. 🔍

O que aconteceu? Você pode fazer login no seu Duo e verificar se o arquivo definitivamente ESTÁ lá. E depois?

Veja, nós escolhemos toolchain que pode produzir código de montagem Risc-V, mas não especificamos quais bibliotecas padrão usar, qual chip direcionar ou qual modelo de memória ou ABI usar, e isso torna o executável inexequível no Milk-V Duo, e sh: exec: line 1: /root/mil-qt-v: not found é a maneira estranha do seu Milk-V Duo dizer: "Bem. O arquivo está lá, mas não consigo executá-lo." . Então precisamos executar mais uma etapa, eu prometo, e então tudo funcionará perfeitamente. Altere seu CMakeLists.txtpara conter a listagem 4 :

cmake_minimum_required(VERSION 3.5)

project(mil-qt-v LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_CXX_FLAGS "-mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d")
set(CMAKE_C_FLAGS "-mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d")

add_executable(mil-qt-v main.cpp)
Listagem 4: o CMakeLists.txt modificado especificando glibc, modelo de memória, abi e cpu.
  • Salve o CMakeLists.txt
  • Selecione "Build" → "Clear CMake Configuration" na barra de menu principal.
  • Selecione "Build" → "Run CMake" na barra de menu principal.



e então clique e observe a listagem 5 na exibição do relatório "Application Output".

09:32:28: Starting /root/mil-qt-v on Milk-V Duo...
Hello World!
09:32:28: /root/mil-qt-v on Milk-V Duo exited with code 0
Listagem 5: Finalmente! Saída da execução no seu Milk-V Duo!
Run

Parabéns! Agora, por meio de cerca de 70 passos fáceis, você configurou o QtCreator para Build, Deploy e Run em aplicativos C++ para e no seu Milk-V Duo.

Se você tiver alguma dúvida, comentário ou correção, por favor, deixe-me uma mensagem usando o formulário abaixo. Obrigado pela leitura!

7 Notas

  1. Nem todas as informações necessárias são armazenadas no 'dispositivo', no entanto. O conceito é uma boa ideia, mas a realização não é uma abstração completa. Mas ei... Eu gosto do QtCreator como um IDE, então menos é infinitamente melhor que zero.  

Abrindo projetos antigos


Olhar sempre Milk Password Prompt


Atenção (WSL2)

For users with old(ish) WSL2 Ubuntu installation who experiencing Can't open display error, the easy fix is:

wsl --unregister ubuntu
wsl --install -d ubuntu
wsl --update

Run Ubuntu --> register your user name and password, then:

# Install X-service
sudo apt update
sudo apt install x11-apps
# Test
env | grep -i display
# Should return:
# WAYLAND_DISPLAY=wayland-0
# DISPLAY=:0
xeyes &
xcalc

WiringX  - Blink

00:27:00

#include <stdio.h> #include <unistd.h> #include <wiringx.h> int main() { // Duo/Duo256M: LED = 25 // DuoS: LED = 0 int DUO_LED = 25; // Duo: milkv_duo // Duo256M: milkv_duo256m // DuoS: milkv_duos if(wiringXSetup("milkv_duo", NULL) == -1) { wiringXGC(); return 1; } if(wiringXValidGPIO(DUO_LED) != 0) { printf("Invalid GPIO %d\n", DUO_LED); } pinMode(DUO_LED, PINMODE_OUTPUT); while(1) { printf("Duo LED GPIO (wiringX) %d: High\n", DUO_LED); digitalWrite(DUO_LED, HIGH); sleep(1); printf("Duo LED GPIO (wiringX) %d: Low\n", DUO_LED); digitalWrite(DUO_LED, LOW); sleep(1); } return 0; }

Sem erros
Run - digite Password


Algumas telas de configuração




CMake

cmake_minimum_required(VERSION 3.5) project(milkv LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(milkv main.cpp) install(TARGETS milkv DESTINATION bin) target_link_libraries(milkv wiringx) include(GNUInstallDirs) install(TARGETS milkv LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )










AutoComplete




A SMARTCORE FORNECE CHIPS E MÓDULOS PARA IOT, COMUNICAÇÃO WIRELESS, BIOMETRIA, CONECTIVIDADE, RASTREAMENTO E AUTOMAÇÃO. NOSSO PORTFÓLIO INCLUI MODEM 2G/3G/4G/NB-IOT, SATELITAL, MÓDULOS WIFI, BLUETOOTH, GPS, SIGFOX, LORA, LEITOR DE CARTÃO, LEITOR QR CCODE, MECANISMO DE IMPRESSÃO, MINI-BOARD PC, ANTENA, PIGTAIL, BATERIA, REPETIDOR GPS E SENSORES.

Nenhum comentário:

Postar um comentário