Forum: Mikrocontroller und Digitale Elektronik Linux auf dem STM32 externes RAM


von micha (Gast)


Lesenswert?

Hey,

ich wollte mir ein Linux für STM32F446 Development Board bauen.
Dazu gibts es für Buildroot schon zwei Portierungen für das 
stm32f429_disco_defconfig und das stm32f469_disco_defconfig.

Die beiden Boards haben jeweis ein externes SDRAM das auch von 
bootloader konfiguriert wird 
(https://github.com/mcoquelin-stm32/afboot-stm32). Mein STM32F446 hat 
aber leider kein SDRAM.

Benötige ich zwingend ein externes SDRAM um Linux zum laufen zu 
bekommen? oder was muss ich umkonfigurieren damit es nur mit dem 
internen SRAM geht?

Viele Grüße
Micha

von eher nicht (Gast)


Lesenswert?

micha schrieb:
> Benötige ich zwingend ein externes SDRAM um Linux zum laufen zu
> bekommen? oder was muss ich umkonfigurieren damit es nur mit dem
> internen SRAM geht?

Linux mit 128kB RAM?
Kaum.
Linux mit der Lahmarschigen Gurke STM32F4?
Noch weniger.

Ganz Allgemein würde ich dir ans Herz legen, einen echten Prozessor zu 
verwenden, nicht ein Spielzeug wie den STM32F4.

Willst du damit etwas anfangen, wist du mindestens bei SAMA5 oder i.MX6 
UL einsteigen müssen. Darunter ist es im Höchstfall proof of concept, 
aber nichs brauchbares.
Selbst mit einem 500MHz SAMA5 würde ich mir kein brauchbares 
Desktop-System erwarten.
Denn das ist noch unter einem Raspberry-PI angesiedelt. Weit darunter.

von Jim M. (turboj)


Lesenswert?

micha schrieb:
> Benötige ich zwingend ein externes SDRAM um Linux zum laufen zu
> bekommen?

Ja. Linux kommt mit dem internen RAM nicht zurecht - das ist deutlich zu 
klein.


Welches Problem willst Du mit Linux lösen? Auf diesen MCUs nutzt man 
normalerweise Betriebssysteme mit kleinerem Footprint.

von M. Н. (Gast)


Lesenswert?

Jim M. schrieb:
> Welches Problem willst Du mit Linux lösen? Auf diesen MCUs nutzt man
> normalerweise Betriebssysteme mit kleinerem Footprint.

Durchaus. Aber ich denke er will kein Problem lösen, sondern nur 
spielen.

Ein Linux bekommst du mit sehr viel Mühe auf 3 bis 4 MB RAM runter. 
Weniger geht nicht. Oder zumindest nicht, ohne massive Codeänderungen.

Aber außer als witziges Projekt sehe ich Linux auf STM32F4 nicht als 
sinnvoll an. Zumal der STM32 keine MMU hat und dardurch das 
Speichermanagement schon sehr viel overhead hat.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

M. H. schrieb:
> Zumal der STM32 keine MMU hat und dardurch das
> Speichermanagement schon sehr viel overhead hat.

Wird der Overhead nicht eher geringer, weil das Umschalten (inkl. TLB 
leeren, ggf. Cache leeren bei VIVT/VIPT-Cache) beim Kontextwechsel 
entfällt? Da dann alle Anwendungen im selben Adressraum laufen, hat man 
halt keine Trennung und die damit einhergehende Sicherheit und 
Stabilität mehr.

Die Frage ist natürlich, was eigentlich erreicht werden soll.

von LinuyStm32Bordsupport (Gast)


Lesenswert?


von LinuyStm32Bordsupport (Gast)


Lesenswert?


von M. Н. (Gast)


Lesenswert?

Niklas G. schrieb:
> Wird der Overhead nicht eher geringer, weil das Umschalten (inkl. TLB
> leeren, ggf. Cache leeren bei VIVT/VIPT-Cache) beim Kontextwechsel
> entfällt?

Das Problem daran ist, dass der Kontextwechsel nicht entfällt. Alle 
Programme sind immernoch auf den selben virtuellen Adressraum gelinkt. 
Nur hat das eben das Problem, dass es keinen virtuellen Adressraum gibt, 
im näheren Sinne. Das Linux hat ohne MMU mehr Aufwand den 
Speicherbereich zu organisieren.

Hier gibt es eine Übersicht über die speichertechnischen 
Funktionalitäten:
https://www.kernel.org/doc/Documentation/nommu-mmap.txt

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Achso,

M. H. schrieb:
> Das Problem daran ist, dass der Kontextwechsel nicht entfällt. Alle
> Programme sind immernoch auf den selben virtuellen Adressraum gelinkt.

Ich habe es so verstanden, dass die Programme einfach an 
unterschiedliche Adressen gepackt werden. Der Code muss dafür 
Position-Independant sein.

von Micha (Gast)


Lesenswert?

M. H. schrieb:
> Jim M. schrieb:
>> Welches Problem willst Du mit Linux lösen? Auf diesen MCUs nutzt man
>> normalerweise Betriebssysteme mit kleinerem Footprint.
>
>

Nun, man sagt ja immer das man Linux verwenden muss, da es alle Probleme 
lösen kann. Jetzt muss ich lesen dass Linux doch Dreck ist und man den 
Stm32 nativ angehen muss...

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Micha schrieb:
> Nun, man sagt ja immer das man Linux verwenden muss, da es alle Probleme
> lösen kann.

Man kann es auch so sehen: Wenn man Linux verwendet, kann man auch 
dessen Fähigkeit zur Ansteuerung komplexer Prozessoren nutzen und es auf 
einem Cortex-A mit genug externem RAM laufen lassen. Dadurch erledigen 
sich die diversen Probleme mit uClinux. Wirklich teurer wird es dadurch 
nicht.

von eher nicht (Gast)


Lesenswert?

Micha schrieb:
> Nun, man sagt ja immer das man Linux verwenden muss, da es alle Probleme
> lösen kann. Jetzt muss ich lesen dass Linux doch Dreck ist und man den
> Stm32 nativ angehen muss...

Natürlich sollst du den STM32 nativ angehen. Der STM32 wurde genau dazu 
entwickelt, um ihn nativ anzugehen. Schließlich ist er ein ja ein 
Microcontroller. Das steckt schon im Namen.

Wer das nicht will, nimmt halt ein vollerwertiges System mit SAMA5. Also 
mit einem echten Prozessor.

Beides hat seine Daseinsberechtigung. Die Einsatzbereiche sind völlig 
unterschiedlich, nichts davon ist die "einzig seelig machende Wahrheit".

Wer harte Echtzeit will, wird sich mit Linux hart tun, hat aber mit dem 
STM32 leichte Spiel.
Wer Netzwerk und Datenbank macht, hat mit dem STM32 viel Code am Hal, 
aber mit Linux ist das ziemlich einfach.

Was willst du denn jetzt genau tun?

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


Lesenswert?

Micha schrieb:
> Nun, man sagt ja immer das man Linux verwenden muss, da es alle Probleme
> lösen kann.

Wer ist "man"? Irgendwelche Vollspacken, die auf der YouTube-Universität 
ihren Unsinn verbreiten? Oder Du selbst?

> Jetzt muss ich lesen dass Linux doch Dreck ist und man den
> Stm32 nativ angehen muss...

Linux ist keineswegs Dreck, aber eben nicht für beliebige Einsatzzwecke 
geeignet.

von micha (Gast)


Angehängte Dateien:

Lesenswert?

Ja es ist mir bewusst das der STM32 kein Raspi oder Atom ist aber er lag 
nun mal im Schrank rum. Mein Ziel ist es also es einfach mal zu 
versuchen.

ich bin jetzt so weit das ich eine der buildroot configs angepasst habe.
Dann erhalte ich einen bootloader (stm32f446.c) einen devicetree und ein 
xipImage.

Der Bootloader wird an Addresse 0x08000000 kopiert
Das xipImage Image an Adresse 0x08008000
1
#0  0x08000346 in start_kernel () at stm32f446.c:89
2
#1  0x0800045e in main () at stm32f446.c:191
3
(gdb) stepi
4
0x08000348  89    kernel(0, ~0UL, 0x08004000);
5
(gdb) where
6
#0  0x08000348 in start_kernel () at stm32f446.c:89
7
#1  0x0800045e in main () at stm32f446.c:191
8
(gdb) stepi
9
0x08008000 in ?? ()
10
(gdb) where
11
#0  0x08008000 in ?? ()
12
#1  0x0800034a in start_kernel () at stm32f446.c:89
13
#2  0x0800045e in main () at stm32f446.c:191
14
(gdb) where
15
#0  0x08008000 in ?? ()
16
#1  0x0800034a in start_kernel () at stm32f446.c:89
17
#2  0x0800045e in main () at stm32f446.c:191
18
(gdb) stepi
19
0x08008004 in ?? ()
20
(gdb) where
21
#0  0x08008004 in ?? ()
22
#1  0x0800034a in start_kernel () at stm32f446.c:89
23
#2  0x0800045e in main () at stm32f446.c:191
24
(gdb) stepi
25
0x08008008 in ?? ()
26
(gdb) where
27
#0  0x08008008 in ?? ()
28
#1  0x0800034a in start_kernel () at stm32f446.c:89
29
#2  0x0800045e in main () at stm32f446.c:191
30
(gdb) stepi
31
0x08009230 in ?? ()
32
(gdb) where
33
#0  0x08009230 in ?? ()
34
#1  0x0800800c in ?? ()
35
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
36
(gdb) stepi
37
0x08009232 in ?? ()
38
(gdb) Quit

Er scheint also Tatsächlich noch in den Kernel zu springen. Aber danach 
kommt ein HardFault Interrupt.

Die Ausgabe auf der Seriellen Schnittstelle ist:
1
stm32-bootH

von Micha (Gast)


Lesenswert?

Andreas S. schrieb:
> Linux ist keineswegs Dreck, aber eben nicht für beliebige Einsatzzwecke
> geeignet.

Beliebig verwendbar ist Windows doch auch nicht, aber jedet linuxer 
verspottet es

von PittyJ (Gast)


Lesenswert?

Fang doch erst einmal mit einer Turing-Maschine an.
Das ist ein überschaubares Projekt.
Und man kann alles damit berechnen.

von Markus F. (mfro)


Lesenswert?

Micha schrieb:
> aber jedet linuxer
> verspottet es

das arme Windows. Unterschätzt und verkannt.

von eher nicht (Gast)


Lesenswert?

micha schrieb:
> Ja es ist mir bewusst das der STM32 kein Raspi oder Atom ist aber
> er lag
> nun mal im Schrank rum. Mein Ziel ist es also es einfach mal zu
> versuchen.

Nochmal: Ohne externen RAM läuft das nicht.

Im Normalfall wird man unter 32 oder 64MByte nie anfangen. Aber einige 
Leute sollen es schon mit einstelligen MByte geschafft haben.

Beispiel:
https://electronics.stackexchange.com/questions/240227/minimum-requirements-of-a-microcontroller-to-run-embedded-linux
Da erzählt jemand, er hätte einen Minimal-Kernel mit 8MByte 
hochgebracht. Aber ohne Features.

Mit 0,125MBytes (128kB) wird das niemals klappen...

Also:
Ein (ziemlich wenig praxistaugliches) Proof of concept ist mit dem STM32 
möglich, aber nur mit externem RAM. Ohne gehts nicht.

von Micha (Gast)


Lesenswert?

Markus F. schrieb:
> Micha schrieb:
> aber jedet linuxer
> verspottet es
>
> das arme Windows. Unterschätzt und verkannt.

Da ist schon einer :)

von Cornelius (Gast)


Lesenswert?

Mich würde mal interessieren, ob man auf dem F7Disco den GCC 
installieren und compilieren könnte:

https://github.com/fdu/STM32F746G-disco_Buildroot

von S. R. (svenska)


Lesenswert?

eher nicht schrieb:
> Ein (ziemlich wenig praxistaugliches) Proof of concept ist mit dem STM32
> möglich, aber nur mit externem RAM. Ohne gehts nicht.

Man könnte ja mal einen Blick auf RetroBSD werfen. Das ist zwar nur ein 
2.11BSD statt Linux, aber sollte mit 128 KB RAM inklusive Userspace 
zufrieden sein.

Zielt im Augenblick aber auf die PIC32, nicht auf STM32... aber machbar 
sollte es sein.

von Stefan F. (Gast)


Lesenswert?

Was will man mit einem Linux ohne Netzwerk und das mangels Speicher 
höchstens ein Anwendungsprogramm ausführen kann? Da bliebt doch vom 
Betriebssystem nicht Sinnvolles mehr übrig.

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


Lesenswert?

Micha schrieb:
> Beliebig verwendbar ist Windows doch auch nicht, aber jedet linuxer
> verspottet es

Nö. Jedes dieser Betriebssysteme hat Einsatzgebiete, auf denen es 
vorteilhaft.

Pauschaler Spott eines "Lagers" beweist nur, dass es bei den jeweiligen 
Aktivisten nur um picklige Hinterwäldler handelt, die nicht über ihren 
Tellerrand hinausschauen können. Dies betrifft sowohl das Linux-Lager, 
Windows-Lager als auch beliebige andere Gebiete, in denen sich solche 
Aktivisten als besonders progressiv aufspielen können. Und wie so häufig 
bleibt an dieser Stelle auch nicht der obligatorische Hinweis erspart:

https://de.wikipedia.org/wiki/Best%C3%A4tigungsfehler

von Cornelius (Gast)


Lesenswert?

>Was will man mit einem Linux ohne Netzwerk und das mangels Speicher
>höchstens ein Anwendungsprogramm ausführen kann?
https://github.com/fdu/STM32F746G-disco_Buildroot
Das F7 hat einen Lan-Anschluss.

von Stefan F. (Gast)


Lesenswert?

Cornelius schrieb:
>>Was will man mit einem Linux ohne Netzwerk und das mangels
> Speicher
>>höchstens ein Anwendungsprogramm ausführen kann?
> https://github.com/fdu/STM32F746G-disco_Buildroot
> Das F7 hat einen Lan-Anschluss.

Ich meinte das Linux, dass er in 128kB RAM quetschen wollte. Da ist für 
den Netzwerk-Treiber und IP Stack kein Platz.

von S. R. (svenska)


Lesenswert?

Stefanus F. schrieb:
> Was will man mit einem Linux ohne Netzwerk und das mangels Speicher
> höchstens ein Anwendungsprogramm ausführen kann? Da bliebt doch vom
> Betriebssystem nicht Sinnvolles mehr übrig.

Man kann an einem STM32 problemlos einen Netzwerkchip betreiben, z.B. 
den ENC28J60 (wird von Linux unterstützt). SLIP oder PPP über eine 
serielle Schnittstelle geht auch problemlos.

Vor einigen Jahren hatte ich ein 486er Notebook mit 4 MB RAM und 
CF-Karte in ein X-Terminal (mit ein paar lokalen Anwendungen) 
verwandelt. OpenWrt unterstützt viele Router, die auch nicht viel mehr 
RAM haben. Die D-Box2 mit ihrem 66 MHz-PPC und grad mal 32 MB RAM war 
auch erstaunlich leistungsfähig.

Als Lernübung für eingebettete Systeme ist das nicht verkehrt. Es wird 
ziemlich sicher kein Desktop-System mit Ubuntu und Gnome, aber das ist 
meine alte Fritzbox auch nicht.

Und die Vorteile von Linux (existierende Treiber, gehärteter 
Netzwerkstack, fertige Infrastruktur von Compiler über Shell und 
Scriptsprachen bis Webserver) bleiben auch auf einem STM32 erhalten.

Die Idee grundsätzlich pauschal als Unfug abzutun greift aus meiner 
Sicht schlicht zu weit.

Stefanus F. schrieb:
> Ich meinte das Linux, dass er in 128kB RAM quetschen wollte. Da ist für
> den Netzwerk-Treiber und IP Stack kein Platz.

RetroBSD könnte das vielleicht. Falls nicht, wäre das eine gute Übung. 
:-)

: Bearbeitet durch User
von eher nicht (Gast)


Lesenswert?

S. R. schrieb:
> Die Idee grundsätzlich pauschal als Unfug abzutun greift aus meiner
> Sicht schlicht zu weit.

Doch, das ist Unfug. Und ztwar ziemlich dämlicher Unfug.

Ohne externes RAM geht es nicht mit Linux. Ausgeschlossen - 128kB 
reichen nicht für Linux.

Und mit externem RAM kann ein Microcontroller wie der STM32 seine 
Vorteile nicht mehr ausspielen. Und der Vorteil eines STM32 ist doch 
genau der, dass er als Chip an sich ein Stand-alone-System darstellt, 
mit integrierter Peripheri und so weiter. Den wirft man weg, wenn man 
ein RAM dranmacht, und das Teil Prozessor spielen lässt.
Dann bleibt der (für Prozessoren(!!!)) schwache Cortex-M4 übrig, der 
nicht für richtige Betriebssysteme entwickelt wurde. Es ist ein 
Microcontrollerkern.

Prozessor spielen können richtige Prozessoren naturgemäß besser, und so 
kostet der oben genannte SAMA5 mit 500MHz und passenden Prozessorkern 
sogar weniger als ein STM32F4.

Dazu kommen weitere Dinge, wie dass es für die viele wunderschöne 
STM32-Peripherie vermutlich keine fertigen Linux-Treiber geben wird, und 
die Linux-Unterstützung für den Cortex-A5 natürlich besser ausfällt.

Ein Microcontroller ist keine CPU. Linux ist ein Betriebessystem für 
richtige Computer, nicht für Microcontroller.

Nur um es zu wiederholen: Ein STM32F4 ist teurer als ein SAMA5 mit 
500MHz, dieser hat aber die dreifache Rechenleistung.
Warum das wohl so ist, hmm?
Man vergleiche die Datenblätter...

von Christopher J. (christopher_j23)


Lesenswert?

Micha schrieb:
> M. H. schrieb:
>> Jim M. schrieb:
>>> Welches Problem willst Du mit Linux lösen? Auf diesen MCUs nutzt man
>>> normalerweise Betriebssysteme mit kleinerem Footprint.
>>
>>
>
> Nun, man sagt ja immer das man Linux verwenden muss, da es alle Probleme
> lösen kann. Jetzt muss ich lesen dass Linux doch Dreck ist und man den
> Stm32 nativ angehen muss...

Offensichtlich hast du die eigentliche Frage übersehen, also nochmal:

>>> Welches Problem willst du mit Linux lösen?

von Grobi G (Gast)


Lesenswert?

...auch mal was in den Raum werf... ist eine MMU nicht eine 
Grundvorrausetzung für ein Linux OS ? Also sprich keine MMU = kein Linux 
?
Es gab doch mal sowas wie FreeRTOS oder so für die stm32s wenn ich mich 
nicht irre, das sollte doch fürs Erste reichen. Irgendwo hab ich auch 
noch son altes f4diso boad rumfliegen und das war damals schon nur ein 
etwas schnellerer mit mehr internem RAM ausgerüsteter mikrocontroller 
und keine ich nenns mal klassische CPU.

von S. R. (svenska)


Lesenswert?

Grobi G schrieb:
> ...auch mal was in den Raum werf...
> ist eine MMU nicht eine Grundvorrausetzung für ein Linux OS ?
> Also sprich keine MMU = kein Linux ?

Im Prinzip schon, aber uClinux hat vor gut 15 Jahren den Linux-Kernel 
auf NOMMU-Architekturen portiert (z.B. den Palm Pilot mit m68k). 
Inzwischen ist die Unterstützung im normalen Kernel angekommen und wird 
auch benutzt.

Natürlich gibt es ohne MMU ein paar herbe Einschränkungen, z.B. gibt es 
keine Unterstützung für fork(), stattdessen muss man mit vfork() leben. 
ELF musste ein bisschen erweitert werden (fdPIC[*]), shared libraries 
sind nicht ganz so einfach uswusf.

[*] Der fdPIC-Loader wird den ELF-Loader wohl mittelfristig ersetzen; 
jedes ELF-Binary ist auch ein gültiges fdPIC-Binary.

Davon abgesehen ist das ein ganz normales Linux und viele Programme 
laufen ganz normal. Die üblichen Embedded-Anwendungen (z.B. Busybox) 
laufen sowieso.

eher nicht schrieb:
>> Die Idee grundsätzlich pauschal als Unfug abzutun greift aus meiner
>> Sicht schlicht zu weit.
> Ohne externes RAM geht es nicht mit Linux. Ausgeschlossen - 128kB
> reichen nicht für Linux.

Einverstanden. Trotzdem ist "Linux auf STM32" oder allgemeiner "Linux 
mit NOMMU" kein allzu großer Unfug. Es ist eine Frage des 
Anwendungsfalls.

Zudem ist der STM32 relativ weit verbreitet und daher eine gute Basis, 
um die Unterstützung für kleinere Architekturen (mit und ohne MMU) zu 
fördern.  Gibt zum Beispiel den jCore, der auf SH2 aufsetzt.

Ein kleinerer Kernel ist nicht nur für "wenig RAM"-Szenarien nützlich, 
sondern lässt auf dickeren CPUs auch mehr Cache für die Anwendungen 
übrig.

eher nicht schrieb:
> Und mit externem RAM kann ein Microcontroller wie der STM32 seine
> Vorteile nicht mehr ausspielen.

Warum nicht? Die meisten netten Features (Netzwerkstack, 
Hardwaretreiber, existierende Software) bekommt man trotzdem. Die 
Entwicklung kann ohne Emulation nativ auf dem PC erfolgen.

eher nicht schrieb:
> Dazu kommen weitere Dinge, wie dass es für die viele wunderschöne
> STM32-Peripherie vermutlich keine fertigen Linux-Treiber geben wird, und
> die Linux-Unterstützung für den Cortex-A5 natürlich besser ausfällt.

Ein Board mit STM32 und bisschen externem RAM lässt sich sicherlich 
einfacher entwerfen als eines mit Cortex-A5. Außerdem lässt sich dank 
der vielen Schnittstellen vieles relativ einfach anflanschen, zumal der 
STM32 als Controller elektrisch gutmütiger ist als eine richtige CPU. 
Das fängt schon mit den Versorgungsspannungen und Taktgebern an. :-)

Im menuconfig habe ich übrigens ziemlich viele STM32-Treiber gesehen. 
Keine Ahnung, ob damit sämtliche Peripherie abgedeckt ist, aber ein 
Großteil ziemlich sicher.

von Stefan F. (Gast)


Lesenswert?

S. R. schrieb:
> Man kann an einem STM32 problemlos einen Netzwerkchip betreiben, z.B.
> den ENC28J60 (wird von Linux unterstützt).

Das mag ja sein, aber in 128kB RAM (um die es hier geht) kriegst du nie 
und nimmer einen Linux Kern mit den Netzwerktreibern rein, die für 
TCP/IP notwendig sind.

Das kannst du nicht mit µIP vergleichen. µIP ist kleiner, hat aber 
nichts mit Linux zu tun.

von eher nicht (Gast)


Lesenswert?

S. R. schrieb:
> eher nicht schrieb:
>> Und mit externem RAM kann ein Microcontroller wie der STM32 seine
>> Vorteile nicht mehr ausspielen.
>
> Warum nicht? Die meisten netten Features (Netzwerkstack,
> Hardwaretreiber, existierende Software) bekommt man trotzdem. Die
> Entwicklung kann ohne Emulation nativ auf dem PC erfolgen.

Dann führen wir das doch mal aus:
Der STM32F4 ist teurer als ein richtiger Prozessor wie der SAMA5. Es 
gibt sogar noch billigere Prozessoren als den SAMA5.
So hat man schon mal höhere Grundkosten, bei sehr, sehr, sehr viel 
schlechteren Leistungsdaten.

Dann hat der STM32 keine "ordenltiche"*1) RAM-Schnittstelle. Oh, man 
kann natürlich SDAM anschließen, aber das ist teuer und langsam, und 
größere Chips sind schwierig zu bekommen. Ein richtiger Prozessor kann 
DDR3. DDR3 bekommt man in größer und kostengünstiger als SDRAM und viel 
schneller.

Dann ist ein STM32 schon vom Pinout her nicht gut geeignet. Das RAM 
belegt viele Pins und blockiert damit andere Peripherie. Bei richtigen 
Prozessoren hat man das Problem in der Form nicht, denn die benötigen 
RAM immer, das wurde also berücksichtigt.
Darum oft auch die BGA-Packages.

d.h. ein richtiges Prozessorsystem ist nicht nur billiger, es ist auch 
leistungsfähiger. Um Größenordnungen.
Wo du mit dem STM32 mit 200MHz und 32MB RAM herumkrebst, bekommst du für 
weniger Geld wahrscheinlich einen SAMA5 mit 128MB DDR3 und 500MHz. 
Dreifache Rechenleistung (ja, der Cortex-A5 ist schneller!) und 
vierfachen RAM.

Warum gibts den STM32 dann, und warum ist er so beliebt? Weil er ein 
guter Microcontroller ist.

Warum ist ein Prozessor dann so viel billiger? Beisielsweise hat er kein 
Flash, welches teuer ist. Er kann in einem anderen Fertigungsprozess 
produziert werden, was Flächeneffizienter ist.

Ein Prozessor ist dafür andersherum ein mieserabler Microcontroller.

Es ist das alte Spiel: Da richtige Werkzeug für die richtige Anwendung. 
Die Kettensäge schneidet schlecht Brot, mit dem Brotmesser sägt man ewig 
an einer Fichte.

*1) aus Sicht eines richtigen Prozessors!

von Stefan F. (Gast)


Lesenswert?

eher nicht schrieb:
> Es ist das alte Spiel: Da richtige Werkzeug für die richtige Anwendung.
> Die Kettensäge schneidet schlecht Brot, mit dem Brotmesser sägt man ewig
> an einer Fichte.

Sehr schöne Metapher. Ich kannte bisher nur die Variante mit dem LKW und 
Brötchen holen.

von C.K. (Gast)


Lesenswert?

Ich hatte mal ein Debian Linux auf einem GNUBLIN am laufen, 180MHz, 32MB 
RAM
Es hat funktioniert, war aber kein vergnügen.

Man musste auch etwas Tricksen, ein Teil das RAMs wurde komprimiert, 
weil das dann immer noch schneller war, als eine Auslagerungsdatei auf 
der SD-Karte zu benutzen.

Ist lange her, damals gab es noch keine RPis

von M. Н. (Gast)


Lesenswert?

C.K. schrieb:
> Ich hatte mal ein Debian Linux auf einem GNUBLIN am laufen, 180MHz, 32MB
> RAM
> Es hat funktioniert, war aber kein vergnügen.

Eben. Selbst mit 32 MB RAM machts nicht wirklich Spaß. Und < 10 MB wird 
sehr eklig. Und mit eineigen KB ist es einfach unmöglich. Da sollte man, 
wenn man unbedingt ein OS will ein RTOS o.ä. nehmen. Ich finde schon das 
Raspberry Pi, vorallem die alten, obwohl die 700+ MHz, GPU und mehrere 
hundert MB RAM haben, ziemliche Krücken. Klar das läuft. Aber ein 
richtig tolles Erlebnis ist es irgendwie nicht. Liegt aber auch an den 
SD Karten. Wenn man da eine langsame hat, macht es das zur Tortur.

Durch die fehlende MMU des STM ist man auf PIE und andere Sachen 
angewiesen. Außerdem funktionieren gewisse Grundpfeiler von Linux ohne 
MMU einfach nicht. Man ist auf speziell kompilierte SW angewiesen. Schon 
allein aus dem Grund, dass der STM keinen arm-Befehlssatz unterstützt, 
sondern "nur" den Thumb2 Mode. Vorkompilierte ARM Software kann somit eh 
nicht genutzt werden.

von S. R. (svenska)


Lesenswert?

Stefanus F. schrieb:
> Das mag ja sein, aber in 128kB RAM (um die es hier geht) kriegst du nie
> und nimmer einen Linux Kern mit den Netzwerktreibern rein, die für
> TCP/IP notwendig sind.

Ich hab einfach mal stillschweigend die 8 MB zusätzlichen RAM für den 
Kernel vorausgesetzt. In 128 KB geht es natürlich nicht, darum mein 
Hinweis auf RetroBSD. Antikes UNIX ginge in 128 KB natürlich auch. :-)

eher nicht schrieb:
> Darum oft auch die BGA-Packages.

Richtig, und ein BGA-Package setze ich nicht "mal eben so" mit dem 
Lötkolben auf ein kleines Board. Einen STM32 schon eher.

eher nicht schrieb:
> Warum gibts den STM32 dann, und warum ist er so beliebt?
> Weil er ein guter Microcontroller ist.

Und warum gibt es dann Linux dafür?
Weil er in Maximalausstattung "gerade so" dafür ausreicht.

Merke: Ich widerspreche dir fachlich nicht. Siehe unten.

M. H. schrieb:
> Ich finde schon das Raspberry Pi, vorallem die alten,
> obwohl die 700+ MHz, GPU und mehrere
> hundert MB RAM haben, ziemliche Krücken.

Wenn du da ein normales Desktop-Linux drauf laufen lassen willst, 
wundert mich das nicht. Auf einem STM32 oder den anderen kleinen 
Embedded-Kisten läuft das auch nicht vernünftig. Aber Linux gibt es eben 
auch woanders.

M. H. schrieb:
> Man ist auf speziell kompilierte SW angewiesen. Schon
> allein aus dem Grund, dass der STM keinen arm-Befehlssatz
> unterstützt, sondern "nur" den Thumb2 Mode.

Naja, "speziell kompiliert" ist ein bisschen übertrieben. Debian bietet 
es halt nicht vorkompiliert an, ja. Ansonsten ist Thumb2 unter Linux 
jetzt auch nicht so exotisch. Die höhere Codedichte reduziert auf den 
großen Prozessoren den Druck auf den Cache, lohnt sich also auch da.

----

Um das Thema abzuschließen: Ich halte Linux auf dem STM32 für technisch 
äußerst interessant und für manche Anwendungen nicht komplett verkehrt. 
Nicht unbedingt als erste Wahl, aber der Sprung von "AVR" zu "STM32" ist 
aus meiner Sicht wesentlich kleiner als der von "STM32" zu "richtiges 
Linux", zumindest wenn man von unten schaut.

Dass es möglich ist, zeigen die vielen Geräte, die Linux auch mit 
geringen Taktraten (unter 500 MHz) und wenig RAM (unter 64 MB) auf 
vergleichsweise exotischen Architekturen (MIPS, ARM9) erfolgreich 
einsetzen. Viele Vorteile von Linux bleiben auch auf solchen Systemen 
erhalten, die man mit z.B. FreeRTOS nicht so einfach bekommt. Für ein 
Desktop-System sind die allesamt nicht geeignet, aber das sollen sie 
auch nicht.

Einiges, was aus der Entwicklung für solche Umgebungen entsteht, ist 
auch auf großen Systemen nützlich. Und sei es das Bewusstsein, was der 
Kernel-Entwickler bekommt, wenn er mal nicht "eben so" 800 MB RAM 
verschleudern kann.

von jemand (Gast)


Lesenswert?

S. R. schrieb:
> Richtig, und ein BGA-Package setze ich nicht "mal eben so" mit dem
> Lötkolben auf ein kleines Board. Einen STM32 schon eher.

Dafür gibt es SOMs. Wie das:
https://www.microchip.com/design-centers/32-bit-mpus/sip-som/system-on-module

S. R. schrieb:
> Und warum gibt es dann Linux dafür?

Weil es Leute gibt, die das als proof of concept gemacht haben.

Mal im Ernst, kein Mensch wird das produktiv einsetzen wollen. Ein Profi 
nimmt das kostengünstigere Prozessorsystem, ein Hobbyist eine SOM oder 
schlicht Raspberry PI, eventuell aauch als Comute-Module:
https://www.raspberrypi.org/products/compute-module-3/

Ein SOM auf eine Platine löten oder einen Sockel für das Compute-Module 
ist sinnvoller und einfacher als diese Krücke.

Die Unterstützung für dieses STM32-Linux dürfte auch eher mau sein. Ich 
denke mal, wenn man das ernsthaft benutzen will, darf man sich 
wahrscheinlich für die meiste Peripherie erst einmal Treiber schreiben.

Da ist es einfacher, das mit Free-RTOs und der HAL oder gleich bare 
metal zu machen.

Beim SOM gibte Support vom Hersteller, beim Rasberry PI Comute Module 
hat man die gesamte Community. Da dürfte ein Großteil fertig sein.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Nur mal so nebenbei, uCLinux lief schon vor 12 Jahren auf meinem uCSimm, 
ein System mit MC68EZ328, 16Mhz und 2MB Flash sowie 8MB RAM. Mit 2.4 
Kernel und kompletter Ausstattung inkl. Webserver, Framebuffer und 
diversen selbstgebastelten Treibern für Roboter Hardware.
Die ganze Nummer war überhaupt nicht langsam und als Steuerrechner 
durchaus brauchbar.
Wenn man sich ein Devboard mit RAM, wie z.B. das F429 Disco besorgt, 
kann das durchaus klappen. Allerdings sollte man sich anschauen, wie man 
komprimierte Flash Images herstellt. In den RAM wird so gut wie alles 
aus dem Flash dekomprimiert, deswegen brauchts 8MB.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Matthias S. schrieb:
> Mit 2.4
> Kernel

Ja, daaaamals - war ja kurz nachm Krieg wirhattenjanix - da konnte man 
auch noch aufm PC einfach einen Kernel auf eine 1.44MByte grosse Floppy 
schreiben und dahinter hat noch ein kleines rootfs gepasst und das ganze 
war auch noch bootfaehig. Die Zeiten sind lang vorbei :-/

Gruss
WK

von jemand (Gast)


Lesenswert?

Dergute W. schrieb:
> Ja, daaaamals - war ja kurz nachm Krieg wirhattenjanix - da konnte man
> auch noch aufm PC einfach einen Kernel auf eine 1.44MByte grosse Floppy
> schreiben und dahinter hat noch ein kleines rootfs gepasst und das ganze
> war auch noch bootfaehig. Die Zeiten sind lang vorbei :-/

Vor allem ist das aus Bastlersicht völlig unsinnig. Ein uralter 
Raspberry PI 1 vom Flohmarkt schlägt jede STM32 Alternative um Längen 
(vermutlich auch preislich), und im Gegenzu dazu ist das Linux auf dem 
Ding ausgereift.

Wenn es natürlich um ein "proof of concept" geht, ja dann kann man das 
schon machen. Es ist ohne Frage eine Leistung, auf einer so kleinen CPU 
hinzubekommen, und sicher ein lehrreiches Hobby.

von S. R. (svenska)


Lesenswert?

Matthias S. schrieb:
> Die ganze Nummer war überhaupt nicht langsam und
> als Steuerrechner durchaus brauchbar.

Das wollen die nicht sehen.

Matthias S. schrieb:
> Allerdings sollte man sich anschauen, wie man komprimierte
> Flash Images herstellt. In den RAM wird so gut wie alles
> aus dem Flash dekomprimiert, deswegen brauchts 8MB.

Der Kernel kann auch XIP, für sich selbst und für Userspace. Wenn man 
also genügend gemappten Flash zur Verfügung hat und mit der 
Performance-Einbuße leben kann, braucht man weniger RAM.

jemand schrieb:
> Es ist ohne Frage eine Leistung, auf einer so kleinen CPU
> hinzubekommen, und sicher ein lehrreiches Hobby.

Gleichzeitig lernt man viel über Linux, viel über STM32 und viel über 
Architekturen im Allgemeinen. Und man bekommt ein halbwegs nutzbares 
System.

"Raspi kann ja jeder."

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.