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
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.
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
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.
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.
@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
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.
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
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.
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 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/
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!).
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 :-(
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.
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.
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.
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.