>> Artikelansicht

07.03.2016 /He [Druckansicht]

NUCLEO-F401RE und mbed SDK auf dem Raspberry Pi 3

...ein weiterer 32-Bit Co-Prozessor für den Raspberry Pi 3

ST NUCLEO-F401RE Zum Einsatz soll diesmal ein "Launchpad Evaluation Kit Tiva™ C Series TM4C123GXL" von Texas Instrumens [http://www.ti.com/tool/ek-tm4c123gxl] kommen, das direkt über den Raspberry Pi in C programmiert wird, um es als eine leistungsfähige I/O-Erweiterung einzusetzen.
Motivation:
Nachdem das neue Model vom Raspberry Pi 3 mit einer leistungsfähigeren CPU und WiFi aufwartet, kann man ein passendes ARM-Toolchain für den auf dem Tiva™-Board verbauten "32-Bit ARM Cortex M4" direkt auf dem Raspberry Pi 3 übersetzen. Was noch vor ein paar Monaten mit dem Vorgängermodel(Pi 2) mehr als einen halben Tag in Anspruch genommen hat, ist nun der Hälfte der Zeit erledigt. Das Ganze ist natürlich nur einmal durchzuführen, doch danach profitiert deutlich von der gesteigerten Rechenleistung, was letztendlich auch den Schritt vom Notebook als Entwicklungsrechner*), komplett auf den Raspberry Pi 3 umzusteigen, war.
*) Das bezieht sich nur auf Prozessoren mit ARM-Kern.

Voraussetzungen

ST NUCLEO-F401RE und Raspberry PI 2 Model B

Für die folgende Installation wird ein Raspberry Pi 3 Model B mit einer 1.2GHz 64-bit quad-core ARM Cortex-A53 CPU und 1GB RAM eingesetzt.Es kann auch ein Rapsberry Pi 2 Model B verwendet werden, die Übersetzungszeit verdoppelt sich dabei. Andere Modelle wurden nicht getestet. Als Betriebssystem kommt Raspbian/Jessie Lite (26. February 2016) zum Einsatz, das unter [http://www.raspberrypi.org/downloads/] heruntergeleaden werden kann. Das Betriebssystem läuft direkt von micro-SD Karte, die mindestens 16GB, besser jedoch 32GB, groß sein sollte.



Installation der Software

Grundlagen

Wer bisher keine Erfahrung mit dem Raspberry Pi hat, sollte diese Einführung lesen(alle Betriebssysteme)
[http://www.raspberrypi.org/documentation/]

(1.1) Mit dem Raspberry Pi Verbindung aufnehmen

Der Raspberry Pi 3 sollte mit dem Internet über die Ethernet-Schnittstelle oder dem eingebauten WiFi und einem Router verbunden sein.Er ist danach per ssh von der IP-Adresse, die vom Router zugewiesen wurde, zu erreichen.

  • Die folgende Installation wird per Standarbenutzer : pi mit dem Passwort: raspberry durchgeführt.
    Alternativ kann man auch einen Monitor und eine Tastatur verwenden und die Befehle darüber eingeben.Die Verbindung mit dem Internet ist, egal welche Methode gewählt wurde, ein Muss.
Verbindung per ssh mit dem Raspberry Pi herstellen Standardbenutzer : pi Passwort: raspberry
  1. #{IP_ADRESSE_VOM_PI} gegen IP-Adresse ersetzen:(Beispiel) 192.168.178.79
  2. ssh -p22 pi@{IP_ADRESSE_VOM_PI}

(2.0) GNU Tools for ARM Embedded Processors

(2.1) System aktualisieren, swap-Datei anpassen und aktivieren

Für die Version des ARM-Toolchain mit dem gcc4.9, kann man auf eine Anpassung der swap-Datei verzichten,es empfiehlt sich jedoch diesen Schritt trotzdem durchzuführen, da es immer wieder mal knapp mit dem Speicher wird und unweigerlich zum Abbruch des Übersetzungsvorgangs führt. Manchmal mit cryptischen Fehlermeldungen, die nicht direkt auf einen Speichermangel hinweisen.Hier wäre auch der einzige Kritikpunkt, der Raspberry Pi3 sollte für die gewählte Verwendung über 2GB Hauptspeicher verfügen.Was man jeoch erstmal nicht ändern kann und somit eine swap-Datei oder "zram memory compression" eingesetzt werden muss.Letzteres habe ich seit dem "Ur-Pi", der nur 256MB RAM zur Verfügung hatte, nicht mehr verwendet.

System aktualisieren / "screen" installieren / swap-Datei anpassen.
  1. #login mittels ssh
  2. ssh -p22 pi@{IP_ADRESSE_VOM_PI}
  3. apt-get update
  4. apt-get upgrade
  5. #screen installieren
  6. sudo apt-get install screen
  7. #git installieren
  8. sudo apt-get install git
  9. #Datei /etc/dphys-swapfile Konfiguration anpassen.
  10. sudo nano /etc/dphys-swapfile
  11. #den Wert 100 auf 900 ändern (800 sollte das Minimum sein, wenn man gcc5.0 übersetzen möchte)
  12. CONF_SWAPSIZE=900
  13. #Änderungen speichern
  14. #Neue swap-Datei initialisieren und aktivieren
  15. sudo dphys-swapfile swapoff
  16. sudo dphys-swapfile setup
  17. sudo dphys-swapfile swapon
  18. #Test ob das "swap" akativ ist
  19. free -m
  20. #Swap: 899 0 899
  21. #logout
  22. exit

Infos zur Verwendung von screen.

  1. #Login mit screen über ssh
  2. ssh -p22 -t pi@{IP_ADRESSE_VOM_PI} screen
  3. #Info: Mit der Tastenkombination <Ctrl+a d> kann man sich von screen abmelden
  4. # mit folgendem Kommnado kann man sich wieder anmelden
  5. ssh -p22 -t pi@{IP_ADRESSE_VOM_PI} screen -r
Benötigte Software Pakete einspielen.
  1. #notwendige Tools für das ARM-Toolchain installieren
  2. sudo apt-get install gcc make bc ncurses-dev
  3. sudo apt-get install flex bison
  4. sudo apt-get install libgmp3-dev
  5. sudo apt-get install libmpfr-dev
  6. sudo apt-get install libmpc-dev
  7. sudo apt-get install autoconf
  8. sudo apt-get install texinfo
  9. sudo apt-get install python2.7-dev
  10. sudo apt-get install python-yaml
  11. sudo apt-get install libexpat1-dev
  12. #für GNU Tools for ARM Embedded Processors - https://launchpad.net/gcc-arm-embedded
  13. sudo apt-get install libisl-dev
GNU Tools for ARM Embedded Processors herunterladen und übersetzen
  1. #Toolchain herunterladen
  2. #gcc 5.0
  3. #wget https://launchpad.net/gcc-arm-embedded/5.0/5-2015-q4-major/+download/gcc-arm-none-eabi-5_2-2015q4-20151219-src.tar.bz2
  4. #gcc 4.9
  5. wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update/+download/gcc-arm-none-eabi-4_9-2015q3-20150921-src.tar.bz2
  6. #Quellen entpacken
  7. mkdir gcc-arm-embedded
  8. cd ./gcc-arm-embedded
  9. tar -xf ../gcc-arm-none-eabi-4_9-2015q3-20150921-src.tar.bz2
  10. cd ./gcc-arm-none-eabi-4_9-2015q3-20150921/src
  11. find -name "*.tar.*" | xargs -I% tar -xf %
  12. #cloog compilieren und installieren, da es im System fehlt
  13. #gcc5.0 verwendet cloog-0.18.1
  14. #cd ./cloog-0.18.1
  15. cd ./cloog-0.18.0
  16. ./configure --prefix=/usr
  17. make
  18. sudo make install
  19. cd ../..
  20. #Toolchain compilieren
  21. JOBS=4 ./build-toolchain.sh --build_type=native --skip_steps="manual mingw32"
  22. #info 4.9 real: 360m22.076s user: 717m6.080s sys: 65m40.970s
  23. #info 5.0 real: 581m45.638s user: 925m59.650s sys: 83m18.200s

Das fertig übersetzte und installierbare Toolchain liegt jetzt unter ./pkg und kann überall im System hineinkopiert und danach ausgepackt werden.Im folgenden Beispiel wird es im Heimatverzeichnis/toolchain der Nutzers pi ausgepackt.Der Dateiname enthält auch das Übersetzungsdatum.
Format: gcc-arm-none-eabi-4_9-2016q1-{YYYYMMDD}-linux.tar.bz2
Um vom Übersetzungsdatum unabhängig zu sein, wird dieses durch '*' im Dateiname gcc-arm-none-eabi-4_9-2016q1-*-linux.tar.bz2 ersetzt.

  1. mkdir ~/toolchain
  2. cp ./pkg/gcc-arm-none-eabi-4_9-2016q1-*-linux.tar.bz2 ~/toolchain
  3. cd ~/toolchain
  4. tar -xf gcc-arm-none-eabi-4_9-2016q1-*-linux.tar.bz2
  5. #.bashrc anpassen
  6. nano /home/pi/.bashrc
  7. #am Ende der Datei, diese Zeilen einfügen und danach speichern
  8. export GCC4ARM=/home/pi/toolchain/gcc-arm-none-eabi-4_9-2016q1
  9. export GCC4ARM_BINDIR=$GCC4ARM/bin
  10. export GCC4MBED_TOOLPATH=$GCC4ARM_BINDIR
  11. export GCC_ARM_PATH=$GCC4MBED_TOOLPATH
  12. PATH=$PATH:$GCC4ARM_BINDIR
  13. #Änderungen sofort wirksam machen
  14. . ~/.bashrc
  15. #Test
  16. arm-none-eabi-gcc --version
  17. #arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.9.3 20150529 (release)...

(3.0) mbed SDK - Adam Green gcc4mbed

In diesem Teil wird das Bundle aus gcc4-installer und mbed verwendet, dabei wird jedoch nicht die Installation von gcc4.x/gcc5.x ausgeführt, sondern nur mbed und den mitgelieferten Makefiles, die im Gegensatz zur offiziellen mbed Version verwendet werden.Statt den mbed-tools (Python).Wer die offizielle mbed Version verwenden möchte, kann Teil (3.2) überspringen, da in Teil (3.3) dieses Artikels auch hier kurz darauf eingegangen wird. Zuerst wird das NUCLEO Board über den USB-Port an den Raspberry Pi angeschlossen.Das NUCLEO wird nicht automatisch im Dateisystem Eingehängt, zur Sicherheit sollte man dies jedoch noch einmal mit dem Kommando df überprüfen.
Wenn man den Befehl dmesg in die Konsole eingibt, kann man das Gerät dem MBED zugewiesen wurde herausfinden.Hier /dev/sda

Ausgabe von dmesg
  1. dmesg
  2. ...
  3. [ 1853.918054] scsi 0:0:0:0: Direct-Access MBED microcontroller 1.0 PQ: 0 ANSI: 2
  4. [ 1853.919763] sd 0:0:0:0: [sda] 1072 512-byte logical blocks: (549 kB/536 KiB)
  5. [ 1853.920239] sd 0:0:0:0: [sda] Write Protect is off
  6. ...
  1. #NUCLEO an den Rspberry Pi anschliessen.
  2. df
  3. #wenn das NUCLEO nicht aufgelistet wird - NUCLEO einhängen
  4. sudo mkdir /mnt/mbed
  5. sudo mount /dev/sda /mnt/mbed
  6. #nun sollte df den NUCLEO unter /dev/sda auflisten
  7. df
  8. #/dev/sda 528 40 488 8% /mnt/mbed

(3.2) Installation von gcc4mbed

Im nächsten Schritt wird die Installation von gcc4mbed beschrieben.

Installation von mbed und übersetzen von HelloWorld
  1. #git installieren - wenn noch nicht vorhanden
  2. sudo apt-get install git
  3. mkdir -p ~/work/STM32F4
  4. cd ~/work/STM32F4
  5. #gcc4mbed kopieren
  6. git clone https://github.com/adamgreen/gcc4mbed.git
  7. #direkt in das HelloWorld Beispiel wechseln
  8. cd ./gcc4mbed/samples/HelloWorld
  9. nano makefile
  10. #Zeile DEVICES ändern in
  11. DEVICES := NUCLEO_F401RE
  12. #Speichern und nano-Editor verlassen
  13. make
Bildschirmausgabe nach make
  1. Compiling main.cpp
  2. Compiling ../../src/gcc4mbed.c
  3. Linking NUCLEO_F401RE/HelloWorld.elf
  4. Extracting NUCLEO_F401RE/HelloWorld.bin
  5. Extracting NUCLEO_F401RE/HelloWorld.hex
  6. Extracting disassembly to NUCLEO_F401RE/HelloWorld.disasm
  7. text data bss dec hex filename
  8. 10720 124 548 11392 2c80 NUCLEO_F401RE/HelloWorld.elf

Beim ersten Aufruf von make wird noch die mbed Library für den NUCLEO übersetzt, was etwas Zeit in Anspruch nimmt. Aber dies geschieht nur einmal.Danach ist das Übersetzen von Programmen schnell erledigt.Wie man sehen kann, liegt das Ausführbare Programm nun im Unterverzeichnis ./NUCLEO_F401RE/HelloWorld.bin
Dies können wir nun ganz einfach mit

  1. sudo cp ./NUCLEO_F401RE/HelloWorld.bin /mnt/mbed

auf den NUCLEO übertragen.

(3.3) Verwendung von mbed und den mbed-tools

Weitere Informationen und Erklärungen findet man unter [https://developer.mbed.org/handbook/mbed-tools] in diesem Artikel wird Kurz beschrieben, wie man die offiziellen Version von mbed unter dem Raspberry Pi mit den mbed-tools (Python) verwendet.

mbed installieren und Beispielprogramm übersetzen
  1. #Benötigte Pythonprogramme installieren
  2. sudo apt-get install python-colorama
  3. sudo apt-get install python-jinja2
  4. sudo apt-get install python-serial
  5. #mbed Library kopieren
  6. git clone https://github.com/mbedmicro/mbed.git
  7. cd mbed
  8. #mbed Library für NUCLEO F401RE übersetzen
  9. python workspace_tools/build.py -m NUCLEO_F401RE -t GCC_ARM
  10. #Beispielprogramm 0 Übersetzen
  11. python workspace_tools/make.py -m NUCLEO_F401RE -t GCC_ARM -p 0
  12. #Oder alles auf einmal: Beispielprogramm 0 Übersetzen und anschliessend auf den NUCLEO übertragen
  13. sudo python workspace_tools/make.py -m NUCLEO_F401RE -t GCC_ARM -d /mnt/mbed -p 0

Links für weitere Informationen

Homepage Raspberry Pi

[http://www.raspberrypi.org/]

GNU Tools for ARM Embedded Processors

[https://launchpad.net/gcc-arm-embedded]

ARM mbed IoT Device Platform

[https://www.mbed.com]

[https://github.com/mbedmicro/mbed]

[https://developer.mbed.org/handbook/mbed-tools]

Adam Green gcc4mbed

[https://github.com/adamgreen/gcc4mbed]

Texas Instrumens NUCLEO-F401RE

[http://www.ti.com/tool/ek-tm4c123gxl]

Firmware Update
[http://www.st.com/web/en/catalog/tools/PF260217]



nächster Artikel