Configurando um IDE para Build e execute no Milk-V Duo
ABSTRACT:
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
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:
- Edit-->Preferences--> "Kits"
- "Compilers"
- "Add▾" e selecione "GCC" → "C++"
- Navegue ou insira o caminho completo para c++
- Selecione "riscv-linux-generic-elf-64bit"
/home/ubuntu/duo-sdk/riscv64-linux-musl-x86_64/bin/riscv64-unknown-linux-musl-c++ - Digite um nome de sua preferência que permita que você se lembre de que este é o compilador C++ para seu Milk-V Duo.
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
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 cmakeComo 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
- CMake
- Tools
- 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.
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
- Devices
- A aba "Devices".
- "Add…"
como na figura 4.
Na caixa de diálogo pop-up, conforme mostrado na figura 5, clique
- "Remote Linux Device"
- "Start Wizard"
Agora será apresentada uma caixa de diálogo semelhante à da figura 6 .
- 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.
- Insira o endereço IP ou nome do host. Supondo que você tenha configurado conexões ssh insira 'milkvduo'
- Digite a porta, sua placa está escutando. A menos que você tenha mudado deliberadamente a configuração ssh na placa , digite 22.
- 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.
- Por fim, clique em "Next"
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".
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"
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
- Clique em "Kits"
- Selecione a aba "Kits"
- Clique em "Add". Isso criará um kit sem nome e vazio, que preencheremos agora.
- Selecione um nome apropriado para seu kit. Eu sugiro "Milk-V Duo via RDNSS" porque "Raspberry Pi sobre RFC 2549" seria enganoso.
- No menu suspenso, selecione "Dispositivo Linux remoto"
- Selecione o dispositivo que criamos anteriormente na seção 4 .
- Selecione o dispositivo que criamos anteriormente na seção 4 .
- Selecione o compilador C que você registrou na seção 2. .
- Selecione o compilador C++ que você registrou na seção 2 .
- 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.
- É 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ê.
- Por fim, clique em "Apply" e seu novo kit estará criado!
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-N
para iniciar um novo projeto e clique em
- "Non-Qt Project"
- "Plain C++ Application"
- "Choosen…"
como na imagem 10.
no próximo diálogo, imagem 11
- Insira um nome de sua preferência. Neste post, usaremos "mil-qt-v" :)
- Escolha uma pasta para armazenar seu novo projeto
- Clique em "Next >"
Na próxima etapa, como na imagem 12,
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
- Desmarque todos os kits que você possa ter
- Certifique-se de que seu novo kit esteja verificado.
- Verificando o kit, irá desdobrar uma lista de caminhos que você pode preencher. Apenas deixe-os vazios
- 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.
Neste exemplo iremos
- Selecione <None> para controle de revisão e
- Clique em "Finish"
O QtCreator agora fará algum trabalho e, eventualmente, você deverá ver uma tela como a imagem 15.
A imagem 15 também mostra alguns recursos interessantes do QtCreator:
- 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,
- Um conjunto de visualizações de relatórios. Ao clicar no nome de uma visualização, você pode abri-la e ocultá-la.
- 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.
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"
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
- Clique em "Projects"
- Selecione o projeto em que estamos trabalhando.
- Selecione a opção relevante "Run"
Isso deve abrir algumas configurações na janela principal, como na imagem 17:
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:
- Entrar
/usr/bin/scp
como "Command" - Entrar
-O mil-qt-v root@192.168.100.29:/root
como "Arguments" - 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 .
- Marque a opção "Use this command instead"
- Digite `/root/mil-qt-v` como "Executable on host"
- 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:
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.txt
para 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)
- 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
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
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. ↩
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
Algumas telas de configuração
CMake
AutoComplete
Referências:
duo-examples/blink at main · milkv-duo/duo-examples
https://milk-v.blogspot.com/2024/06/introducao-wiringx-e-uma-biblioteca-que.html
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.
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