Zuvor habe ich in diesem Artikel (https://qiita.com/take-iwiw/items/46119bb7d41c6030d34f) problemlos eine C / C ++ - Entwicklungsumgebung für Raspeye erstellt. Zu diesem Zeitpunkt wurden alle Builds und Debugs auf Raspeye durchgeführt.
Dieses Mal werde ich die Cross-Kompilierung unter Ubuntu und die Remote-Debugging-Methode mit gdbserver beschreiben. Schließlich können Sie Raspai per GUI-Operation von VS Code auf dem Host-PC aus debuggen. Das Debuggen ist jetzt sowohl unter Ubuntu als auch unter Windows möglich.
Obwohl dieser Artikel für Raspeye gedacht ist, kann er meiner Meinung nach auch auf die allgemeine Cross-Entwicklung von Embedded Linux angewendet werden.
Grundsätzlich müssen Sie es nur einmal tun.
Terminal unter Ubuntu
sudo apt-get update
sudo apt-get install build-essential libncurses-dev git git-core
mkdir ~/raspberry
cd ~/raspberry
git clone https://github.com/raspberrypi/tools
Versuchen Sie, ~ / work / pi / sample01 / sample01.cpp wie unten gezeigt zu erstellen.
sample01.cpp
#include <stdio.h>
int main()
{
printf("Hello World\n");
for (int i = 0; i < 10; i++)
printf("i = %d\n", i);
return 0;
}
Terminal unter Ubuntu
mkdir ~/work/pi/sample01 && cd ~/work/pi/sample01
code sample01.cpp &
ARCH=arm ~/raspberry/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ sample01.cpp
# ARCH=arm ~/raspberry/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ sample01.cpp
scp a.out [email protected]:.
Sie können a.out ausführen, das mit dem letzten scp-Befehl auf dem Raspetorte übertragen wurde. In einer 32-Bit-Umgebung ist "Himbeere / tools / arm-bcm2708 / gcc-linaro-arm-linux-gnueabihf-raspbian / bin" möglicherweise besser.
Ich habe sehr viel auf diesen Artikel verwiesen. (https://qiita.com/tetsu_koba/items/ebbac47e3fb43c86f412). Vielen Dank.
Grundsätzlich müssen Sie es nur einmal tun.
Terminal auf Raspeye
sudo apt-get install gdbserver
Terminal unter Ubuntu
mkdir ~/temp && cd ~/temp
wget http://ftp.jaist.ac.jp/pub/GNU/gdb/gdb-8.0.1.tar.gz
tar xf gdb-8.0.1.tar.gz
cd gdb-8.0.1
mkdir build && cd build
sudo apt-get install libexpat1-dev expat
../configure --target=arm-buildroot-linux-gnueabi --with-expat
make -j4
sudo make install
Terminal auf Raspeye
gdbserver --multi :5555
Erstellen Sie die folgende Datei (~ / work / pi / sample01 / gdb_load) an derselben Stelle wie die Ausführungsdatei, die Sie debuggen möchten.
gdb Auto-Execution-Skript
target extended-remote 192.168.1.89:5555
file ./a.out
remote put ./a.out /home/pi/a.out
set remote exec-file /home/pi/a.out
start
Führen Sie den folgenden Befehl mit demselben Pfad wie gdb_load und a.out aus, um das Debuggen zu starten. Debug-Informationen werden an das Terminal auf der Ubuntu-Seite ausgegeben, und Ausgaben wie printf werden an das Terminal auf der Raspeye-Seite ausgegeben.
Terminal unter Ubuntu
arm-buildroot-linux-gnueabi-gdb -x gdb_load
#↓ ist die Eingabeaufforderung in gdb
>>> n
Grundsätzlich kann der auf der Raspeye-Seite gestartete gdbserver immer gestartet werden. Daher ist auf der Raspeye-Seite keine Operation erforderlich. Führen Sie im GDB-Terminal auf der Ubuntu-Seite "q" aus und führen Sie "GDB" erneut aus, um den Computer neu zu starten.
Ich denke, dass das Debuggen mit dem Befehl gdb ineffizient ist, es sei denn, Sie sind damit sehr vertraut. Ermöglicht das Debuggen mit der GUI von VisualStudio Code. Wie bei der allgemeinen Anwendungsentwicklung können Einstellungen für die Schrittausführung und den Unterbrechungszeiger über die GUI vorgenommen werden, sodass Variablen im Bereich automatisch referenziert werden können.
Öffnen Sie das Verzeichnis ~ / work / pi / sample01 /
im VS-Code und drücken Sie F5, um das Debuggen zu versuchen. Danach werden Sie aufgefordert, eine Debug-Einstellung zu erstellen. Wählen Sie daher C ++ (GDB / LLDB).
Launch.json wird geöffnet. Bearbeiten Sie es daher wie folgt.
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out", //★ Bearbeiten
"args": [],
"stopAtEntry": true, //★ Bearbeiten(wie es Dir gefällt)
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "arm-buildroot-linux-gnueabi-gdb", //★ Ergänzung
"setupCommands": [ //★ Ergänzung
{"text": "target extended-remote 192.168.1.89:5555"},
{"text": "file a.out"},
{"text": "remote put a.out /home/pi/a.out"},
{"text": "set remote exec-file /home/pi/a.out"}
]
}
]
}
Drücken Sie erneut F5, um das Debuggen zu starten. Drücken Sie danach beim Debuggen des Projekts in diesem Verzeichnis einfach die Taste F5. Ausgänge wie printf werden an das Terminal auf der Raspeye-Seite ausgegeben.
Wenn das Ziel Linux ist, denke ich, dass die Entwicklungs-HOST-Umgebung im Allgemeinen auch Linux ist. Aus irgendeinem Grund möchten Sie Ihren Code jedoch häufig auf einem Windows-PC bearbeiten oder debuggen. (Ich denke zum Beispiel, dass es üblich ist, auf einem Linux-Build-Server zu bauen, die auf dem Windows-PC des Entwicklers erstellte Binärdatei herunterzuladen und auf das Ziel zu schreiben.) In einer solchen Umgebung ist es meiner Meinung nach mühsam, Ubuntu nur zum Debuggen zu installieren, daher werde ich dies auch unter Windows ermöglichen. Verwenden Sie MSYS2 für den Terminalbetrieb.
Erstellen Sie mit dem folgenden Befehl eine GDB-Binärdatei für ARM.
Terminal auf MSYS
mkdir ~/temp && cd ~/temp
wget http://ftp.jaist.ac.jp/pub/GNU/gdb/gdb-8.0.1.tar.gz
tar xf gdb-8.0.1.tar.gz
cd gdb-8.0.1
mkdir build && cd build
../configure --target=arm-buildroot-linux-gnueabi --with-expat
make -j4
make install
_ Memo
Der Build war einmal erfolgreich, aber nachdem ich Python (pacman -S python2
) installiert und verschiedene andere Dinge getan hatte, konnte ich nicht neu erstellen. .. .. _
Es ist im Grunde genau das gleiche wie unter Ubuntu. Angenommen, der Quellcode und die vorgefertigten ARM-Binärdateien befinden sich in C: / Users / tak / Desktop / win_share / sample01 /
.
Bearbeiten Sie launch.json wie folgt.
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out", //★ Bearbeiten
"args": [],
"stopAtEntry": true, //★ Bearbeiten(wie es Dir gefällt)
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:/msys64/mingw64/bin/arm-buildroot-linux-gnueabi-gdb.exe", //★ Ergänzung
"setupCommands": [ //★ Ergänzung
{"text": "target extended-remote 192.168.1.89:5555"},
{"text": "file C:/Users/tak/Desktop/win_share/sample01/a.out"},
{"text": "remote put C:/Users/tak/Desktop/win_share/sample01/a.out /home/pi/a.out"},
{"text": "set remote exec-file /home/pi/a.out"}
]
}
]
}
Beachten Sie, dass die von Ihnen selbst erstellte GDB für ARM unter Windows keinen Pfad hat. Sie müssen daher den vollständigen Pfad angeben. Ich musste auch den vollständigen Pfad der zu ladenden Binärdatei angeben. Ich habe versucht, mit $ {workspaceFolder} zu prüfen, ob es weggelassen werden kann, aber es hat nicht funktioniert.
Durch erneutes Drücken der Taste F5 können Sie wie unten gezeigt debuggen.
Da mein Haupt-PC Windows ist, baue ich nur mit Rasppie und debugge mit VSCode unter Windows.
g++ -O0 -g3 sample01.cpp
--Wenn Sie gdbserver beenden, überwachen Sie die gdb-Eingabeaufforderung auf der Host-Seite.