Forum: Digitale Signalverarbeitung / DSP / Machine Learning Betriebssystem für ARM-basierte SoC


von Sepp T. (stell)


Lesenswert?

Hallo zusammen.

Ich habe da ein Verständnisproblem und hoffe auf eure Hilfe.
Es geht allgemein um den Unterschied zwischen einem µC und einem 
ARM-basierten SoC (System on Chip).
Dabei geht es mir darum wie die einprogrammierte Software abgearbeitet 
wird. Bei den SoC und deren Entwicklungsboards findet man stets eine 
Kompatibilität mit Windows oder Linux. Soweit ich das verstehe kann man 
über das OS das Board programmieren, Treiber anpassen oder auch 
Kommandos im laufenden Betrieb ausgeben.

Meine eigentlichen Fragen dazu:
Läuft auf dem SoC ebenso ein OS oder ist das nur eine Kompatiblität für 
dessen Inbetriebnahme und Programmierung? Wenn ich nun ein eigenes Board 
mit einem solchen SoC entwerfe, ist auf ihm dann anschließend ein OS 
installiert oder nur die Programmabläufe ähnlich wie bei einem µC?

Vielen Dank im Voraus.

Gruß
Stell

von W.S. (Gast)


Lesenswert?

Sepp T. schrieb:
> Ich habe da ein Verständnisproblem

Ja.

Also, SoC heißt ja salopp gesagt nur, daß all das, was man sonst als 
Einzelkomponenten auf eine Leiterplatte setzt, hier auf einem Chip 
vereint ist.

Was das im Einzelfall konkret ist, hängt eben von selbigem ab. Es gibt 
z.B. auch SoC's für Handfunksprechgeräte oder sonstiges Zeugs.

W.S.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Auf Deinem selbstentwickelten Board ist natürlich nur dann ein OS 
installiert, wenn Du diese Installation durchführst. SoCs enthalten im 
Allgemeinen nur einen kleinen Bootloader, der einige Konfigurationspins 
und angeschlossene Speicher abfragt, auf welche Art und Weise gebootet 
werden soll. "Früher" benötigte man dafür parallel angeschlossenes 
ROM/Flash, aus dem heraus eine direkte Programmausführung möglich war. 
Die meisten heutigen Bootloader unterstützen aber auch "indirekte" 
Medien wie z.B. SPI-Flashbausteine oder SD-Karten.

Bei dem auf diese Art und Weise nachgeladenen Programm handelt es sich 
häufig aber nicht unmittelbar um einen Linux- oder Windows-Kernel, 
sondern einen weiteren Bootloader, z.B. U-Boot. Ebenso gibt es auch 
etliche andere Betriebssysteme, die wahlweise direkt oder auch über den 
sekundären Bootloader gebootet werden können. Bei SoCs mit Unterstützung 
für die ARM Trustzone (TEE: Trusted execution environment) oder 
Virtualisierung wird anstelle des Betriebssystems ggf. zunächst noch ein 
entsprechender Hypervisor o.ä. geladen und ausgeführt. Dadurch ergeben 
sich teilweise schon sehr komplizierte Lade- und 
Initialisierungsvorgänge, insbesondere wenn ggf. auch noch PL-Anteile 
(Programmierbare Logik ~ FPGA-Anteil) hinzukommen, wie z.B. beim Xilinx 
Zynq.

Man kann aber auch den ganzen Aufwand sparen und seinen eigenen Code 
direkt aus dem On-Chip-Bootloader heraus starten lassen. Dann muss man 
aber ggf. einen Haufen Hardwareinitialisierungen selbst durchführen.

von Sepp T. (stell)


Lesenswert?

Vielen Dank euch beiden für eure Antworten.

Um das etwas zu konkretisieren habe ich einen ausführlich dokumentierten 
SoC gefunden, der als Beispiel dienen soll. Der Ansatz mit einem 
Bootloader wird hier erläutert. Der Einsatz der Linux OS scheint 
wirklich nur als Programmieroberfläche zu dienen.

Jetzt wäre es noch gut zu wissen ob man abschätzen kann wie lange der 
Bootvorgang in der Regel dauert. Sicherlich ist dieser abhängig von der 
Menge der Befehlssätze und deren Umfang. Aber ein grober Richtwert wie 
50-100ms oder 1s wäre hilfreich.


Link zum Datasheet: 
http://www.mouser.com/ds/2/256/MG2580-MG3500-81196.pdf

Gruß
Stell

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Sepp T. schrieb:
> Um das etwas zu konkretisieren habe ich einen ausführlich dokumentierten
> SoC gefunden, der als Beispiel dienen soll. Der Ansatz mit einem
> Bootloader wird hier erläutert.

Der MG2580/MG3500 ist urururalt und ist schon lange nicht mehr 
lieferbar, d.h. auch nicht mehr bei Mouser. Maxim hat die ganze Familie 
eingestampft und an GEO Semiconductor verkauft.

> Der Einsatz der Linux OS scheint wirklich nur als Programmieroberfläche zu 
dienen.

Nein, das Linux läuft bei solchen Systemen direkt auf dem SoC und 
dient nicht nur als "Programmieroberfläche". Üblicherweise verwendet man 
aber für die Entwicklung ebenfalls einen Linux-basierten PC (bzw. eine 
VM mit Linux). Man kann zwar auch einen Linux-Kernel auf einem ARM926 
kompilieren, aber das dauert schon etliche Stunden, was aber nicht nur 
an der Prozessorgeschwindigkeit liegt, sondern am langsamen Dateisystem. 
Es ist äußerst praktikabel, während der Entwicklungsphase das 
Root-Dateisystem per NFS vom Entwicklungsrechner einbinden zu können.

> Jetzt wäre es noch gut zu wissen ob man abschätzen kann wie lange der
> Bootvorgang in der Regel dauert. Sicherlich ist dieser abhängig von der
> Menge der Befehlssätze und deren Umfang. Aber ein grober Richtwert wie
> 50-100ms oder 1s wäre hilfreich.

Solch ein Linux-System bootet typisch in ca. 3-10s. Die erste Sekunde 
wird meist damit verbracht, dass U-Boot darauf wartet, durch 
Zeicheneingabe auf einem UART vom Booten abgehalten zu werden und 
stattdessen eine Shell zu öffnen. Diese Zeit kann man jedoch deutlich 
verkürzen, aber gerade während der Entwicklungsphase ist man sehr stark 
darauf angewiesen, U-Boot bedienen zu können.

Der Bootvorgang des Kernels hängt entscheidend davon ab, wie schnell das 
Kernel-Image vom Flash ins RAM kopiert und dort ggf. dekomprimiert 
werden kann. Anschließend rauschen die Bootmeldungen über die Konsole, 
was das ganze wiederum ausbremst. Durch Deaktivieren der Konsole kann 
man auch hier ein paar 100ms sparen. Neben dem Kernel muss ggf. noch das 
Root-Dateisystem umkopiert und als RAM-Disk angelegt werden. Je nach 
Größe kann das auch dauern. Für beschreibbare Flash-Dateisysteme erfolgt 
ggf. beim Mounten noch ein Konsistenzcheck.

Dann erfolgt das Abarbeiten der ganzen Startskripte: Netzwerk-Interfaces 
initialisieren, Daemons starten, usw..

Wenn man eine minimale Bootzeit benötigt, sind große Betriebssysteme wie 
Linux definitiv nicht die erste Wahl.

von Sepp T. (stell)


Lesenswert?

Danke für die ausführliche Erklärung Andreas.

Ich habe einen passenden Artikel von Altera dazu gefunden, der soweit 
besagt, dass ein System basierend auf einem oder mehreren Arm 
Prozessoren am besten arbeitet bzw. seine volle Leistung erbringen kann 
wenn ein OS verwendet wird.
Link Altera: https://www.altera.com/products/soc/ecosystem.html

"However to take full advantage of the capabilities of the device, it is 
highly recommended to use an operating system (OS). The chosen operating 
system can be a simple real-time kernel running on a single-core or a 
full-featured operating system such or Linux, or one of a number of 
multicore-capable real-time operating systems."

Damit sollte auf jeden Fall soweit geklärt sein, dass die 
Implementierung eines OS für den Einsatz eines SoC, wie aus dem 
Beispiel, Pflicht ist.

Worin liegt nun der Unterschied zwischen einem kompletten OS und der 
Linux-Kernel Implementierung in den Arm Prozessor? Ist das eine dem 
anderen je nach Bedarf vorzuziehen?
Ich kenne das zwar aus Projekten basierend auf dem Raspberry Pi aber 
nicht wie sich das für meine Anwendung äußerst auf welchem Wege das OS 
im System integriert wurde.


Gruß
Stell

von derguteweka (Gast)


Lesenswert?

Moin,

Sepp T. schrieb:
> Worin liegt nun der Unterschied zwischen einem kompletten OS und der
> Linux-Kernel Implementierung in den Arm Prozessor? Ist das eine dem
> anderen je nach Bedarf vorzuziehen?

Natuerlich kann man sein "Programm" statisch linken (oder so schreiben, 
dass es nichtmal eine libc braucht) und dann vom Kernel nach dem booten 
aufrufen lassen. Dann braucht man nix ausser dem Kernel.
Das macht aber normalerweise keiner. Und dann braucht man eben eine 
libc, oft eine busybox (oder eben die sonst in busybox eingebauten 
kommandos separat) und dann ist man schon bei einem "kompletten" OS.

SoC Hersteller geben ueblicherweise ein SDK raus, mit einem (nicht mehr 
ganz taufrischen) U-Boot und Kernel, die auf die Besonderheiten des SoC 
gepatcht wurden, mit Empfehlungen zur Toolchain und mindestens ein paar 
"Begleitprogrammen", wie eben busybox etc. raus. Das kann man dann 
nehmen, oder man laesst es bleiben. Grosse Auswahl gibts da eigentlich 
nicht.

Die Performance (im Sinne von BogoMIPS) ist voellig unabhaengig davon, 
ob man nun mit OS oder bare-metal programmiert - es kann nur sein, dass 
einige Features des SoC (zB. Audio/Video-Codecs) nur durch proprietaere, 
nicht im src erhaeltliche Software nutzbar sind; diese Software verlangt 
dann bestimmte Kernels, Libs, etc.

Gruss
WK

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.