[LINUX] Cross-Compilieren von Raspberry Pi und Erstellen einer Remote-Debug-Entwicklungsumgebung mit VS Code

Über diesen Artikel

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.

Umgebung

Cross-Compile (unter Ubuntu)

Holen Sie sich Cross-Compiler

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

Bauen

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.

Remote-Debugging

Ich habe sehr viel auf diesen Artikel verwiesen. (https://qiita.com/tetsu_koba/items/ebbac47e3fb43c86f412). Vielen Dank.

Vorbereitung

Grundsätzlich müssen Sie es nur einmal tun.

Installiere gdbserver (auf Raspeye)

Terminal auf Raspeye


sudo apt-get install gdbserver

Erstellen einer GDB-Binärdatei für ARM (unter Ubuntu)

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

Remote-Debug

Starten Sie gdbserver (auf Raspeye)

Terminal auf Raspeye


gdbserver --multi :5555

GDB-Ausführung (unter Ubuntu)

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

Beim erneuten Debuggen (unter Ubuntu)

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.

Remote-Debugging von VSCode (unter Ubuntu)

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.

VisualStudio-Codeeinstellungen (unter Ubuntu)

Ö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).

01.jpg

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"}
			]
		}
	]
}

Debuggen von VisualStudio Code (unter Ubuntu)

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.

02.jpg

Remote-Debugging unter Windows

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 einer GDB-Binärdatei für ARM (unter Windows (MSYS2))

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. .. .. _

VisualStudio-Codeeinstellungen (unter Windows)

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.

Remote-Debugging von VSCode (unter Windows)

Durch erneutes Drücken der Taste F5 können Sie wie unten gezeigt debuggen.

03.jpg

Meine Operation für Raspetorte

Da mein Haupt-PC Windows ist, baue ich nur mit Rasppie und debugge mit VSCode unter Windows.

  1. Schreiben Sie Code mit VS Code unter Windows
  2. Laden Sie mit VS Code unter Windows den Code mit der SFTP-Erweiterungsfunktion nach Raspeye hoch
  3. Erstellen Sie (erstellen Sie ./a.out) auf Raspeye
    • g++ -O0 -g3 sample01.cpp
  4. Laden Sie unter VS Code unter Windows die Binärdatei (./a.out) mit der SFTP-Erweiterungsfunktion herunter
  5. Debug-Ausführung mit VS-Code unter Windows

Andere

--Wenn Sie gdbserver beenden, überwachen Sie die gdb-Eingabeaufforderung auf der Host-Seite.

Recommended Posts

Cross-Compilieren von Raspberry Pi und Erstellen einer Remote-Debug-Entwicklungsumgebung mit VS Code
Erstellen Sie eine Go-Entwicklungsumgebung mit den Remote-Containern von VS Code
Holen Sie sich die stärkste Umgebung mit VS Code, Remote-Containern und Remote-Docker-Daemon
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 2: PiServer-Analyse und alternatives Systemdesign)
Erstellen einer Python-Umgebung mit virtualenv und direnv
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Erstellen Sie eine Python-Ausführungsumgebung mit VS-Code
Erstellen Sie eine Entwicklungsumgebung mit Jupyter und Flask mit Python in Docker (unterstützt sowohl VS Code als auch Code-Server).
Führen Sie VS Code und Remote Development in die Offline-Umgebung ein, um die Linux-Entwicklung komfortabel zu gestalten
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 3: Installieren und Konfigurieren von dnsmasq)
Debuggen Sie die mit Docker-Compose mit VS-Code erstellte Django-Umgebung aus der Ferne
Bearbeiten und debuggen Sie den Code in Raspberry Pi mit der SSH-Verbindungsfunktion von VSCode
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
Richten Sie eine Python-Entwicklungsumgebung mit Visual Studio Code ein
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Erstellen Sie eine VS Code + Docker-Entwicklungsumgebung mit Linux VM
Erstellen Sie mit VSCode x Remote Development x Pipenv eine komfortable Entwicklungsumgebung
Erstellen Sie eine Python-Umgebung mit WSL + Pyenv + Jupyter + VSCode
[Venv nicht erforderlich] Die stärkste Python-Entwicklungsumgebung, die mit Remote Containern erstellt wurde [VS Code / Docker]
Erstellen einer Kubernetes-Umgebung mit ansible 2
Erstellen einer virtuellen Umgebung mit Python 3
Erstellen einer Kubernetes-Umgebung mit ansible 1
Verwenden einer Webkamera mit Raspberry Pi
Weihnachtsklassiker (?) Einen Weihnachtsbaum mit Raspberry Pi und Philips Hue anzünden
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Erstellen Sie einen Kanji-Kompass mit Raspberry Pi und Sense Hat
Erstellen einer Entwicklungsumgebung mit Maven in Google App Engine [Java]
So erstellen Sie eine Python- und Jupyter-Ausführungsumgebung mit VSCode
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
[Pyenv] Erstellen einer Python-Umgebung mit Ubuntu 16.04
Bereiten Sie mit venv mit VS Code eine virtuelle Python-Umgebung für Ihr Projekt vor
Haustierüberwachung mit Rekognition und Raspberry pi
Erstellen Sie mit Laragon ganz einfach eine Entwicklungsumgebung
[Raspberry Pi] Fügen Sie ein Thermometer und ein Feuchtigkeitsmessgerät hinzu
Ich war süchtig danach, eine Python-Venv-Umgebung mit VS Code zu erstellen
Erstellen einer Python 3.6-Umgebung mit Windows + PowerShell
Erstellen Sie eine Python-Entwicklungsumgebung unter Windows (Remote-WSL für Visual Studio Code).
Erstellen Sie mit Raspberry Pi einen WLAN-Ethernet-Konverter und einen einfachen Router
Vorgehensweise zum Erstellen einer virtuellen Python-Umgebung mit VS-Code unter Windows
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Bedienen Sie das Oszilloskop mit dem Raspberry Pi
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Erstellen einer Python-Entwicklungsumgebung für die KI-Entwicklung
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 1: Zusammenfassung der Verfügbarkeit von plattenlosen Clients nach Modell)
Probieren wir die Linux-Systemprogrammierung mit Visual Studio Code und Azure aus! (Von helloworld über Nginx-Entwicklung bis hin zu Remote-Debugging)
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --2 PHP Einführung
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver. 1. Apache-Einführung
Erstellen eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (3) Empfangen einer Python-Datei
[Für Anfänger] Ich habe mit Raspberry Pi einen menschlichen Sensor erstellt und LINE benachrichtigt!
Konstruktionsvorlage für die lokale Python-Entwicklungsumgebung [Flask / Django / Jupyter mit Docker + VS-Code]
Erstellen Sie eine TensorFlow-Entwicklungsumgebung auf Amazon EC2 mit Befehlskopie
Erstellen Sie eine Entwicklungsumgebung für die C-Sprache mit einem Container
Erstellen Sie eine Python-Entwicklungsumgebung mit Visual Studio Code
Erstellen Sie eine Django-Umgebung auf Raspai (MySQL)
Versuchen Sie, QR-Code mit Raspberry Pi zu verwenden
Virtuelle Python / Windows (Windows 10) -Umgebung / Paket mit VSCode