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
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.
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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.