Emulation von Embedded Linux-Systemen mit QEMU

Emulation von Embedded Linux-Systemen mit QEMU

 

1. Einleitung

Die Entwicklung eingebetteter Software beruht auf eingebetteten Hardwaregeräten wie Entwicklungsboards, externen Modulgeräten usw., aber wenn die Debugging-Arbeit nichts mit Peripheriegeräten zu tun hat, kann nur das Kernel-Debugging mit QEMU simuliert werden, ohne Hardware zu kaufen.

Es ist für Linux- und Windows-Hosts und emulierte PowerPC-, ARM-, MIPS- und SPARC-Ziele verfügbar. QEMU verfolgt den Ansatz, eine minimale Übersetzungsschicht zwischen dem Host und dem Zielprozessor bereitzustellen. Der Host-Prozessor ist derjenige, auf dem der Emulator ausgeführt wird, und der Zielprozessor wird emuliert.

Im Folgenden finden Sie eine detaillierte Einführung in den Prozess zum Einrichten der QEMU-Entwicklungsumgebung.

 

2. Umgebung

2.1 Verwendete Umgebung

* Ubuntu-18.04.1

ODER:

* PC: Windows10

* Virtuelle Maschine: VirtualBox-5.18

* Virtuelles Betriebssystem: Ubuntu-18.04.1

* Simuliertes Entwicklungsboard: vexpres

2.2 Werkzeuge, die beim Einrichten der Umgebung verwendet werden

*qemu-4.2.0

* linux-4.14.172 (Linux-Kernel)

* u-boot-2017.05

* Busybox-1.31.1

* Arm-Linux-GNUEABI-GCC

Legen Sie alle zugehörigen Dateien in /home/joe/qemu . ab

3. Installieren Sie Cross-Compilation-Tools

# sudo apt install gcc-arm-linux-gnueabi

 

Überprüfen Sie, ob die Installation erfolgreich war

$ arm-linux-gnueabi-gcc -v

Verwenden von eingebauten Inspektionen.

COLLECT_GCC=arm-linux-gnueabi-gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/7/lto-wrapper

Ziel: arm-linux-gnueabi

Konfiguriert mit: ../src/configure -v –with-pkgversion='Ubuntu/Linaro 7.5.0-3ubuntu1~18.04′–with-bugurl=file:///usr

Gewindemodell: Posix

gcc-Version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)

 

4. Konfigurieren und kompilieren Sie den Linux-Kernel

4.1 Linux-Kernel herunterladen

Laden Sie die erforderliche Kernel-Version von www.kernel.org herunter.

Hier lade ich die relativ neueste langfristig unterstützte Kernel-Version linux-4.4.157 herunter

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.157.tar.xz  zum /qemu-Verzeichnis

4.2 Entpacken des Linux-Kernels

# tar xvjf linux-4.4.157.tar.xz

4.3 Linux-Kernel kompilieren

// Geben Sie das Kernel-Quelldateiverzeichnis ein

# cd linux-4.4.157

make CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm vexpress_defconfig

make CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm menuconfig

Wenn das Ausführen von menuconfig anzeigt, dass das ncurses-Paket fehlt, führen Sie einfach den folgenden Befehl aus, um es zu installieren)

$ sudo apt-get install libncurses5-dev

Rufen Sie die Menükonfiguration auf und nehmen Sie die folgenden Einstellungen vor

Kompilieren mit Cross-Toolchain

Generieren Sie nach erfolgreicher Kompilierung eine Kernel-Image-Datei unter dem Verzeichnis

arch/arm/boot, zImage und dtb können zur bequemen Verwendung in einen separaten Ordner kopiert werden

 

5. QEMU-Tools installieren

5.1 QEMU . installieren

* wget https://download.qemu.org/qemu-4.2.0.tar.xz.

* tar xvJf qemu-4.2.0.tar.xz

* CD-Qemu-4.2.0

5.2 Installieren Sie abhängige Pakete, bevor Sie QEMU konfigurieren

# apt installiere zlib1g-dev
# apt installiere libglib2.0-0 libglib2.0-dev
# apt installiere libsdl1.2-dev
# apt installiere libpixman-1-dev libfdt-dev

Um zu verhindern, dass die Dateien nach der Kompilierung unordentlich werden, erstellen Sie das Builder-Verzeichnis als Zwischenzielpfad für die Kompilierung.

QEMU konfigurieren, kompilieren und installieren.

5.3 Konfigurieren Sie QEMU, um alle Boards unter der Arm-Architektur zu unterstützen

#./configure-target-list = arm-soldmmu -audio-drv-list =

Wenn pixman fehlt, wenn die folgende Eingabeaufforderung erscheint,

Verwenden Sie sudo apt-get install libpixman-1-dev, um es zu installieren.

5.4 QEMU-Version anzeigen

5.5 Von QEMU unterstützte Entwicklungsboards anzeigen

5.6 QEMU . ausführen

# qemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append „console=ttyAMA0“

ODER:

$pwd

/home/joe/qemu

# qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-.4.157/arch/arm/boot/zImage -dtb linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9. dtb -nographic -append „console=ttyAMA0“

Um qemu besser testen und starten zu können, können Sie das Startskript start.sh erstellen und dem Skript die Berechtigung erteilen, chmod +x start.sh auszuführen

 

#! / Bin / bash

 

qemu-system-arm \

-M vexpress-a9 \

-m 512M \

-kernel /home/joe/jemu/linux-4.4.157/arch/arm/boot/zImage \

-dtb /home/joe/jemu/linux-4.4.157/arch/arm/woot/dts/vexpress-v2p-ca9.dtb \

-nografisch \

- "console=ttyAMA0" anhängen

 

6. Erstellen Sie ein Root-Dateisystem

Verwenden Sie busybox, um ein einfaches Root-Dateisystem zu erstellen.

6.1 Busybox-Tool herunterladen

Laden Sie busybox von https://busybox.net/downloads/ herunter

# wget https://busybox.net/downloads/busybox-1.31.1.tar.bz2

# tar xjvf busybox-1.31.1.tar.bz2

# cd busybox-1.31.1

# defconfig erstellen

# make CROSS_COMPILE=arm-linux-gnueabi-

# Installieren Sie cross_compile = arm-linux-gnuebi-

Die folgenden Informationen werden angezeigt, um anzuzeigen, dass die Installation erfolgreich war.

Nach Abschluss der Installation wird standardmäßig das Verzeichnis ./_install für die generierte Zieldatei verwendet.

 

6.2 Root-Dateisystem generieren

6.2.1 Busybox kompilieren und installieren

# mkdir rootfs

# sudo cp -r _install/* rootfs/

6.2.2 Glibc-Bibliothek hinzufügen, Loader und dynamische Bibliothek im Root-Dateisystem hinzufügen

# sudo cp -r _install/* rootfs/

# sudo cp -p / usr / arm-linux-gnueabi / lib / * rootfs / lib /

6.2.3 Erstellen Sie 4 tty-Endgeräte (c steht für Zeichengerät, 4 ist die Hauptgerätenummer und 1~4 sind die Nebengerätenummern)

 

6.3 SD-Karten-Dateisystem-Image erstellen

6.3.1 Ein leeres SD-Karten-Image erstellen

# DD if = / dev / null von = rootfs.ext3 BS = 1M Anzahl = 32

6.3.2 SD-Karte als exts-Dateisystem formatieren

# mkfs.ext3 rootfs.ext3

6.3.3 Rootfs auf SD-Karte brennen

# sudo mount -t ext3 rootfs.ext3 /mnt -o Schleife

# sudo cp -rf rootfs/* /mnt/

# sudo umount /mnt

 

7. Überprüfen Sie

7.1 Qemu . starten

Führen Sie den folgenden Befehl aus, um zu testen, ob der kompilierte Kernel erfolgreich ausgeführt werden kann

# sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel ~/qemu/zImage –dtb ~/qemu/vexpress-v2p-ca9.dtb -nographic -append „console=ttyAMA0“

Oder mit Skript:

 

Im obigen Test meldet der Kernel Panik, was darauf hindeutet, dass uns das Root-Dateisystem fehlt.

Das obige Problem ist auf das Busybox-Tool zurückzuführen, das in der x86-Umgebung generiert wurde.

Wir haben make install bei der Installation von busybox verwendet, also sollten Sie verwenden

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-install

 

Das Kompilierungstool generiert das Busybox-Tool, das von der Arm-Plattform verwendet wird

# Datei rootfs/bin/busybox

rootfs/bin/busybox: ELF 32-bit LSB Executable, ARM, EABI5 Version 1 (SYSV), dynamisch gelinkt, Interpreter /lib/ld-, für GNU/Linux 3.2.0, BuildID[sha1]=cbcd33b8d6c946cb19408a5e8e714de554c87f52, stripped

 

7.2 Erneut verifizieren

Nun hat Qemu den Linux-Kernel gestartet und das Dateisystem erfolgreich gemountet und kann mit einfachen Funktionen über das serielle Terminal mit dem System interagieren. Das Problem, dass /etc/init.d/rcS im Druckprozess nicht ausgeführt werden kann, Sie müssen nur die Datei /etc/init.d/rcS hinzufügen. Der Inhalt der Datei kann eine Prompt-Anweisung sein.

 

7.3 QEMU . beenden

Zwei Möglichkeiten, qemu . zu beenden

* In einer anderen Terminaleingabe: kill all qemu-system-arm

* Bei Qemu-Eingabe: Strg+A; x

QEMU: Beendet

 

8. Starten Sie den Linux-Kernel über u-boot

Eingebettete Systeme umfassen normalerweise: u-boot, kernel, rootfs und appfs. Die Positionsbeziehung dieser Teile auf der ARM-Entwicklungsplatine, wie in der Abbildung unten gezeigt

 

Bootloader BootParameter Kernel rootfs Apps

 

Rootfs können in Board oder PC ausgeführt werden

 

8.1 U-Boot vorbereiten

8.1.1 u-boot herunterladen

http://ftp.denx.de/pub/u-boot/, wir verwenden: u-boot-2021.01.tar.bz2

# tar -jxvf u-boot-2018.09.tar.bz2

8.1.2 U-Boot kompilieren

# vim-Makefile

CROSS_COMPILE = arm-linux-gnueabi-

# vim config.mk

ARCH = Arm

# make vexpress_ca9x4_defconfig, Fehler

Benötigen: sudo apt install bison

Sudo apt install flex

dann: # make -j4 error

Benötigen: export CROSS_COMPILE=arm-linux-gnueabi-

export ARCH=arm

nochmal: # make vexpress_ca9x4_defconfig

# make -j4

 

 8.1.3 Test, u-boot starten

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –nographic

 

8.2 Zusammenstellung der Kernel-Konfiguration

Verwenden Sie u-boot, um das Kernel-Image zu booten:

Muss den Kernel in das uImage-Format kompilieren,

Muss die Ladeadresse von uImage im Speicher angeben

Geben Sie beim Kompilieren des Kernels Folgendes an: make LOADADDR=? uImage -j4

 

# cd /home/joe/qemu/linux-4.4.157

# make LOADADDR=0x60003000 uImage -j4

 

Nachdem die U-Boot-Kompilierung abgeschlossen ist, wird eine mkimage-Datei im Tool-Ordner erstellt, kopieren Sie diese Datei in den bin-Ordner unter dem Cross-Compiler-Verzeichnis.

$ cd qemu/linux-4.4.157

Fehler:

$ sudo apt installiere u-boot-tools

Holen Sie sich uImage

9. QEMU-Netzwerkfunktionseinstellungen

Wenn die virtuelle Qemu-Maschine beim u-Boot startet, muss uImage in den Speicher geladen werden und uImage kann über den TFTP-Server an die angegebene Adresse im Speicher heruntergeladen werden.

9.1 Prüfen Sie, ob der Host-Kernel das tun/tap-Modul unterstützt

// Installieren Sie die beiden Tools, von denen das Bridged-Netzwerk abhängt

# sudo apt installieren UML-Utilities Bridge-Utils

Tun-Gerätedatei erstellen: /dev/net/tun (normalerweise automatisch erstellt)

Ändern Sie /etc/network/interfaces (konfigurieren Sie das Netzwerk, starten Sie es neu, damit es wirksam wird)

# sudo vim / etc / network / interfaces

auto loiface lo inet loopbackauto enp0s3 // Name der virtuellen Netzwerkkarteauto br0iface br0 inet dhcpbridge_ports enp0s3

 

NIEMALS neu starten

# Neustart

Dann überprüfen Sie die Netzwerkumgebung von Qemu

Der virtuelle Netzwerkport br0 ist der Netzwerkport für die Kommunikation zwischen der virtuellen Qemu-Maschine und dem Linux-Host.

 

10. TFTP-Server installieren

Erstellen Sie einen TFTP-Server, um uImage in den Speicher herunterzuladen, wenn Sie uImage für das Qemu-Simulationsentwicklungsboard starten

 

10.1 tftp-Tool installieren

 

$ APT-GET INSTALL TFTP-HPA TFTPD-HPA XINETD

 

10.2 Ändern Sie die Konfigurationsdatei und legen Sie das TFTP-Serververzeichnis fest

# sudo vim /etc/default/tftpd-hpa

......

TFTP_DIRECTORY=“/home/joe/tftpboot“

......

10.3 Erstellen Sie ein tftp-Verzeichnis auf dem Linux-Host

# mkdir /home/joe/tftpboot

# chmod 777 /home/joe/tftpboot

 

10.4 Starten Sie den tftp-Dienst neu

# sudo /etc/init.d/tftpd-hpa Neustart

 

10.5 Kernel-Startparameter in u-boot einstellen

uImage und cexpress-v2p-ca9.dtb nach tftpboot kopieren

Qemu starten, um zu überprüfen

 

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –nographic -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 -sd rootfs. ext3

 

Nun ist das rootfs-Verzeichnis ein einfaches Root-Dateisystem, das in eine Spiegeldatei umgewandelt werden kann, und die Spiegeldatei kann auf das Entwicklungsboard gebrannt werden, oder der Linux-Kernel kann per U-Boot in Qemu gestartet und auf dem gemountet werden Spiegeldatei. Es kann auch so eingestellt werden, dass es über das NFS-Netzwerkdateisystem bootet.

 

11. NFS-Dateisystem mounten

11.1 NFS-Dienst installieren und konfigurieren

11.1.1 installieren

$ sudo apt installieren nfs-kernel-server

 

11.1.2 Konfiguration

$ sudo mkdir /home/joe/qemu/rootfs

$ sudo chown niemand:nogroup /home/joe/qemu/rootfs

$ sudo chmod 777 / home / joe / qemu / rootfs

$ sudo nano /etc/exports

Hinzufügen: /home/joe/qemu/rootfs *(rw,sync,no_root_squash)

 

nfs-Server neu starten:

$ sudo /etc/init.d/nfs-kernel-server restart

Oder: $systemctl restart nfs-kernel-server

 

Überprüfen Sie, ob das freigegebene NFS-Verzeichnis erstellt wurde

$ sudo showmount -e

Bei Verwendung des NFS-Netzwerkdateisystems muss der Linux-Host die System-Firewall schließen, da sonst bei laufendem System Anomalien auftreten.

 

Zusammenfassung

Hoffentlich wissen Sie mit Hilfe dieses Blogs mehr über QEMU. Alle oben demonstrierten Techniken wurden in verschiedenen Einreichungen für unser Programm verwendet. Es gibt keinen einzigen, festen Weg, um mit QEMU zu emulieren. Entdecken Sie verschiedene Techniken und sehen Sie, was für Sie funktioniert. Machen Sie sich mit dem Wissen vertraut und Sie werden überrascht sein, wie es Ihnen auf unerwartete Weise helfen kann.

Vorstellung von Lichee Pi

Vorstellung von Lichee Pi

Der LicheePi ist ein empfindlicher Einplatinencomputer, der auf der kostengünstigen Allwinner V3S-Plattform läuft, die in den letzten Jahren beliebt ist. Es kann für Anfänger zum Erlernen von Linux oder für die Produktentwicklung verwendet werden. Es bietet eine Fülle von Peripheriegeräten (LCD, ETH, UART, SPI, I2C, PWM, SDIO…) und eine leistungsstarke Leistung.

 

       

        Lichee Zero Lichee Nano

 

 

 

       

                                 Lichee Pi Zero Lichee Pi Nano 

 

 

Eigenschaften

LICHEE PI NULL

LICHEE PI NANO

SoC Allwinner V3S Allwinner F1C100S
CPU ARM Cortex-A7 ARM9
Betriebsfrequenz 1.2GHz 408MHz
RAM 64MB DDR2 32MB DDR2
Lagerung SPI-Flash/Micro-SD SPI-Flash/Micro-SD

Display

 

* Universelles 40P RGB-LCD-FPC:

* Unterstützte Auflösungen: 272×480, 480×800,1024×600

* Onboard RTP-Chip, unterstützt einen Touchscreen

* Universelles 40P RGB-LCD-FPC:

* Unterstützte Auflösungen: 272×480, 480×800,1024×600

* Onboard RTP-Chip, unterstützt einen Touchscreen

Schnittstelle

 

* SDIO x2
* SPI x1
* I2C x2
* UARTx3
* 100M Ether x1 (einschließlich EPHY)
* OTG-USB x1
* MIPI-CSI x1
*PWM x2
* LRDC x1
* Lautsprecher x2 + Mikrofon x1
* SDIO x1
* SPI x2
* TWIX x3
* UART x3
* OTG-USB x1
*TV-Ausgang* PWM x2
* LRDC x1
* Lautsprecher x2 + Mikrofon x1

Elektrische Informationen

 

Micro-USB 5V, 2.54mm Pins 3.3V~5V Netzteil; 1.27 mm Stanzloch-Netzteil.

1GHz Linux Leerlauf 90~100mA; CPU-Brennlauf ~180mA

Lagertemperatur -40 ~ 125

Betriebstemperatur -20~70

Micro-USB 5V, 2.54mm Pins 3.3V~5V Netzteil; 1.27 mm Stanzloch-Netzteil.

408MHz Linux IDLE laufen 90~54mA; mit Bildschirmbetriebsstrom ~250mA

Lagertemperatur -40 ~ 125

Betriebstemperatur -20~70

 

Die Temperatur beim Ausführen des Linux-Stresstests liegt nur geringfügig über der Körpertemperatur.

 

Lichee Pi unterstützt viele Betriebssysteme wie: Linux, RT-Tread, Xboot oder kein Betriebssystem.

Wie die meisten MCUs kann der Lichee Pi mit mehreren Low-Speed-Schnittstellen wie GPIO, UART, PWM, ADC, I2C, SPI und mehr verbunden werden. Darüber hinaus können andere Hochgeschwindigkeits-Peripheriegeräte wie RGB-LCD, EPHY, MIPI CSI, OTG USB und mehr ausgeführt werden. Der Lichee Pi verfügt über einen integrierten Codec, der den direkten Anschluss an einen Kopfhörer oder ein Mikrofon ermöglicht.

 

Display-Anschluss:

Das universelle 40P-LCD verfügt über eine LED-Hintergrundbeleuchtung und vieradrige Leitungen, einen elektrischen Widerstand, der sich sehr gut für Anzeige und Interaktion eignet. A13 unterstützt auch die Vierdraht-Widerstandsberührungsfunktion und kann eine Zweipunkt-Berührungserkennung durchführen.

 

Diese Schnittstelle ist kompatibel mit der Schnittstelle von AUSRICHTUNGSANZEIGE Produkte.

 

RGB zu VGA:

 

RGB zu HDMI:

 

RGB zu GPIO:

 

RGB zu DVP-CSI:

 

Lichee Pi-Link:

http://dl.sipeed.com/
Wiki: maixpy.sipeed.com
Blog:blog.sipeed.com
Telegrammgruppe: https://t.me/sipeed

Einführung in das Orient Display Embedded Project

Einführung in das Orient Display Embedded Project

Orient Display ist eines der weltweit führenden Displays Hersteller von LCD-Displays die 1996 von Führungskräften mit mehr als 25 Jahren Erfahrung in Forschung und Entwicklung sowie in der Produktion gegründet wurde. Neben Display konzentrierte sich Orient Display auch auf Embedded-Technologien, die die ARM-Architektur einschließen, und hat reiche Erfahrung mit Embedded-Produkten gesammelt.

Der technische Service von Orient Display umfasst jetzt Hardware, Software und Beratung.

 

Unsere Hardware-Team fertigen Prototypen in kürzester Zeit nach Ihren Designvorstellungen und Anforderungen. Wir sind spezialisiert auf das Design kostengünstiger oder komplexer Hochleistungsplatinen, um Ihren Anspruch an hohe Zuverlässigkeit in einem kurzen Entwicklungszyklus zu erfüllen.

- Schematisches Design

– PCB-Layout

– Branchenspezifische Produktanpassung

 

Unsere Software-Team ist spezialisiert auf Linux-basierte ARM®-DesignsPowerPC und x86-Prozessor, um nur einige zu nennen. Als Komplettlösungsanbieter für Linux, Android und WinCE in Embedded Systemen lösen wir die systembezogenen End-to-End-Probleme Ihrer Produkte.

– Systemmigration, Optimierung und Anpassung

– Entwicklung vorantreiben

– Kernel-Schneiderei

– Portierung von LINUX KERNEL auf ARM, PPC oder x86 Board

– APP-Entwicklung (Anwendung, Linux QT, Linux C/++)

 

Unsere FAE Team stellen Ihnen auch die komplette Technologiepalette für Ihre Produkte oder Halbzeuge zur Verfügung.

– Wir bieten Beratung zu Software- und Hardwareressourcen unserer Produkte;

– Wir lösen Probleme, die bei der Verwendung von Software- und Hardwarehandbüchern unserer Produkte auftreten;

– Technischer After-Sales-Support für OEM und ODM;

– Datenpflege und -aktualisierung;

– Produkte von Orient Display werden von unseren TIEFSTPREISGARANTIE.

 

Entwicklungssequenz

 

1. Analyse der Systemanforderungen

* Designaufgaben, Ziele, Spezifikationen

– Diese von unseren Kunden bereitgestellt

* Funktionale und nicht-funktionale Anforderung

– Berücksichtigen Sie Systemleistung, Kosten, Stromverbrauch, Volumen, Gewicht und andere Faktoren

 

2. Architekturdesign

Eine gute Architektur ist der Schlüssel zum Erfolg des Designs. In diesem Schritt ist es oft notwendig, folgende Dinge zu tun:

  • Wählen Sie den Hauptchip aus:

— ARM Cortex A, R oder M oder PowerPc oder ColdFire

  • Bestimmen Sie das RTOS:

– Linux, uClinux, Vxworks, freeRTOS, WinCE

  • Anzeige auswählen:

- TFT-Panel, Sonnenlichtlesbares TFT, LCD-Glasplatten, Grafisches LCD,  OLED-Display, Touch Panels, Eingebettetes LCD-Display or Maßgeschneiderte Anzeige by Anzeige ausrichten

  • Programmiersprache:

— c/c++, Python, Java

  • Entwicklungswerkzeuge:

u-boot, busybox, QT, Ubuntu, stm32CubeIde, Visual Studio, Android Studio, Keil uVision, RT-Tread Studio

 

3. Hardware- und Software-Co-Design

Um den Produktentwicklungszyklus zu verkürzen:

Hardware:  Wir beginnen normalerweise ein Projekt von einem Evaluation Board wie Orient Display AIY-A002M, AIY-A003M und AIY-A005M. später wird die maßgeschneiderte Platine für das Projekt angepasst, Teile, die nicht benötigt werden, verwerfen.

Softwareentwicklungssequenz:

  • Normalerweise wählen wir u-boot als Bootloader, es 1) init CPU in einen bekannten Zustand 2) init Speicher 3) init Interrupt 4) init Clock 5) Laden des Kernels auf die laufende Adresse
  • Kernel konfigurieren:

1) Kernelsystem konfigurieren: *Speicherverwaltung, *Dateisysteme, *Gerätetreiber, *Netzwerkstack, *I/O-Systeme

2) E/A-Gerätetreiber schreiben *char-Gerätetreiber, *Block-Gerätetreiber, *Net-Gerätetreiber

  • Anwendungen auswählen:

*Eine Benutzerbibliothek auswählen *Benutzeranwendung erstellen *Initialisierungsprozess konfigurieren *Stamm-FS erstellen

 

4. SSystemintegration

Integrieren Sie Software, Hardware und Ausführungsgeräte des Systems zusammen, debuggen, finden und verbessern Sie die Fehler im Einheitsdesignprozess.

 

5. Systemtest

Testen Sie das entworfene System, um zu sehen, ob es die in der Spezifikation angegebenen funktionalen Anforderungen erfüllt. Das größte Merkmal des Entwicklungsmodells für eingebettete Systeme ist die umfassende Entwicklung von Soft- und Hardware.

 

Fazit

Orient Display verfügt über ein erstaunliches Team talentierter Experten mit der Erfahrung und den Fähigkeiten, ein eingebettetes Displaymodul vom Konzept bis zur Produktion zu entwickeln.

Bei Fragen wenden Sie sich bitte an unsere Ingenieure unter: tech@orientdisplay.com.

So wählen Sie ARM-Prozessoren aus

So wählen Sie ARM-Prozessoren aus

Einleitung

Das breiteste Spektrum von Mikroprozessor Kerne für fast alle Anwendungsmärkte. Entdecken ARM. Leistungs-, Strom- und Kostenanforderungen für fast alle Anwendungsmärkte, Prozessoren sind entscheidend. Die Systemleistung hängt stark von seiner Hardware ab; Dieser Artikel führt Sie durch eine Studie des ARM-Prozessors und ist eine große Hilfe bei Ihrer Entscheidungsfindung.

 

Eine kurze Einführung in ARM

Abbildung 1. Roadmap für ARM-Prozessoren

 

Vor 2003 gibt es klassische ARM-Prozessoren, darunter ARM7 (ARMv4-Architektur), ARM9 (ARMv5-Architektur), ARM11 (ARMv6-Architektur). ARM7 hat keine MMU (Memory Management Unit), kann kein Mehrbenutzer-Mehrprozesssystem wie Linux und WinCE ausführen. Kann nur Systeme wie ucOS und ucLinux ausführen, die keine MMU benötigen. ARM9 und ARM11 sind eingebettete CPUs mit MMU, die Linux ausführen können.

Nach 2003 wurde die ARMv7-Architektur nach Cortex benannt und in drei Serien unterteilt: Cortex-A, Cortex-R und Cortex-M.

  • Cortex-A — Anwendungsprozessorkerne für leistungsintensive Systeme
  • Kortex-R – Hochleistungskerne für Echtzeitanwendungen
  • Kortex-M – Mikrocontroller-Kerne für eine Vielzahl von Embedded-Anwendungen

Einfach ausgedrückt, Cortex-A Serie eignen sich für Anwendungen mit hohen Rechenanforderungen, mit umfangreichen Betriebssystemen und interaktiven Medien- und Grafikerlebnissen. Kortex-R sind dafür geeignet, die Zuverlässigkeit, Hochverfügbarkeit, Fehlertoleranz, Wartbarkeit und Echtzeitreaktion erfordern. Kortex-M Serie sind auf kosten- und leistungsempfindliche MCUs und Endanwendungen ausgerichtet.

 

Cortex-A VS. Cortex-R VS. Cortex-M

Cortex-A

Die Prozessoren der Cortex-A-Kategorie sind Linux- und Android-Geräten gewidmet. Alle Geräte – angefangen von Smartwatches und Tablets bis hin zu Netzwerkgeräten – können von Cortex-A-Prozessoren unterstützt werden.

  • Cortex-A-Prozessoren (A5, A7, A8, A9, A12, A15 und A17) basieren auf der ARMv7-A-Architektur
  • Der Satz gemeinsamer Funktionen für A-Prozessoren umfasst eine Media Processing Engine (NEON), ein Tool für Sicherheitszwecke (Trustzone) und verschiedene unterstützte Befehlssätze (ARM, Thumb, DSP etc.)
  • Die Hauptmerkmale der Cortex-A-Prozessoren sind Spitzenleistung und brillante Energieeffizienz, die eng gebündelt sind, um den Benutzern den bestmöglichen Service zu bieten

Die Hauptmerkmale des Cortex-A-Prozessors:

Cortex-A5: Der Cortex A5 ist das kleinste und leistungsschwächste Mitglied der Cortex A-Serie, kann aber dennoch Multicore-Leistung zeigen, er ist mit A9- und A15-Prozessoren kompatibel.

Cortex-A7: Der Stromverbrauch des A7 ist fast der gleiche wie der des A5, aber die Leistung des A7 ist 20 % höher als die des A5 sowie die volle Architekturkompatibilität mit Cortex-A15 und Cortex-A17. Der Cortex-A7 ist die ideale Wahl für kostensensible Smartphone- und Tablet-Implementierungen.

Contrex-A15: Der Cortex-A15 ist das leistungsstärkste Mitglied dieser Serie und bietet die doppelte Leistung als A9. A15 findet seine Anwendung in High-End-Geräten, stromsparenden Servern und drahtloser Infrastruktur. Dies ist die erste Prozessorunterstützung für Datenmanagement- und virtuelle Umgebungslösungen.

Contrex-A17: Der Cortex-A17 zeigt 60 % mehr Leistung als der A9. Das Hauptziel ist die Befriedigung der Bedürfnisse von Geräten der Premiumklasse.

Contrex-A50: Contrex-A50, neueste Serie, basieren auf der ARMv8-Architektur und bringen Arch64-Bit-Unterstützung mit, ein energieeffizientes System. Ein offensichtlicher Grund für die Umstellung auf 64-Bit ist die Unterstützung von mehr als 4 GB physischem Speicher, die bereits bei Cortex-A15 und Cortex-A7 erreicht wird.

 

Kortex-R

Cortex-R-Prozessoren zielen auf Hochleistungs-Echtzeitanwendungen wie Festplattencontroller, Netzwerkgeräte, Mediaplayer und andere ähnliche Geräte ab. Darüber hinaus bieten sie auch eine hervorragende Unterstützung für die Automobilindustrie wie Airbags, Bremssysteme und Motormanagement.

Kortex-R4:  Cortex-R4 ist gut für Automobilanwendungen geeignet. Er kann mit bis zu 600 MHz getaktet werden, verfügt über eine 8-stufige Pipeline mit Dual-Isse, Pre-Fetch und einem Interrupt-System mit niedriger Latenzzeit und ist somit ideal für sicherheitskritische Systeme.

Kortex-R5: Cortex-R5 erweitert die von R4 angebotenen Funktionen und erhöht die Effizienz, Zuverlässigkeit und verbessert das Fehlermanagement. Die Dual-Core-Implementierung ermöglicht den Aufbau sehr leistungsfähiger, flexibler Systeme mit Echtzeitreaktionen.

Kortex-R7: Der Cortex-R7 erweitert die Leistung deutlich. Sie verfügen über eine 11-stufige Pipeline und ermöglichen sowohl eine Ausführung außerhalb der Reihenfolge als auch eine Verzweigungsvorhersage auf hoher Ebene. Tools können für Lock-Step, symmetrische und asymmetrische Multiprocessing implementiert werden. Der generische Interrupt-Controller ist ein weiteres wichtiges Merkmal, das erwähnt werden sollte.

 

Kortex-M

Cortex-M wurde speziell für den MCU-Markt entwickelt. Die Cortex-M-Serie basiert auf der ARMv7-M-Architektur (verwendet für Cortex-M3 und Cortex-M4), und die kleinere Cortex-M0+ basiert auf der ARMv6-M-Architektur. Man kann mit Sicherheit sagen, dass der Cortex-M für die 32-Bit-Welt das geworden ist, was der 8051 für die 8-Bit-Welt ist – ein Industriestandard-Core, der von vielen Herstellern geliefert wird. Die Cortex-M-Serie lässt sich beispielsweise als Softcore in einem FPGA implementieren, viel häufiger findet man sie jedoch als MCU mit integrierten Speichern, Taktgebern und Peripheriegeräten implementiert. Einige sind auf Energieeffizienz optimiert, einige auf hohe Leistung und einige sind auf ein bestimmtes Marktsegment wie Smart Metering zugeschnitten

Für Anwendungen, die besonders kostensensibel sind oder von 8-Bit auf 32-Bit migrieren, ist das kleinste Mitglied der Cortex-M-Serie möglicherweise die beste Wahl.

Kortex-M0: Der Cortex-M0+ verwendet den Thumb-2-Befehlssatz und verfügt über eine 2-stufige Pipeline. Wesentliche Merkmale sind der Bus für Single-Cycle-GPIO und der Micro-Trace-Puffer.

Kortex-M3&M4:  Cortex-M3 und Cortex-M4 sind sehr ähnliche Kerne. Jeder bietet eine 3-stufige Pipeline, mehrere 32-Bit-Busse, Taktraten bis zu 200 MHz und sehr effiziente Debug-Optionen. Der wesentliche Unterschied besteht in der DSP-Fähigkeit des Cortex-M4-Kerns. Cortex-M3 und Cortex-M4 teilen sich dieselbe Architektur und denselben Befehlssatz (Thumb-2). Wenn Ihre Anwendung Fließkomma-Mathematik erfordert, werden Sie dies auf einem Cortex-M4 erheblich schneller erledigen als auf einem Cortex-M3. Das heißt, für eine Anwendung, die nicht die DSP- oder FPU-Funktionen des Cortex-M4 nutzt, werden Sie die gleiche Leistung und den gleichen Stromverbrauch auf einem Cortex-M3 sehen. Mit anderen Worten, wenn Sie DSP-Funktionalität benötigen, entscheiden Sie sich für einen Cortex-M4. Andernfalls erledigt der Cortex-M3 die Arbeit.

 

Zusammenfassung

Abbildung 2. Kortex-Übersicht

 

ARM-Prozessoren bieten eine Vielzahl von Fähigkeiten für unterschiedliche Zwecke. Mit ein wenig Überlegung und Recherche können Sie den richtigen Prozessor finden, der Ihren Anwendungsanforderungen entspricht. sei es für ein High-End-Tablet oder einen ultra-günstigen drahtlosen Sensorknoten.

Es ist eine Herausforderung, die richtige Wahl des Cortex-Kerns zu treffen und die Idee in die Realität umzusetzen. Aber ein Team von erfahrenen Fachleuten kann sich um alle Fragen kümmern und Konzepte jeder Komplexität umsetzen.

Orient Display konzentriert sich seit vielen Jahren auf ARM-Prozessor-bezogene Technologien und hat umfangreiche Erfahrungen in der Entwicklung und Implementierung von ARM-Architekturprodukten gesammelt. Neben der kontinuierlichen Einführung von Entwicklungsplattformen und Coreboards, die den allgemeinen Bedürfnissen des Marktes entsprechen, geht es auch auf die individuellen Projektbedürfnisse der Kunden ein. Bieten Sie maßgeschneiderte Dienstleistungen an.

Unser Hardware-Team kann in kürzester Zeit Prototypen nach Ihren Designideen und Bedürfnissen herstellen. Unser Softwareteam kann Ihnen helfen, alle Funktionen der Schneidtreiberschicht anzupassen.

Kontakt und wir helfen Ihnen, Ihre Pläne von der ersten Idee bis zum fertigen Produkt zu machen.

Wie verwendet man grafische LCD-Displays mit Raspberry Pi?

Wie verbinde ich ein Grafik-LCD mit Raspberry PI?

Der Artikel zeigt wie man einen 128×64 . anschließt Grafik-LCD-Display zum Raspberry Pi.

Als LCD wird ein 128×64 mit LCD-Controller von ST7565 verwendet. Es kann direkt über die Raspberry Pi 3.3V-Schiene mit Strom versorgt werden. Es erfordert 5 GPIO-Pins für Daten.

Der Schaltplan ist, CS (Chip Select), RST (Reset) und A0 (Register Select) können an 3 beliebige GPIO-Pins angeschlossen werden. In diesem Beispiel sind 8,24 und 25 Standardwerte. Bei der Instanziierung der Python-Klasse ST7565 können verschiedene Werte als Parameter angegeben werden. SCLK (Serial Clock) auf dem GLCD geht an GPIO 11, die serielle Uhr des Pi. SID (Serial Input Data) auf dem GLCD geht zu GPIO 10 auf dem Pi, das MOSI ist. Für SID und SCLK müssen GPIO 10 und 11 verwendet werden. Vdd ist mit einem 3.3-V-Pin am PI verbunden und die Masse ist ebenfalls verbunden.

Das LCD hat eine RGB-Hintergrundbeleuchtung. Die LED-Pins können zu den GPIOs 16,20, 21 und 7565 gehen. Um die Farbe vom Pi zu steuern, geben Sie RGB-Pins an, wenn die ST20-Klasse instanziiert wird. Die Widerstände müssen in Reihe geschaltet werden, um den Strom zu begrenzen und einen LED-Ausfall zu verhindern. Die LED-Helligkeit kann durch Verwendung unterschiedlicher Widerstandswerte geändert werden. Es ist am besten, den Strom auf etwa 40 mA einzustellen, unterschiedliche Werte führen natürlich zu einer anderen Farbmischung. Es ist sehr schwierig, eine reine weiße Farbe zu mischen. Bitte berechnen Sie den Widerstandswert sorgfältig, bei 60 mA nimmt die LED-Helligkeit mit der Zeit stark ab, bei einem Strom von fast XNUMX mA kann die LED durchfallen und dauerhaft beschädigt werden.

Wie programmiert man ein Grafik-LCD?

Das Display ist 128 Pixel horizontal mal 64 Pixel vertikal groß. Das LCD kann in 8 horizontale Seiten unterteilt werden. Sie sind von 3 bis 0 und 7 bis 4 von oben nach unten nummeriert. Jede Seite enthält 128 Spalten und 8 Pixelreihen. Um die Pixel zu adressieren, geben Sie die Seiten- und Spaltennummer an und senden Sie ein Byte, um 8 vertikale Pixel gleichzeitig zu füllen.

Das Display hat SPI (Serielle Peripherieschnittstelle) mit Pi . verbinden. SPI erfordert 3 Zeilen MOSI, MISO und Clock. Der Pi ist der Master und der GLCD der Slave. In diesem Beispiel wird nur auf GLCD geschrieben und nicht bereit, daher wird die Verbindung zu MOSI- und Clock-Leitungen benötigt. MOSI ist die Ausgabe vom Pi zum GLCD und die Uhr synchronisiert das Timing.

  1. SPI auf Raspberry Pi aktivieren zuerst
  2. Wählen Sie im raspi-config-Menü Erweiterte Optionen und dann SPI. Wählen Sie dann Ja für „Möchte die SPI-Schnittstelle aktiviert werden“. Klicken Sie auf OK, Neustart. Wählen Sie Ja für „das standardmäßig zu ladende SPI-Kernel-Modul“. Starten Sie den Pi neu, nachdem Sie SPI aktiviert haben. Dann testen Sie SPI mit IsmodEs sollte je nach Pi-Version SPI_bcm2708 oder spi_bcm2835 zurückgeben. Die Python-SPI-Bibliothek erfordert Python2.7 dev, das mit apt-get install installiert werden kann:
  3. Das Python SPI-Bibliothek wird genannt py-spidev. Es kann mit git:GLCD . installiert werden Die Python-Bibliothek für den Pi kann von der GitHub-Site heruntergeladen werden.
  4. Die ST7565-Hauptbibliothek (st7565.py) verarbeitet Zeichnungen, Text und Bitmaps und ein Schriftartenmodul (xglcd_font.py) zum Laden von X-GLCD-Schriftarten. Hier sind die grundlegenden Zeichenbefehle zum Erstellen von Punkten, Linien, Rechtecken, Kreisen, Ellipsen und regelmäßigen Polygonen: Weitere Informationen finden Sie in der folgenden Referenz oder Kontaktieren Sie unsere Ingenieure.

Erste Schritte mit Projekten basierend auf dem STM32G071RB Board mit STM32CubeIDE

Erste Schritte mit Projekten basierend auf dem STM32G071RB Board mit STM32CubeIDE

Verpasse nicht unseren Steuerplatine!

Der Einstieg in einen 32-Bit-ARM-basierten Mikrocontroller ist immer etwas entmutigend. Es gibt zu viele verfügbare Mikrocontroller, Plattformen, Entwicklungsboards, Tools und Software. Dieser Hinweis beschreibt Schritt für Schritt, wie Sie ein LED-Projekt beginnen.

Erste Schritte: über das Entwicklungsboard STM32G071RB

Merkmale:

  • Kern: ARM® 32-bit Cortex®-M0+ CPU, Frequenz bis 64 MHz
  • Bis zu 128 KByte Flash-Speicher, 36 KByte SRAM
  • 7-Kanal-DMA-Controller mit flexiblem Mapping
  • 12-Bit, 0.4 µs ADC (bis zu 16 ext. Kanäle)
  • Zwei 12-Bit-DACs, Sample-and-Hold mit geringem Stromverbrauch
  • Zwei I2C, vier USARTs, ein Low-Power-UART, zwei SPIs

 

Erste Schritte: STM32CubeIDE installieren

Sie können downloaden STM32CubeIDE von ihrer st.com. Es ist kostenlos. Installieren Sie STM32CubeIDE wie folgt STM32CubeIDE-Installationsanleitung.

 

Dein erstes Projekt: LED blink

Bevor wir mit dem Schreiben von Code beginnen können, müssen wir ein Projekt erstellen. Dies ist ähnlich wie bei den meisten anderen IDEs – Projekte werden verwendet, um alle Ihre Einstellungen, Code und Definitionen in einer einzigen Sammlung zu bündeln, die alle von derselben Anwendung aus verwaltet werden.

 

 

SCHRITT 1: Starten Sie ein neues Projekt, über das Symbol oben links ( Oder unter dem Menü Datei > Neu > STM32-Projekt), um zu beginnen.

 

Schritt 2: Projektname: G0_LED, dann klicken Sie auf die Schaltfläche Fertig stellen.

Aus dem Schaltplan, dass die LED4 von STM32G071 gesteuert wird und der Port PA5 ist.

Schritt 3: Wählen Sie unter System Core > SYS Serial Wire, richten Sie PA5 als GPIO_OUTPUT ein.

Verwenden Sie das Label für PA5 als LED_GREEN wie folgt:

 

Schritt 4: Dann Code generieren.

 

CubeIDE, auf dem diese Funktionalität entwickelt wurde, generiert C-Dateien, um damit in einem Src-Verzeichnis zu arbeiten, und legt eine HAL (Hardware Abstraction Layer) in ein Includes-Verzeichnis ab. Es scheint, dass CubeIDE genau auf die gleiche Weise funktioniert. Erweitern Sie die Ordner rechts unter der Projektansicht und sehen Sie, was sie für Sie generiert hat.

 

 

Schritt 5: Lassen Sie uns jetzt ein bisschen eigenen C-Code hinzufügen! Nach dem Infinite Loop-Bereich fügen wir Code hinzu, um die LED unter Abschnitt 3 wie folgt umzuschalten:

 

 

Das Projekt kompilieren und auf das Board herunterladen

STM32CubeIDE macht es eigentlich ziemlich einfach, unsere Arbeit zu kompilieren und auf den STM32-Chip zu übertragen. Der erste Schritt besteht darin, das kompilierte .elf (eine binäre Version unseres Codes) zu erstellen. Um die .elf zu generieren, müssen wir einen Build durchführen. Dies ist so einfach wie das Drücken der Build-Schaltfläche in der Symbolleiste.

Jetzt werden Build-Informationen in der Konsole am unteren Bildschirmrand angezeigt.

Jetzt möchten wir diese kompilierte Binärdatei an den STM32-Mikrocontroller senden.

Schließen wir das Dev-Kit an:

Die rote Power-LED (links neben dem blauen Schalter) leuchtet, ebenso wie die größere Kommunikations-LED (am USB-Kabel). Wählen Sie in STM32CubeIDE die Schaltfläche Ausführen aus.

Dies öffnet den Ausführen-Dialog (da es das erste Mal ist, dass wir ihn ausführen). Die jetzt gewählten Einstellungen werden als Laufkonfiguration gespeichert, die wir später wiederverwenden oder bearbeiten können.

Drücken Sie einfach auf Übernehmen und dann auf OK und der Download wird fortgesetzt. Die Konsole wird nun mit interessantem Text gefüllt:

Die LED geht alle 500ms an und aus. du hast alles eingerichtet.

STM32 gegen Arduino

STM32 gegen Arduino

Verpasse nicht unseren Steuerplatine!

 

Arduino

Arduino ist kreativer, es schwächt den Betrieb bestimmter Hardware, seine Funktionen und Syntax sind sehr einfach und es ist sehr „dumm“.

Der größte Teil der Hauptsteuerung von Arduino ist der AVR-Mikrocontroller. Der Vorteil von Arduino besteht darin, dass es eine hohe Codekapselung und weniger Sätze aufweist, was die Schwierigkeit der Softwareentwicklung verringert.

Arduino ist relativ einfach zu starten, solange Sie ein wenig Hardware und C++ verstehen, können Sie entwickeln.

Die meisten Funktionen von Arduino haben gut gebaute Bibliotheken, so dass es sehr einfach zu verwenden ist, aber die Steuerbarkeit von etwas komplizierteren Funktionen ist schlecht. 

 

STM32

STM32 schenkt der Ingenieurpraxis mehr Aufmerksamkeit. Tatsächlich gibt es viele einfache Instrumente in der Fabrik, wie Temperaturregler, gewöhnliche Motorcontroller, Low-End-SPS und einige zivile Spielzeuge, Gamecontroller, kabelgebundene Tastaturen und Mäuse und andere Peripheriegeräte usw. sind sehr praktisch.

STM32 wird hauptsächlich als Produkte für professionelle Entwickler verwendet, was gewisse Fachkenntnisse voraussetzt, gleichzeitig aber relativ kompliziert ist, Code zu schreiben, um Funktionen zu realisieren. Der serielle Port gibt beispielsweise eine einfache Zeichenfolge aus. Für Arduino kann es mit einem neuen Projekt beginnen und mit 10 Codezeilen realisiert werden. Wenn Sie jedoch STM32-Entwicklungstools wie Keil verwenden, sind möglicherweise Hunderte von Codezeilen oder mehr erforderlich.

In Bezug auf Open Source: Dinge, die mit STM32 erstellt wurden, können Open Source sein, wenn Sie Open Source wollen, und Sie können nichts veröffentlichen, wenn Sie Open Source nicht wollen.

 

Zusammenfassung

 

Hier einige Vorschläge zur Auswahl:

Wenn Sie ein gewöhnlicher Student unter dem Universitätsniveau sind, der kein tiefes Verständnis von Programmiersprachen hat, wird empfohlen, mit Arduino zu beginnen. Wenn die C-Kenntnisse schwach sind und mit STM32 aufwarten, kommt man schnell auf die Idee, aufzugeben.

Wenn Sie nur für eine Anstellung studieren, entscheidend STM32-Mikrocontroller.

Wenn Sie nur zum Spaß lernen und kein Hauptfach in Elektronik sind und kein Selbstvertrauen haben, wird Arduino empfohlen.

Wenn Sie über gute Programmierkenntnisse verfügen, wird STM32 empfohlen. Nachdem Sie dies erledigt haben, können Sie sich die Dinge ansehen, die von der Arduino-Open-Source-Community erstellt wurden, und Sie können dies problemlos mit STM32 erledigen.

Wenn Sie die Möglichkeit haben, können Sie natürlich mit beiden Kontakt aufnehmen. Im Allgemeinen können Sie die grundlegenden Funktionen von Arduino in weniger als einer Woche beherrschen. Wenn Sie es in Zukunft benötigen, können Sie den Arduino-Code frei auf MCU-Plattformen wie STM32 übertragen.

Tatsächlich zielen die beiden tatsächlich in leicht unterschiedliche Richtungen. Arduino ist die erste Wahl für allgemeine Elektronik-Bastler und Heimwerker, während STM32 häufig für die Entwicklung und Herstellung tatsächlicher Produkte verwendet wird.