[LINUX] Aufbau einer Cortex-M-Entwicklungsumgebung für TOPPERS mit Raspeye

Einführung

Zuvor ein Artikel zum Erstellen einer ** TOPPERS / ASP ** -Entwicklungsumgebung unter WindowsPC + VirtualBox + Linux "** TOPPERS / ASP Erstellen und Ausführen ** "," ** TOPPERS / ASP (Version 2020-03-10) Erstellen und ausführen ** ". Bei dieser Methode muss VirtualBox auf einem Windows-PC installiert werden, und die Installation einer Anwendung ist auf vom Unternehmen bereitgestellten PCs usw. beschränkt. Da Linux auf VirtualBox ausgeführt wird, besteht das Problem, dass die Belastung des Windows-PCs wie CPU-Leistung, Speicher und Festplattenkapazität zunimmt. Aus diesem Grund planen wir, eine Entwicklungsumgebung für Cortex-M für TOPPERS / ASP auf Raspai zu erstellen, die vermutlich eine große Anzahl von Benutzern und Eigentümern hat, damit die Entwicklung ohne Belastung des Windows-PCs durchgeführt und für die Entwicklung verwendet werden kann. Ich tat. Darüber hinaus ist Raspeye eine sehr kleine Mikrocomputerplatine, die leicht zu transportieren und zu installieren ist. Da eine Micro-SD-Karte als Start- und Betriebsdiskette verwendet wird, kann die Umgebung problemlos ausgeliehen, ausgeliehen und kopiert werden, sodass sie von vielen Menschen verwendet wird. Ich fragte mich, ob ich es bekommen könnte.

Erstellen einer Linux-Umgebung

Linux-Installation

Linux für Raspeye hat mehrere SD-Karten-Images im Internet veröffentlicht, aber die neue Version der werkzeugübergreifenden ARM-Kette, die später erläutert wird, ist nur für 64-Bit-Umgebungen verfügbar ** für ARM64 ** Ich habe mich für ** Ubuntu 20.04.1 LTS ** entschieden. (Neueste Version zum 30. September 2020) Daher sind Raspberry Pi 3, Raspberry Pi 3+ und Raspberry Pi 4 erforderlich, damit der Raspeltorte verwendet werden kann.

Laden Sie das SD-Karten-Image von "Ubuntu 20.04.1 LTS" "Download 64-Bit" auf der folgenden Download-Seite herunter. Da Sie die Datei im xz-Format herunterladen können, schreiben Sie die erstellte Bilddatei, indem Sie sie mit einer Bildschreibsoftware auf die Micro-SD-Karte erweitern.

** 64bit Ubuntu 20.04.1 LTS für Raspberry Pi **  https://ubuntu.com/download/raspberry-pi  https://ubuntu.com/download/raspberry-pi/thank-you?version=20.04.1&architecture=arm64+raspi

Netzwerkeinstellungen

In ** ubuntu 20.04 ** können Sie die IP-Adresse von eth0 des kabelgebundenen LAN per DHCP abrufen. Sie können im Netzwerk kommunizieren, indem Sie das LAN-Kabel in der Netzwerkumgebung anschließen, in der der DHCP-Server betrieben wird. Durch Hinzufügen einer Einstellungsdatei unter ** / etc / netplan ** und Definieren der IP-Adresse usw. ist es auch möglich, mit einer festen IP-Adresse zu arbeiten. Unten finden Sie die Konfigurationsdatei, die ich in meiner häuslichen Umgebung verwende.

/etc/netplan/99_config.yaml


network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      addresses: [192.168.0.140/24]
      gateway4: 192.168.0.1
      nameservers:
        addresses: [192.168.0.1, 8.8.8.8, 8.8.4.4]

Installation zusätzlicher Middleware

Wenn Sie über das Netzwerk kommunizieren können, verwenden Sie den Befehl "** apt-get install ", um die folgende zusätzliche Middleware aus dem Internet herunterzuladen und zu installieren. Verwenden Sie vor "apt-get install" den Befehl " apt-get update **", um die Download-Informationen auf die neuesten Informationen zu aktualisieren.

net-tools
g++
libboost-all-dev
libxerces-c-dev
make
minicom
samba

Aufbau einer Werkzeugkette

Laden Sie eine Toolchain wie einen Cross-Compiler von der Seite ** GNU Arm Embedded Toolchain Downloads ** herunter und entpacken Sie sie auf Rasppie. Dieses Mal habe ich die Toolkette für ** GCC10 ** verwendet, aber es gibt kein Problem, wenn Sie die stabile Version "** 9-2020-q2-update 30. Juni 2020 **" herunterladen und verwenden. Laden Sie ** Linux AArch64 Tarball ** herunter.

GNU Arm Embedded Toolchain: 10-2020-q2-preview June 29, 2020 gcc-arm-none-eabi-10-2020-q2-preview-aarch64-linux.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q2/gcc-arm-none-eabi-10-2020-q2-preview-aarch64-linux.tar.bz2?revision=a7134e5c-fad8-490c-a62b-9200acca15ef&la=en&hash=12954B763712885C1DDE3318D10DF96B1606463A

Extrahieren Sie die Datei im Format tar.bz2 nach dem Herunterladen mit dem Befehl tar in das durch "-C" angegebene Installationszielverzeichnis. Das folgende Beispiel zeigt einen Befehl, der unter ** / home / ubuntu / bin ** erweitert wird.

mkdir ~/bin
tar xjf gcc-arm-none-eabi-10-2020-q2-preview-aarch64-linux.tar.bz2 -C ~/bin

Um die diesmal erweiterte Toolchain zu verwenden, legen Sie den Pfad der Ausführungsdatei in der Umgebungsvariablen PATH fest, bevor Sie TOPPERS / ASP erstellen. In meiner häuslichen Umgebung habe ich "~ / .bashrc" die folgende Definition hinzugefügt, damit sie jederzeit nach dem Anmelden verwendet werden kann.

export PATH=~/bin/gcc-arm-none-eabi-10-2020-q2-preview/bin:$PATH

Konfigurator ändern / bauen

Verwenden Sie Configurator Release 1.9.6, um den Configurator zu erstellen, damit Sie den TOPPERS / ASP-Kernel erstellen können. Aufgrund der folgenden Hinweise auf der Konfiguratorseite war es jedoch nicht möglich, es zu erstellen, da es heruntergeladen wurde.

Aufgrund eines aktuellen Problems mit der Boost-Bibliothek für 64-Bit-Linux
Cfg, das auf 64-Bit-Linux basiert, funktioniert nicht richtig.
Wenn Sie cfg unter 64-Bit-Linux verwenden, siehe unten unter 32-Bit-Linux
Verwenden Sie Binärdateien oder erstellen Sie aus dem Quellcode unter 32-Bit-Linux
Verwenden Sie eine statisch verknüpfte Binärdatei.

In dem Artikel, den ich zuvor geschrieben habe, habe ich eine Entwicklungsumgebung mit 32-Bit-Linux erstellt, um dieses Problem zu vermeiden. Dieses Mal haben wir einen Fix hinzugefügt, um dieses Problem zu vermeiden.

Konfigurator Release 1.9.6 https://www.toppers.jp/download.cgi/cfg-1.9.6.tar.gz

Laden Sie zunächst die folgenden Dateien von der Konfiguratorseite herunter und legen Sie sie in einem beliebigen Verzeichnis ab. In der folgenden Erläuterung werden Befehlseingaben usw. unter der Annahme beschrieben, dass sie im folgenden Verzeichnis abgelegt sind.

/home/ubuntu/toppers

● Bereitstellung der Quelle Extrahieren Sie die heruntergeladene tar.gz-Datei. Durch Extrahieren mit dem folgenden Befehl wird ein cfg-Verzeichnis generiert und die Quelldateien usw. werden darunter erweitert.

tar zxf cfg-1.9.6.tar.gz

● Bereitstellung der Quelle Wechseln Sie in das Verzeichnis cfg.

cd cfg

● Hinzufügen einer Header-Datei für libboost Beim Erstellen des Konfigurators wird der Fehler aufgrund einer unzureichenden Einbeziehung der Header-Datei gestoppt. Fügen Sie daher die Include-Definition wie folgt zur Datei toppers / text.hpp und toppers / cpp.hpp hinzu.

toppers/text.hpp


 54 #include "toppers/text_line.hpp"
 55 #include "toppers/misc.hpp"
 56 #include <boost/next_prior.hpp>  /*※ hinzufügen*/
 57 #include <boost/utility.hpp>
 58 #include <boost/iterator/iterator_facade.hpp>

toppers/cpp.hpp


 44 #include "toppers/codeset.hpp"
 45 #include "toppers/diagnostics.hpp"
 46 #include <boost/next_prior.hpp>  /*※ hinzufügen*/
 47 #include <boost/utility.hpp>
 48 #include <boost/filesystem/path.hpp>

● Konfigurationsausführung Nehmen Sie vorgefertigte Umgebungseinstellungen für den Konfigurator vor. Da das Konfigurationsskript jedoch unmittelbar nach der Erweiterung "0x0d" im Zeilenvorschubcode enthält, tritt ein Fehler auf. Verwenden Sie daher den folgenden Befehl, um unnötigen Code zu löschen.

mv configure configure.org
tr -d '\r' < configure.org > configure
chmod u+x configure

Führen Sie nach der Korrektur die Konfiguration mit dem folgenden Befehl aus.

./configure --with-libraries=/usr/lib/aarch64-linux-gnu

Erstellen Sie nach erfolgreicher Ausführung des Konfigurationsskripts den Konfigurator mit dem folgenden Befehl. Mit Raspberry Pi 3 dauert es weniger als 20 Minuten.

make OPTIONS=-std=c++11

Wenn der Befehl cfg / cfg abgeschlossen ist, ist er erfolgreich.

cfg/cfg -v

TOPPERS Kernel Configurator version 1.9.6

ASP-Kernel-Änderungs- / Konfigurationsrennen

TOPPERS / ASP-Kernel-Ziel unabhängiges Teilepaket ** asp-1.9.3.tar.gz ** und ARM Cortex-M4-Architektur / GCC-abhängiges Teilepaket ** asp_arch_arm_m4_gcc-1.9.6.tar.gz ** ** / Laden Sie es in das Verzeichnis home / ubuntu / toppers ** herunter und erstellen Sie den ASP-Kernel.

● Bereitstellung der Quelle Extrahieren Sie die heruntergeladene tar.gz-Datei. Durch Extrahieren mit dem folgenden Befehl wird ein Asp-Verzeichnis generiert und die Quelldateien usw. werden darunter erweitert.

cd /home/ubuntu/toppers
tar xzf asp-1.9.3.tar.gz
tar xzf asp_arch_arm_m4_gcc-1.9.6.tar.gz

● Kopie des Konfigurators Asp kopiert den Build und den erstellten Konfigurator nach: Sie können das erforderliche Verzeichnis mit dem folgenden Befehl erstellen und kopieren.

mkdir -p  asp/cfg/cfg
cp  cfg/cfg/cfg  asp/cfg/cfg

Führen Sie den folgenden Befehl aus, und wenn die Versionsinformationen ausgegeben werden, ist die Kopie erfolgreich.

asp/cfg/cfg/cfg -v

TOPPERS Kernel Configurator version 1.9.6

● Vermeiden von Konfigurationsfehlern Im bereitgestellten ASP-Kernel funktioniert "** PROVIDE () **", das in dem Linker-Skript verwendet wird, das zum Zeitpunkt der Kernel-Erstellung in GCC7 oder höher von GNU Arm Embedded Toolchain verwendet wurde, nicht wie beabsichtigt und wird immer als "" beschrieben. ** hardware_init_hook = 0 ** "ist aktiviert und die Funktionsadresse hardware_init_hook ** generiert immer eine Binärdatei an der Adresse 0x0 **. Dies bedeutet, dass beim Ausführen des ASP-Kernels auf der Karte zur Adresse 0x0 gesprungen wird und ** das Zurücksetzen wiederholt wird **. Kommentieren Sie den Code für hardware_init_hook wie folgt aus: Das Folgende ist eine Modifikation des Linkerskripts für stm32f401nucleo_gcc.

asp/target/stm32f401nucleo_gcc/stm32f4xx_rom.ld

 10 PROVIDE(hardware_init_hook = 0);
 11 PROVIDE(software_init_hook = 0);
 12 PROVIDE(software_term_hook = 0);
 13 STARTUP(start.o)

 10 /* PROVIDE(hardware_init_hook = 0); */
 11 PROVIDE(software_init_hook = 0);
 12 PROVIDE(software_term_hook = 0);
 13 STARTUP(start.o)

Wenn es unverändert bleibt, tritt beim Generieren von cfg1_out während der Erstellung ein Fehler auf. Fügen Sie daher zum Starten einen alternativen Prozess von "PROVIDE (hardware_init_hook = 0)" hinzu. Fügen Sie der Endzeile von start.S die folgende Verarbeitung hinzu, wie unten gezeigt.

asp/arch/arm_m_gcc/common/start.S


.weak  hardware_init_hook
        bx  lr

● ASP-Kernelkonfiguration Sean Konfigurieren Sie den ASP-Kernel in dem Verzeichnis, in dem Sie Ihre Anwendung erstellen. Dieses Mal werden wir auf die STM32F401 Nucleo-64-Karte abzielen und eine Anwendungserstellungsumgebung im Verzeichnis / home / ubuntu / toppers / f401 / obj erstellen. Erstellen Sie das Verzeichnis f401 / obj mit dem folgenden Befehl.

cd /home/ubuntu/toppers
mkdir -p f401/obj

Wechseln Sie mit dem folgenden Befehl in das Verzeichnis f401 / obj und führen Sie die Konfiguration aus.

cd f401/obj
../../asp/configure -T stm32f401nucleo_gcc -dROM

Es ist erfolgreich, wenn die folgenden Dateien generiert werden.

-rw-rw-r-- 1 ubuntu ubuntu 15335 Aug 30 18:22 Makefile
-rw-rw-r-- 1 ubuntu ubuntu 15652 Aug 30 18:22 sample1.c
-rw-rw-r-- 1 ubuntu ubuntu   918 Aug 30 18:22 sample1.cfg
-rw-rw-r-- 1 ubuntu ubuntu  3246 Aug 30 18:22 sample1.h

Anwendung erstellen

Die Nucleo-Karte kann als Festplattenlaufwerk angesehen werden, indem Sie sie über USB an Ihren PC anschließen. Sie können Programme in dieses Verzeichnis schreiben, indem Sie den generierten Binärcode kopieren. Fügen Sie die Beschreibung zur Generierung der BIN-Datei zum folgenden Teil des Makefiles hinzu, damit der Binärcode beim Erstellen der Anwendung generiert wird.

Makefile

327 $(OBJFILE): $(APPL_CFG) kernel_cfg.timestamp $(ALL_OBJS) $(LIBS_DEP)
328         $(LINK) $(CFLAGS) $(LDFLAGS) -o $(OBJFILE) $(START_OBJS) \
329                         $(APPL_OBJS) $(SYSSVC_OBJS) $(CFG_OBJS) $(ALL_LIBS) $(END_OBJS)
330         $(NM) -n $(OBJFILE) > $(OBJNAME).syms
331         $(OBJCOPY) -O srec -S $(OBJFILE) $(OBJNAME).srec
332         $(CFG) --pass 3 --kernel asp $(INCLUDES) \

327 $(OBJFILE): $(APPL_CFG) kernel_cfg.timestamp $(ALL_OBJS) $(LIBS_DEP)
328         $(LINK) $(CFLAGS) $(LDFLAGS) -o $(OBJFILE) $(START_OBJS) \
329                         $(APPL_OBJS) $(SYSSVC_OBJS) $(CFG_OBJS) $(ALL_LIBS) $(END_OBJS)
330         $(NM) -n $(OBJFILE) > $(OBJNAME).syms
331         $(OBJCOPY) -O srec -S $(OBJFILE) $(OBJNAME).srec
**332         $(OBJCOPY) -O binary -S $(OBJFILE) $(OBJNAME).bin ← ★ hinzugefügt**
333         $(CFG) --pass 3 --kernel asp $(INCLUDES) \

Nach dem Hinzufügen können Sie die Anwendung erstellen, indem Sie make im Verzeichnis f401 / obj ausführen.

cd f401/obj
make

Wenn die folgenden Dateien generiert werden, ist der Build erfolgreich.

-rwxrwxr-x 1 ubuntu ubuntu 363656 Aug 30 18:35 asp*
-rwxrwxr-x 1 ubuntu ubuntu  28442 Aug 30 18:35 asp.bin*
-rwxrwxr-x 1 ubuntu ubuntu  85392 Aug 30 18:35 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu   8109 Aug 30 18:35 asp.syms

Wenn Sie asp.bin auf die Nucleo-64-Karte STM32F401 kopieren und das Programm ausführen, wird die folgende Meldung an den virtuellen COM-Port der Nucleo-64-Karte STM32F401 ausgegeben.

clip1.jpg

● Kopieren Sie die Datei asp.bin auf einen Windows-PC Durch Installieren und Einstellen von Samba auf Raspai können Sie die Datei asp.bin auf Raspai in STM32F401-Nucleo schreiben, indem Sie den Explorer auf einem Windows-PC ziehen und dort ablegen.

clip2.jpg

Betriebskonfiguration

Bei der Entwicklung mit Raspai ist es neben der Methode zum Umschreiben der auf Raspai über einen Windows-PC generierten Binärdatei auf die Zielplatine auch möglich, den Raspai allein zu betreiben, indem Monitor, Tastatur und Zielplatine mit Raspai verbunden werden. Da auf die STM32F401-Nucleo-Karte von Linux aus als / dev / ttyACM des virtuellen COM-Ports und / dev / sda1 des Massenspeichers über eine USB-Verbindung zugegriffen werden kann, wird die Ausgabe von syslog () nach der Ausführung vom Schreiben auf die Zielkarte auch nur von Raspeye allein betrieben. können.

● Betriebskonfiguration über Windows-PC clip3.jpg

● Betriebskonfiguration von Raspeye allein clip4.jpg

schließlich

Wenn Sie Raspberry Pi 3, Raspberry Pi 3+ oder Raspberry Pi 4 haben, versuchen Sie, die Umgebung und das Programm zu erstellen, indem Sie die hier beschriebenen Schritte ausführen. Es gibt viele Artikel und Informationen, die Raspeye selbst als Board oder Controller für elektronische Arbeiten verwenden, aber ich denke, Sie können verstehen, dass es wie dieses Mal ausreichend als Entwicklungsumgebung verwendet werden kann.

Recommended Posts

Aufbau einer Cortex-M-Entwicklungsumgebung für TOPPERS mit Raspeye
Bau einer Entwicklungsumgebung für die Choreonoid-Werkstatt
[Für Anfänger] Django -Entwicklungsumgebung Bau-
Python-Entwicklungsumgebung für macOS mit venv 2016
Automatischer Start von Raspberry Pi-Programmen mit Systemd
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Erstellen Sie mithilfe von Poetry eine OpenCV4-Umgebung auf Raspberry Pi
Memorandum über die Umgebungskonstruktion der AutoML-Bibliothek PyCaret
Innenüberwachung mit Raspberry Pi
Für ArcPy geeignete Entwicklungsumgebung
Django Entwicklungsumgebung Bau Memo
Erstellen einer lokalen Python-Entwicklungsumgebung Teil 2 (pyenv-virtualenv, Pip-Nutzung)
Cross-Compilierung für Raspberry Pi Zero unter Debian-Try unter Verwendung einer gemeinsam genutzten Bibliothek
[Memo] Bau einer Cygwin-Umgebung
Aufbau einer Python-Umgebung für Mac
Python3-Umgebungskonstruktion (für Anfänger)
[MEMO] [Entwicklung der Entwicklungsumgebung] Python
Hinweise zum Erstellen einer Linux-Umgebung mit VirtualBox + Vagrant unter Windows 10
[Zum Organisieren] Python-Entwicklungsumgebung
Django Projekt Entwicklungsumgebung Bau
Umgebungskonstruktion von Python2 & 3 (OSX)
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 7: Einstellung der TFTP-Route und Starttest für jeden Raspetorte)
[MEMO] [Entwicklungsumgebung Bau] Wein
[Linux] [Grundeinstellungen] Inhalt der Einrichtung der Entwicklungsumgebung
Ansible Umgebungskonstruktion Für Mac
Erstellen Sie mit dem Serverless Framework eine lokale Entwicklungsumgebung für Lambda + Python
Erstellen einer lokalen Python-Entwicklungsumgebung Teil 1 (pyenv, pyenv-virtualenv, pip-Installation)
Verwenden von TensorFlow in Cloud 9 Integrierte Entwicklungsumgebung - Grundlagen der Verwendung
Protokollieren Sie die Omron-Umgebungssensorwerte regelmäßig mit Raspberry Pi
Umgebungskonstruktion von Python und OpenCV
USB über Ethernet mit Raspberry pi
Beginn des selbst erstellten Betriebssystems 1. Aufbau der Umgebung
[Django] Memorandum of Environment Construction Procedure
Himbeer-Pi-Grundeinstellung (für mich)
[Python3] Aufbau der Entwicklungsumgebung << Windows Edition >>
Versuchen Sie es mit ArUco mit Raspberry Pi
Optionen für die Python-Entwicklungsumgebung für Mai 2020
Emacs-Einstellungen für die Python-Entwicklungsumgebung
Erstellen einer Umgebung für Python3.8 auf einem Mac
Python3 TensorFlow für Mac-Umgebungskonstruktion
Konstruktionsnotiz für die Emacs Python-Entwicklungsumgebung
Konstruktionsnotiz für die Ubuntu Desktop 20.04-Entwicklungsumgebung
Erstellen einer Umgebung für "Tello_Video" unter Ubuntu
Python3.6-Umgebungskonstruktion (unter Verwendung der Win-Umgebung Anaconda)
Lernverlauf für die Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Ergänzung der Grundelemente und Aufbau der jupyterLab-Umgebung ~
Vorgehensweise von der AWS CDK (Python) -Entwicklung bis zur AWS-Ressourcenkonstruktion * Für Anfänger
Grundeinstellungen für die Verwendung des Grove Pi + Starterkits und der Kamera mit Raspberry Pi
Protokollierung der Omron-Umgebungssensorwerte mit Raspberry Pi (USB-Typ)
Leicht verständliche Erklärung der Python-Webanwendung (Django) auch für Anfänger (1) [Umgebungskonstruktion]
Mac OS X Mavericks 10.9.5 Aufbau einer Entwicklungsumgebung
Hinzufügen einer lokalen Entwicklungsumgebung unter MacOS
Konstruktionsverfahren für die Python-Projektumgebung (für Windows)
Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3!
Aufbau eines Empfehlungssystems mit Mundpropaganda doc2vec
Verwenden Sie OpenJtalk, damit Raspberry Pi Japanisch spricht
Versuchen Sie, mit Raspberry Pi nach Wakasagi zu fischen
Aufbau der Python3 + venv + VSCode + macOS-Entwicklungsumgebung
Informationen zu der von Ihnen verwendeten Entwicklungsumgebung
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Bereiten Sie die Entwicklungsumgebung für keyhac für Mac vor
Mac OS X Yosemite 10.10 Aufbau einer Entwicklungsumgebung