Forum: Compiler & IDEs Linux auf STM32 => how-to?


von Ralf (Gast)


Lesenswert?

Hallo,

ich hab hier ein paar ältere STM32-Boards, bspw. STM32F429I-Discovery. 
Soweit ich gesehen habe, kann man da auch Linux (natürlich abgespeckt) 
verwenden.

Als Windows-User fehlt mir nun das Wissen wie ich da am besten vorgehe. 
Was ich (zum Schluss) gerne hätte wäre eine Umgebung, aus der heraus ich 
das Linux selbst als auch dann entsprechend Programme für die Boards 
erstellen kann. Wobei sich das vermutlich automatisch ergibt. Zu 
erwähnen ist vielleicht noch, dass ich mich dann gaaanz am Ende der 
Lernkurve mit Linux-Treiberentwickung für eingebettete Systeme 
beschäftigen möchte.

Den Artikel zu Linux auf STM32 hier in der Artikelsammlung kenne ich und 
er ist wohl auch für das o.g. Board verwendbar. Aber der Artikel ist 
m.E. leider nur sehr rudimentär und aufgrund des Alters vielleicht auch 
überholt, das kann ich mangels Wissens leider nicht beurteilen.

Wie gehe ich da nun vor? Soweit ich es verstanden habe, benötige ich 
eine Linux-Umgebung zum compilieren, etc. Hierzu habe ich (bisher) zwei 
Möglichkeiten gefunden, um das unter Windows zu machen:
1) virtuelle Maschine mit einer Linux-Installation
2) CygWin unter Windows

Hab ich das soweit richtig verstanden? In Variante 1 hätte ich den 
Vorteil, dass alles gekapselt ist und ich in der VM machen kann was ich 
will. Bei #2 bin ich mir nicht sicher, ob da dann noch weitere Programme 
unter Windows zu installieren sind.
Wie gut es dann funktioniert, über die VM auch zu debuggen, weil ja der 
STLink durchgeschleift werden muss, weiß ich nicht. Den Nachteil habe 
ich vermutlich bei #2 nicht, weil das ja "direkt" unter Windows läuft, 
oder?

Eine dritte Variante, die mir durch den Kopf ging, wäre ein Raspberry 
PI. Den hab ich kürzlich geschenkt bekommen und da läuft ja auch Linux 
drauf. Hatte ich allerdings (erstmal) verworfen. Wenn es damit aber auch 
gehen würde, sehe ich den Vorteil darin, dass ich auch gleich Pogramme 
für den PI schreiben könnte, also alles auf einer Plattform.

Um das Linux selbst dann bauen zu können, habe ich Tools wie z.B. Yocto 
oder buildroot gefunden. Mit denen soll es wohl auch gehen, Linux für 
STM32 zu bauen.

Eine bestimmte IDE habe ich bisher nicht im Sinn, speziell für STM32 
nutze ich unter Windows STM32CubeIDE. Ich weiß, dass ich unter Linux 
wohl besser dran bin, wenn ich mich gleich mal mit der Konsole vertraut 
mache :) Das scheint wohl der übliche Weg zu sein - also MakeFiles und 
Compiler-/Linkerscripte etc. selber zu schreiben. Das was unter Windows 
bzw. früher DOS eben die Batchdatei ist. Da sehe ich auch kein (großes) 
Problem, nur wäre es evtl. geschickt, wenn ich trotzdem eine IDE "oben 
drüber" habe, mit der ich zumindest am Anfang um die Konsole drumrum 
komme.

Also kurzum, ist das o.g. ein praktikabler Weg bzw. gibt's Empfehlungen 
dafür/dagegen oder weitere Alternativen? Was brauch ich noch alles dazu, 
um ans Ziel zu kommen?

Gruß Ralf

von xyz (Gast)


Lesenswert?

Willst du jetzt Linux auf dem stm32 laufen lassen oder einen stm32 von 
Linux aus programmieren?

von samuel (Gast)


Lesenswert?

Hier ist eine Auflistung nützlicher Referenzen.
https://elinux.org/STM32

Benutze auf jeden Fall ein Linuxsystem zum bauen, ob auf dem RasPi 
(dauert sehr lange) oder als Virtuelle Machine. Besser wäre natürlich 
wenn du dich von Windows verabschiedest.
CygWin verursacht mehr Probleme als es löst.

Buildroot ist das mittel der Wahl, yocto ist deutlich komplexer. Für den 
Einstieg würde ich an deiner Stelle mit Buildroot erstmal Images für 
deinen RasberryPi bauen, da das besser unterstützt ist. Buildroot hat 
meines Wissens nach Upstream auch Support für eine STM32.

Bevor du dich um die Entwicklung eigener Software Gedanken machst, und 
die dazu passende IDE, versuche erstmal nur das Linuxsystem zu booten.

Wenn es dein Anspruch ist mehr über embedded Linux zu erfahren, insb. im 
Hinblich auf Treiberentwicklung, würde ich dir explizit nicht den STM32 
empfehlen. Da den kleinen Cortex-M Cores die MMU fehlt und der Speicher 
doch extrem knapp ist, hat das nicht wirklich mit "normalen" embedded 
linux system zu tun. Da ist die Klasse der Single-Board-Computer mit 
Cortex-A Kernen der Standard.

von Frank (Gast)


Lesenswert?

Ralf schrieb:
> Soweit ich gesehen habe, kann man da auch Linux (natürlich abgespeckt)
> verwenden.

Können kann man schon. Wollen will man aber nicht.

von Ralf (Gast)


Lesenswert?

xyz schrieb:
> Willst du jetzt Linux auf dem stm32 laufen lassen...
Ja.

> ... oder einen stm32 von Linux aus programmieren?
Ohne Linux auf dem STM32: nein. Für bare-metall hab ich ja schon die 
Windows-Umgebung :) Mit Linux auf dem STM32 macht es aber m.E. keinen 
Sinn, die Programme dann separat auf Windows zu erstellen, also auch ja.

samuel schrieb:
> Hier ist eine Auflistung nützlicher Referenzen.
> https://elinux.org/STM32
Danke :)

> Benutze auf jeden Fall ein Linuxsystem zum bauen, ob auf dem RasPi
> (dauert sehr lange) oder als Virtuelle Machine. Besser wäre natürlich
> wenn du dich von Windows verabschiedest.
Nur dafür von Windows verabschieden ist keine Option ;) Dann lieber VM.

> CygWin verursacht mehr Probleme als es löst.
Oh, so schlimm?

> Buildroot ist das mittel der Wahl, yocto ist deutlich komplexer. Für den
> Einstieg würde ich an deiner Stelle mit Buildroot erstmal Images für
> deinen RasberryPi bauen, da das besser unterstützt ist. Buildroot hat
> meines Wissens nach Upstream auch Support für eine STM32.
Okay.

> Bevor du dich um die Entwicklung eigener Software Gedanken machst, und
> die dazu passende IDE, versuche erstmal nur das Linuxsystem zu booten.
Ja, das ist freilich der erste Schritt, alles andere macht keinen Sinn.

> Wenn es dein Anspruch ist mehr über embedded Linux zu erfahren, insb. im
> Hinblich auf Treiberentwicklung, würde ich dir explizit nicht den STM32
> empfehlen. Da den kleinen Cortex-M Cores die MMU fehlt und der Speicher
> doch extrem knapp ist, hat das nicht wirklich mit "normalen" embedded
> linux system zu tun. Da ist die Klasse der Single-Board-Computer mit
> Cortex-A Kernen der Standard.
Okay. Ich dachte eben, ein kleines System zu haben, auf dem man mal 
einfach mal Linux anschauen kann, ist hilfreich. Ich könnte ja später 
dann auf Raspberry PI umsteigen und dort dann die Treiberentwicklung 
angehen, wenn ich deinen Hinweis umsetze.

Frank schrieb:
>> Soweit ich gesehen habe, kann man da auch Linux (natürlich abgespeckt)
>> verwenden.
> Können kann man schon. Wollen will man aber nicht.
Als jemand der Linux kaum kennt bin ich da erstmal neutral unterwegs ;)

Gruß Ralf

von samuel (Gast)


Lesenswert?

Nochmal zur Klarstellung.

Linux auf dem STM32 ist möglich, aber nicht sinnvoll. Der einzige Grund 
so was zu machen, ist der Anspruch Linux auf einer nicht dafür 
entworfenden Plattform gestartet zu bekommen. Sinnvoll nutzen kann man 
es nicht. Daher ist es um Linux kennenzulernen keine gute Idee. Viele 
Funktionen stehen auch gar nicht zu Verfügung.

Zu reinen Lernzwecken nimm doch bitte ein gut unterstütztes Board, z.B. 
ein Beaglebone Black oder deinen Raspberry Pi. Da ist dann auch die 
Nutzung von Qemu während der Entwicklung einfacher.

von Johannes S. (Gast)


Lesenswert?

viele hier haben ja schon ein Problem damit Herstellerbibliotheken auf 
dem µC einzusetzen, und dann auch noch Linux... Dafür sind doch die 
Cortex-A, von den Abmessungen her auch nicht viel grösser aber dafür 
können die noch mehr Speicher und den auch mit MMU verwalten.
MicroPython hat eine wachsende Fangemeinde, ist zwar kein komplettes OS, 
geht schon so in die Richtung.
Und es gibt viele für Cortex-M passende OS die dann auch einer 
Applikation noch Luft lassen.

von Ralf (Gast)


Lesenswert?

@samuel:
Hmmm... okay, wie lautet nun also die Empfehlung?

1) Linux in VM
=> um den Kernel & Co i.V.m. mit buildroot bauen zu können
=> welche Distribution?
=> QEMU als VM verwenden? Ich kenne bisher nur VirtualBox
2) Als Plattform Raspberry & gleichwertiges verwenden

Wäre das deine Empfehlung? So hab ich es zumindest rausgehört.

@Johannes S.
> viele hier haben ja schon ein Problem damit Herstellerbibliotheken auf
> dem µC einzusetzen, und dann auch noch Linux... Dafür sind doch die
> Cortex-A, von den Abmessungen her auch nicht viel grösser aber dafür
> können die noch mehr Speicher und den auch mit MMU verwalten.
Definiere "Problem": Schwierigkeiten oder Abneigung?

> Und es gibt viele für Cortex-M passende OS die dann auch einer
> Applikation noch Luft lassen.
Du meinst bspw. FreeRTOS und Co.?

Ralf

von Johannes S. (Gast)


Lesenswert?

Ralf schrieb:
> Definiere "Problem": Schwierigkeiten oder Abneigung?

Du liest hier noch nicht lange mit? STM HAL, ein gerne diskutiertes 
Thema hier. Eher Abneigung weil diese Software auch ihre 
Entwicklungsgeschichte hat.

Ralf schrieb:
> Du meinst bspw. FreeRTOS und Co.?

Jepp. Persönlich bin ich mit Mbed glücklich, das läuft auf den meisten 
Cortex-M und ist nicht wie FreeRTOS nur der RT Kernel, sondern hat auch 
die Treiber für Peripherie und höhere Level wie Dateisysteme, Ethernet, 
USB.
Für die STM32 nutzt Mbed auch die HAL/LL, da kann man Code für fehlende 
Teile per CubeMX generieren lassen und integrieren. Mbed hat ein C++ 
API, da ist es nur etwas Arbeit wenn man den CubeMX Code in Klassen 
umwandeln möchte.

von Ralf (Gast)


Lesenswert?

Johannes S. schrieb:
>> Definiere "Problem": Schwierigkeiten oder Abneigung?
> Du liest hier noch nicht lange mit?
Oh doch :)

> STM HAL, ein gerne diskutiertes Thema hier. Eher Abneigung weil diese
> Software auch ihre Entwicklungsgeschichte hat.
Genau die ST HAL ging mir durch den Kopf, als ich es gelesen hatte, aber 
ich war mir nicht sicher ob du genau das meinst - ich hatte mit der HAL 
schon diverse Male mein Vergnügen.

>> Du meinst bspw. FreeRTOS und Co.?
> Jepp. Persönlich bin ich mit Mbed glücklich, das läuft auf den meisten
> Cortex-M und ist nicht wie FreeRTOS nur der RT Kernel, sondern hat auch
> die Treiber für Peripherie und höhere Level wie Dateisysteme, Ethernet,
> USB.
> Für die STM32 nutzt Mbed auch die HAL/LL, da kann man Code für fehlende
> Teile per CubeMX generieren lassen und integrieren. Mbed hat ein C++
> API, da ist es nur etwas Arbeit wenn man den CubeMX Code in Klassen
> umwandeln möchte.
Hört sich interessant an. Und meine STM32-Boards hätten deiner Aussage 
immerhin noch eine Chance :)

Ralf

von samuel (Gast)


Lesenswert?

Ralf schrieb:
> 1) Linux in VM
> => um den Kernel & Co i.V.m. mit buildroot bauen zu können
> => welche Distribution?
> => QEMU als VM verwenden? Ich kenne bisher nur VirtualBox
> 2) Als Plattform Raspberry & gleichwertiges verwenden
>
> Wäre das deine Empfehlung? So hab ich es zumindest rausgehört.

1) Eine Linux VM, Betriebssystem ist fast egal. Mit Ubuntu kann man 
nichts falsch machen. Gerne mit Virtualbox, ist die simpelste Lösung.
Damit kannst du dann rootfs und kernel in Buildroot bauen.

Mit Qemu bezog ich mich auf die Möglichkeit den mit Buildroot erstellen 
Kernel + Rootfs erst mal in einer VM mit Qemu zu testen. Dann muss man 
nicht jedes mal die Hardware neu starten, bei kleinen Änderungen.

Als Zielsystem würde ich für die ersten Versuche anstatt des STM32 
Boards den RasberryPi nutzen. Wenn du dann in Buildroot fit bist, und 
auch eigenen Software damit entwickelt hast, kannst du es anschließend 
mit dem STM32 versuchen.

von PittyJ (Gast)


Lesenswert?

32F429IDISCOVERY : 2Mbytes Flash, 256KBytes Ram. Dazu noch 8Mbytes 
SD-Ram.
Und damit möchstest du als Anfänger Linux laufen lassen?

Nimm den Raspi, beschäftige dich ein bis zwei Jahre damit.
Auch auf dem Raspi kann man Treiber-Entwicklung machen.
Und wenn du dann die Anforderungen kennst, überlege noch einmal, ob du 
Linux wirklich auf einem 32F429 installieren möchtest. Das ist was für 
Profis und Spezialisten.

von Bernd (Gast)


Lesenswert?

von Frank (Gast)
04.07.2020 11:06

>Ralf schrieb:
>> Soweit ich gesehen habe, kann man da auch Linux (natürlich abgespeckt)
>> verwenden.

>Können kann man schon. Wollen will man aber nicht.


Ach komm, jetzt sei doch nicht so kleinlich, wo das ganze doch locker 
auf einem Atmega läuft:
https://hackaday.com/2012/03/28/building-the-worst-linux-pc-ever/

von Max G. (l0wside) Benutzerseite


Lesenswert?

Wenn es denn ein STM32 sein soll, kannst du dich auch an den 
verhältnismäßig neuen STM32MPxxx versuchen. Die haben einen Cortex-A, 
darauf läuft Linux generisch.
Allerdings sind die Demoboards für ST-Verhältnisse teuer: 
https://www.st.com/en/evaluation-tools/stm32mp157c-ev1.html#sample-and-buy

Was ist denn wichtig?
* Der Mikrocontroller? Dann wäre es sinnvoll, einen Blick auf die 
diversen Embedded OS zu werfen (FreeRTOS, EmbOS, ChibiOS, ...).
* Linux? Dann entweder wie oben empfohlen den RPi verwenden oder ein 
anderes Board mit einem Rechner, der eine MMU hat (ARM7, Cortex-A oder 
auch x86 - ja, es gibt noch viel mehr).

Die von dir beschriebene Kombi ist eher die elektronische Version von 
https://www.quaeldich.de/ (die Seite gibt es!).

von Tobias P. (hubertus)


Lesenswert?

samuel schrieb:
> Nochmal zur Klarstellung.
> Linux auf dem STM32 ist möglich, aber nicht sinnvoll. Der einzige Grund
> so was zu machen, ist der Anspruch Linux auf einer nicht dafür
> entworfenden Plattform gestartet zu bekommen. Sinnvoll nutzen kann man
> es nicht. Daher ist es um Linux kennenzulernen keine gute Idee. Viele
> Funktionen stehen auch gar nicht zu Verfügung.

hier würde mich mal folgendes interessieren: wenn es unbrauchbar ist, 
wieso existiert es denn? warum macht sich jemand die Mühe? offenbar gab 
oder gibt es einen use case. Oder ist es nur zum Spielen? aber was will 
man damit anfangen wenn es nicht nutzbar ist?
mich würde das Thema auch interessieren. Habe vor über 10 Jahren auf 
einem ARM7TDMI-S selbstbau Board mit 70MHz ein Linux 2.6 zum laufen 
gebracht. Weil ich Filesysteme und Netzwerk nutzen wollte. Leider weiss 
ich die einzelnen Schritte nicht mehr und müsste wieder auf der grünen 
Matte beginnen :-(

von aiaiai (Gast)


Lesenswert?

Tobias P. schrieb:
> hier würde mich mal folgendes interessieren: wenn es unbrauchbar ist,
> wieso existiert es denn? warum macht sich jemand die Mühe? offenbar gab
> oder gibt es einen use case. Oder ist es nur zum Spielen? aber was will
> man damit anfangen wenn es nicht nutzbar ist?

Als "Beweis" was so alles möglich ist.

von Der Preis ist heiss (Gast)


Lesenswert?

Max G. schrieb:
> Wenn es denn ein STM32 sein soll, kannst du dich auch an den
> verhältnismäßig neuen STM32MPxxx versuchen. Die haben einen Cortex-A,
> darauf läuft Linux generisch.
> Allerdings sind die Demoboards für ST-Verhältnisse teuer:
> https://www.st.com/en/evaluation-tools/stm32mp157c-ev1.html#sample-and-buy
>

Gibbet auch billiger: 
https://www.st.com/en/evaluation-tools/stm32mp157a-dk1.html#sample-buy

von S. R. (svenska)


Lesenswert?

Tobias P. schrieb:
> wenn es unbrauchbar ist, wieso existiert es denn?

Vor vielen, vielen Monden gab es mit uClinux eine Portierung von Linux 
auf MMU-lose Architekturen, zum Beispiel m68k, ARM7 oder i960. Eine 
bekannte Hardware war das uCsimm (m68k, 2 MB Flash, 8 MB RAM).

Irgendwann wurde diese Funktionalität als NOMMU in den normalen Kernel 
integriert, allerdings ist die damalige Hardware einfach zu klein für 
heutige Kernel.

Die moderne Basishardware für die NOMMU-Entwicklung sind eben die STM32, 
weil sie einfach verfügbar und groß genug für moderne Kernel sind. Man 
kann darauf sinnvoll Linux laufen lassen (zumindest so sinnvoll, wie 
NOMMU eben ist).

Tobias P. schrieb:
> Habe vor über 10 Jahren auf einem ARM7TDMI-S selbstbau Board
> mit 70MHz ein Linux 2.6 zum laufen gebracht. Weil ich Filesysteme
> und Netzwerk nutzen wollte.

Und genau da hast du deinen Usecase.
Daran hat sich seit uClinux mit Kernel 2.0 nichts geändert.

Außer vielleicht, dass heutzutage billige und schnelle MMU-Hardware 
verfügbar ist, die es damals nicht gab.

: Bearbeitet durch User
von Christopher J. (christopher_j23)


Lesenswert?

S. R. schrieb:
> Tobias P. schrieb:
>> Habe vor über 10 Jahren auf einem ARM7TDMI-S selbstbau Board
>> mit 70MHz ein Linux 2.6 zum laufen gebracht. Weil ich Filesysteme
>> und Netzwerk nutzen wollte.
>
> Und genau da hast du deinen Usecase.
> Daran hat sich seit uClinux mit Kernel 2.0 nichts geändert.
>
> Außer vielleicht, dass heutzutage billige und schnelle MMU-Hardware
> verfügbar ist, die es damals nicht gab.

Ich finde man muss fairerweise dazu sagen, dass es zu "Kernel 
2.0"-Zeiten auch noch nicht so viele Alternativen gab. Heute gibt es 
z.B. Nuttx, was gewissermaßen ein Mini-Linux für NOMMU-Hardware ist. 
Dateisysteme, Netzwerk, usw. sind da ebenfalls mit dabei. Habe letztens 
erst einen Vortrag eines Sony-Mitarbeiters gesehen, der für Rust die 
libstd von Linux auf Nuttx portiert hatte. Das war ohne größere 
Verrenkungen möglich.

von S. R. (svenska)


Lesenswert?

Christopher J. schrieb:
> Ich finde man muss fairerweise dazu sagen, dass es zu "Kernel
> 2.0"-Zeiten auch noch nicht so viele Alternativen gab.

Da hast du natürlich vollkommen recht.

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.