[LINUX] Construction d'un environnement de développement Cortex-M pour TOPPERS utilisant Raspeye

introduction

Article précédent sur la création d'un environnement de développement ** TOPPERS / ASP ** à l'aide de WindowsPC + VirtualBox + Linux "** TOPPERS / ASP Construire et exécuter ** "," ** TOPPERS / ASP (version du 10/03/2020) Créez et exécutez ** ". Avec cette méthode, il est nécessaire d'installer VirtualBox sur un PC Windows, et l'installation d'applications arbitraires est limitée sur les PC fournis par l'entreprise, etc. Étant donné que Linux fonctionne sur VirtualBox, il y a un problème que la charge sur le PC Windows telle que la puissance du processeur, la mémoire et la capacité du disque dur augmente. Pour cette raison, nous prévoyons de créer un environnement de développement pour Cortex-M pour TOPPERS / ASP sur Raspai, qui est censé avoir un grand nombre d'utilisateurs et de propriétaires, afin que le développement puisse être effectué sans imposer une charge sur le PC Windows, et l'utiliser pour le développement. J'ai fait. De plus, Raspeye est une très petite carte micro-ordinateur facile à transporter et à installer, et comme elle utilise une carte micro SD comme disque de démarrage et d'opération, il est facile de prêter et d'emprunter l'environnement et de le copier, il est donc utilisé par de nombreuses personnes. Je me suis demandé si je pouvais l'obtenir.

Construire un environnement Linux

Installation Linux

Linux pour Raspeye a plusieurs images de carte SD publiées sur Internet, mais la nouvelle version de la chaîne d'outils croisés d'ARM, qui sera expliquée plus loin, n'est disponible que pour les environnements 64 bits ** pour ARM64 ** J'ai décidé d'utiliser ** Ubuntu 20.04.1 LTS **. (Dernière version au 30 septembre 2020) Par conséquent, Raspberry Pi 3, Raspberry Pi 3+ et Raspberry Pi 4 sont nécessaires pour utiliser la tarte à la framboise.

Téléchargez l'image de la carte SD à partir de «Ubuntu 20.04.1 LTS» «Télécharger 64 bits» sur la page de téléchargement suivante. Puisque vous pouvez télécharger le fichier au format xz, écrivez le fichier image créé en le développant sur la carte micro SD à l'aide d'un logiciel d'écriture d'image.

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

paramètres réseau

Dans ** ubuntu 20.04 **, vous pouvez obtenir l'adresse IP de eth0 du LAN câblé par DHCP. Vous pouvez communiquer sur le réseau en connectant le câble LAN dans l'environnement réseau où le serveur DHCP fonctionne. De plus, en ajoutant un fichier de paramétrage sous ** / etc / netplan ** et en définissant l'adresse IP etc., il est possible de fonctionner avec une adresse IP fixe. Vous trouverez ci-dessous le fichier de configuration que j'utilise dans mon environnement domestique.

/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 d'un middleware supplémentaire

Une fois que vous êtes en mesure de communiquer sur le réseau, utilisez la commande "** apt-get install " pour télécharger et installer le middleware supplémentaire suivant à partir d'Internet. Avant "apt-get install", utilisez la commande " apt-get update **" pour mettre à jour les informations de téléchargement avec les dernières informations.

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

Construire une chaîne d'outils croisée

Téléchargez une chaîne d'outils telle qu'un compilateur croisé depuis la page ** GNU Arm Embedded Toolchain Downloads ** et décompressez-la sur Rasppie. Cette fois, j'ai utilisé la chaîne d'outils pour ** GCC10 , mais il n'y a pas de problème si vous téléchargez et utilisez la version stable " 9-2020-q2-update 30 juin 2020 **". Téléchargez ** Linux AArch64 Tarball **.

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

Après avoir téléchargé le fichier au format tar.bz2, extrayez-le dans le répertoire de destination de l'installation spécifié par "-C" avec la commande tar. Voici un exemple de commande qui se développe sous ** / home / ubuntu / bin **.

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

Pour utiliser la chaîne d'outils développée cette fois, définissez le chemin du fichier d'exécution dans la variable d'environnement PATH avant de créer TOPPERS / ASP. Dans mon environnement personnel, j'ai ajouté la définition suivante à "~ / .bashrc" afin qu'elle puisse être utilisée à tout moment après la connexion.

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

Modification / construction du configurateur

Utilisez Configurator version 1.9.6 pour construire le configurateur afin que vous puissiez construire le noyau TOPPERS / ASP. Cependant, il n'a pas été possible de le créer car il a été téléchargé en raison des remarques suivantes sur la page du configurateur.

Parce qu'il y a un problème actuel avec la bibliothèque boost pour Linux 64 bits
Cfg construit sur Linux 64 bits ne fonctionne pas correctement.
Lors de l'utilisation de cfg sur Linux 64 bits, pour Linux 32 bits ci-dessous
Utilisez des binaires ou compilez à partir des sources sur Linux 32 bits
Utilisez un binaire lié statiquement.

Dans l'article que j'ai écrit plus tôt, j'ai construit un environnement de développement utilisant Linux 32 bits pour éviter ce problème. Cette fois, nous avons inclus un correctif pour éviter ce problème.

Configurateur version 1.9.6 https://www.toppers.jp/download.cgi/cfg-1.9.6.tar.gz

Tout d'abord, téléchargez les fichiers suivants à partir de la page du configurateur et placez-les dans n'importe quel répertoire. Dans l'explication suivante, l'entrée de commande, etc. sera décrite en supposant qu'elle est placée dans le répertoire suivant.

/home/ubuntu/toppers

● Déploiement de la source Extrayez le fichier tar.gz téléchargé. L'extraction avec la commande suivante générera un répertoire cfg, et les fichiers source, etc. seront développés en dessous.

tar zxf cfg-1.9.6.tar.gz

● Déploiement de la source Accédez au répertoire cfg.

cd cfg

● Ajout d'un fichier d'en-tête pour libboost Lors de la construction du configurateur, il s'arrête avec une erreur due à une inclusion insuffisante du fichier d'en-tête, alors ajoutez la définition d'inclusion au fichier toppers / text.hpp et au fichier toppers / cpp.hpp comme suit.

toppers/text.hpp


 54 #include "toppers/text_line.hpp"
 55 #include "toppers/misc.hpp"
 56 #include <boost/next_prior.hpp>  /*※ ajouter à*/
 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>  /*※ ajouter à*/
 47 #include <boost/utility.hpp>
 48 #include <boost/filesystem/path.hpp>

● Exécution de la configuration Définissez les paramètres d'environnement de pré-construction pour le configurateur. Cependant, comme le script de configuration immédiatement après l'expansion contient "0x0d" dans le code de saut de ligne, une erreur se produira telle quelle. Par conséquent, utilisez la commande suivante pour supprimer le code inutile.

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

Après correction, exécutez la configuration avec la commande suivante.

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

Après une exécution réussie du script de configuration, créez le configurateur avec la commande suivante. Cela prend moins de 20 minutes avec Raspberry Pi 3.

make OPTIONS=-std=c++11

Si la commande cfg / cfg est terminée, elle réussit.

cfg/cfg -v

TOPPERS Kernel Configurator version 1.9.6

Changement / configuration du noyau ASP

Paquet de partie indépendante de la cible du noyau TOPPERS / ASP ** asp-1.9.3.tar.gz ** et architecture ARM Cortex-M4 / package de partie dépendante de GCC ** asp_arch_arm_m4_gcc-1.9.6.tar.gz ** ** / Téléchargez dans le répertoire home / ubuntu / toppers ** et compilez le noyau ASP.

● Déploiement de la source Extrayez le fichier tar.gz téléchargé. L'extraction avec la commande suivante générera un répertoire asp, et les fichiers source, etc. seront développés en dessous.

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

● Copie du configurateur Asp copie la construction et le configurateur créé dans: Vous pouvez créer et copier le répertoire requis avec la commande suivante.

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

Exécutez la commande suivante et lorsque les informations de version sont sorties, la copie réussit.

asp/cfg/cfg/cfg -v

TOPPERS Kernel Configurator version 1.9.6

● Éviter les erreurs de configuration Dans le noyau ASP déployé, "** PROVIDE () **" utilisé dans le script de l'éditeur de liens utilisé au moment de la construction du noyau dans GCC7 ou version ultérieure de la chaîne d'outils intégrée GNU Arm ne fonctionne pas comme prévu et est toujours décrit comme "" ** hardware_init_hook = 0 ** "est activé et l'adresse de la fonction hardware_init_hook ** génère toujours un binaire à l'adresse 0x0 **. Cela signifie que lorsque vous exécutez le noyau ASP sur la carte, il passera à l'adresse 0x0 et ** répétera la réinitialisation **. Alors commentez le code pour hardware_init_hook comme suit: Ce qui suit est une modification du script de l'éditeur de liens pour 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)

De plus, s'il est laissé tel quel, une erreur se produira lors de la génération de cfg1_out pendant la construction, alors ajoutez un processus alternatif de "PROVIDE (hardware_init_hook = 0)" pour démarrer.S. Ajoutez le traitement suivant à la ligne de fin de start.S comme indiqué ci-dessous.

asp/arch/arm_m_gcc/common/start.S


.weak  hardware_init_hook
        bx  lr

● Configuration du noyau ASP Sean Configurez le noyau ASP dans le répertoire dans lequel vous créez votre application. Cette fois, en ciblant la carte STM32F401 Nucleo-64, nous allons créer un environnement de construction d'application dans le répertoire / home / ubuntu / toppers / f401 / obj. Créez le répertoire f401 / obj avec la commande suivante.

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

Accédez au répertoire f401 / obj avec la commande suivante et exécutez la configuration.

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

Il réussit lorsque les fichiers suivants sont générés.

-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

Créer une application

La carte Nucleo peut être considérée comme un lecteur de disque en la connectant à votre PC via USB, et vous pouvez écrire des programmes dans ce répertoire en copiant le code binaire généré. Ajoutez la description de génération de fichier .bin à la partie suivante du Makefile afin que le code binaire soit généré lors de la génération de l'application.

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 ← ★ ajouté**
333         $(CFG) --pass 3 --kernel asp $(INCLUDES) \

Après l'ajout, vous pouvez créer l'application en exécutant make dans le répertoire f401 / obj.

cd f401/obj
make

Si les fichiers suivants sont générés, la génération réussit.

-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

Lorsque vous copiez asp.bin sur la carte STM32F401 Nucleo-64 et exécutez le programme, le message suivant est émis sur le port COM virtuel de la carte STM32F401 Nucleo-64.

clip1.jpg

● Copiez le fichier asp.bin sur un PC Windows En installant et en définissant Samba sur Raspai, vous pouvez écrire le fichier asp.bin sur Raspai dans STM32F401-Nucleo en faisant glisser et en déposant sur Explorer sur un PC Windows.

clip2.jpg

Configuration opérationnelle

En développement avec Raspai, en plus de la méthode de réécriture du fichier binaire généré sur Raspai via un PC Windows vers la carte cible, il est également possible de faire fonctionner le Raspai seul en connectant le moniteur, le clavier et la carte cible à Raspai. Étant donné que la carte STM32F401-Nucleo est accessible depuis Linux en tant que / dev / ttyACM du port COM virtuel et / dev / sda1 du stockage de masse via une connexion USB, la sortie syslog () après l'exécution de l'écriture sur la carte cible est également exploitée par Raspeye seul. pouvez.

● Configuration opérationnelle via PC Windows clip3.jpg

● Configuration opérationnelle de Raspeye seul clip4.jpg

à la fin

Si vous avez Raspberry Pi 3, Raspberry Pi 3+ ou Raspberry Pi 4, pourquoi ne pas essayer de créer l'environnement et de construire le programme en suivant les étapes décrites ici. Il existe de nombreux articles et informations qui utilisent Raspeye lui-même comme carte ou contrôleur pour le travail électronique, mais je pense que vous pouvez comprendre qu'il peut être suffisamment utilisé comme environnement de développement comme cette fois.

Recommended Posts

Construction d'un environnement de développement Cortex-M pour TOPPERS utilisant Raspeye
Construction d'un environnement de développement pour l'atelier Choreonoid
[Pour les débutants] Django -Construction d'environnement de développement-
Environnement de développement Python pour macOS utilisant venv 2016
Lancement automatique des programmes Raspberry Pi à l'aide de Systemd
Construire un environnement de développement Python sur Raspberry Pi
Créer un environnement OpenCV4 sur Raspberry Pi à l'aide de Poetry
Mémorandum de construction de l'environnement de la bibliothèque AutoML PyCaret
Surveillance intérieure à l'aide de Raspberry Pi
Environnement de développement adapté à ArcPy
Mémo de construction de l'environnement de développement Django
Création d'un environnement de développement local Python, partie 2 (pyenv-virtualenv, utilisation de pip)
Compilation croisée pour Raspberry Pi Zero sur Debian-Try en utilisant une bibliothèque partagée
[Memo] Construction de l'environnement cygwin
Construction de l'environnement Python pour Mac
Construction de l'environnement Python3 (pour les débutants)
[MEMO] [Construction de l'environnement de développement] Python
Remarques sur la création d'un environnement Linux à l'aide de VirtualBox + Vagrant sous Windows 10
[Pour organiser] Environnement de développement Python
construction de l'environnement de développement de projet django
Construction de l'environnement de python2 & 3 (OSX)
Création d'un environnement distribué avec la série Raspberry PI (Partie 7: configuration de la route tftp et test de démarrage pour chaque tarte à la râpe)
[MEMO] [Construction de l'environnement de développement] wine
[Linux] [Paramètres initiaux] Contenu de la configuration de l'environnement de développement
Construction de l'environnement Ansible pour Mac
Créer un environnement de développement local pour Lambda + Python à l'aide de Serverless Framework
Création d'un environnement de développement local Python Partie 1 (installation de pyenv, pyenv-virtualenv, pip)
Utilisation de TensorFlow dans l'environnement de développement intégré Cloud 9 - Principes d'utilisation -
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
Construction d'environnement de python et opencv
USB sur Ethernet avec Raspberry pi
Début de l'auto-construction OS 1. Construction de l'environnement
[Django] Mémorandum de procédure de construction d'environnement
Réglage initial du Raspberry Pi (pour moi-même)
[Python3] Construction de l'environnement de développement << Édition Windows >>
Essayez d'utiliser ArUco avec Raspberry Pi
Options d'environnement de développement Python pour mai 2020
Paramètres Emacs pour l'environnement de développement Python
Construire un environnement pour python3.8 sur Mac
Construction de l'environnement Python3 TensorFlow pour Mac
Mémo de construction de l'environnement de développement Emacs Python
Mémo de construction de l'environnement de développement Ubuntu Desktop 20.04
Créer un environnement pour "Tello_Video" sur Ubuntu
Construction de l'environnement Python3.6 (à l'aide de l'environnement Win Anaconda)
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Supplément d'éléments de base et construction de l'environnement jupyterLab ~
Procédure du développement AWS CDK (Python) à la construction de ressources AWS * Pour les débutants
Paramètres initiaux pour l'utilisation du kit de démarrage et de la caméra Grove Pi + avec Raspberry Pi
Enregistrement des valeurs du capteur d'environnement Omron avec Raspberry Pi (type USB)
Explication facile à comprendre de l'application Web Python (Django) même pour les débutants (1) [Construction de l'environnement]
Construction de l'environnement de développement Mac OS X Mavericks 10.9.5
Ajout d'un environnement de développement local sur MacOS
Procédure de construction de l'environnement de projet Python (pour Windows)
Détectez la "luminosité" en utilisant python sur Raspberry Pi 3!
Construction d'un système de recommandation utilisant le bouche-à-oreille doc2vec
Faire en sorte que Raspberry Pi parle japonais en utilisant OpenJtalk
Essayez de pêcher le Wakasagi avec Raspberry Pi
Construction de l'environnement de développement Python3 + venv + VSCode + macOS
À propos de l'environnement de développement que vous utilisez
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Préparer l'environnement de développement pour keyhac pour Mac
Construction de l'environnement de développement Mac OS X Yosemite 10.10