Hi,
ich programmiere schon einige Jahre AVR µCs und hab nun schon seit einer
geraumen Zeit einen Raspberry hier herum liegen. Nun wollte ich das Ding
auch mal in Gebrauch nehmen.
Das auf dem Raspberry Linux läuft ist mir bewusst, ich habe leider mit
Linux noch nicht so viel Erfahrungen sammeln können.
Wäre es denn möglich, wie bei einem AVR oder einem anderen µC den ARM
Cortex-A7 auch direkt Hardwarenah zu programmieren? Was benötige ich da?
Gibt es im Nutz einige Ressourcen wo ich mich da ein wenig einlesen
kann? Oder bin ich da immer zwingend auf ein "Betriebssystem"
angewiesen?
Vielen Dank schon mal im vor raus.:-D
Warum willst du auf das Betriebssystem verzichten?
Crosscompilieren und ein Bootimage erstellen ist doch wesentlich
komplizierter, als sich einzuloggen und gcc aufzurufen.
Ob du nun einen Editor unter Windows aufrufst, oder unter Linux, dass
ist doch gehupft wie gesprungen. Selbst die Tataturkürzel sind gleich.
Es gibt Anleitungen für Bare Metal im Netz. Doch wenn du nicht einmal
Linux bedienen kannst, könnte das auch schon zu kompliziert sein.
Lern Linux, das ist was fürs Leben. Ich benutze das schon 23 Jahre lang.
Danke Pitty für den Hinweis, jedoch würde ich Linux erstmal bei Seite
lassen wollen. Ich will die Grundzüge des ARM lernen. Bare Metall war
aber der richtige Hinweis, danke dafür. Crosscompiling und
Image-Erstellung sehe ich erstmal nicht so kompliziert. Da nimmt einen
ARM-GCC schon sehr viel ab.
Gewisse Grundzüge von Linux kenne ich ja, so ist das nicht, da kommt man
ja nicht drumherum (bin nun auch seit 89 vorm Rechner), aber außer
Server aufzusetzen und zu warten mache ich da eigentlich nicht viel.
Produktiv setze ich das System nicht ein, und möchte es eigentlich auch
nicht.
Draco schrieb:> Das auf dem Raspberry Linux läuft ist mir bewusst, ich habe leider mit> Linux noch nicht so viel Erfahrungen sammeln können.>> Wäre es denn möglich, wie bei einem AVR oder einem anderen µC den ARM> Cortex-A7 auch direkt Hardwarenah zu programmieren? Was benötige ich da?> Gibt es im Nutz einige Ressourcen wo ich mich da ein wenig einlesen> kann?
Unter Linux nah an der Hardware zu programmieren bedeutet schlicht und
einfach Module bzw. Treiber für den Kernel zu schreiben. Leider ist das
nicht so übersichtlich wie bei den AVRs, was unter anderem dem Umstand
geschuldet ist, dass der Kernel von der 200Mhz MIPS-Kiste über Mehrkern
Cortex-A oder AMD64 bis hin zu irgendwelchen Clustern mit zigtausend
Prozessoren läuft, d.h. die Abstraktionsebene ist entsprechend größer.
Es gibt von Greg Kroah-Hartmann ein sehr umfassendes Buch namens "Linux
Device Drivers" was online frei erhältlich ist. Es ist leider
mittlerweile deutlich veraltet und einige Dinge haben sich seitdem
(2005!) geändert, wenn auch nicht alle. Es geht jedoch keineswegs auf
den Raspberry Pi im speziellen ein (wie auch?). Dafür kann ich aber
persönlich das Buch "Embedded Linux lernen mit dem Raspberry Pi" von
Jürgen Quade empfehlen. Dort wird alles vom Grundlegenden Aufbau von
Linux, über etwaige Bootloader wie U-Boot bis hin zum Crosscompiling des
ersten eigenen Kernels erklärt. Das Buch ist relativ kurz aber dafür
knackig geschrieben. Es ist sicher nichts für Lieschen Müller die mit
Python mal eine LED blinken lassen möchte aber wenn du Erfahrung mit C
auf AVR und/oder ARM hast und bereit bist dich da reinzulesen, dann
sollte das schon passen.
Von Bare-Metal auf Cortex-A würde ich jedoch erstmal Abstand nehmen und
wenn überhaupt, dann eher auf einem Beaglebone als auf einem RPi. Da
ist der Prozzi einfach deutlich besser dokumentiert. Dort hat man jedoch
wieder zwei 32bit Coprozessoren (PRUs) die am gleichen DDR3 hängen wie
der Cortex-A und die sich prima wie ein AVR "bare metal" programmieren
lassen. Über shared memory kannst du dann mit niedriger Latenz über die
PRUs Daten (aus GPIO, I2C, SPI, CAN, usw) in den RAM schieben oder aus
dem RAM auf die Schnittstellen schicken. Dafür musst du dann jedoch auch
wieder eigene Kerneltreiber schreiben ;)
PittyJ schrieb:> Lern Linux, das ist was fürs Leben. Ich benutze das schon 23 Jahre lang.
Dem kann ich mich nur anschließen, auch wenn es bei mir erst ca. 5 Jahre
sind. Es gibt nicht viele Dinge in der IT-Welt die so konstant sind wie
Linux. Mit den Linuxkenntnissen von heute kannst du auch garantiert in
10 Jahren noch was anfangen.
Edit:
Wenn du den Cortex-A "bare metal" betreibst schmeißt du meiner Meinung
nach einfach zu viele Dinge weg, die du mit Linux quasi geschenkt
bekommst, wie z.B. Unterstützung für verschiedenste Dateisysteme, einen
brauchbaren Netzwerkstack, einen Scheduler sowie die Speicherverwaltung
und das alles um im besten Fall eine bessere Latenz zu bekommen. Das
lohnt sich aus meiner Sicht einfach nicht. Wenn du eine niedrige Latenz
haben willst, dann nimm einen Cortex-M und programmiere ohne OS. Mit den
preempt-rt Patches sind aber auch beim Linux Kernel maximale Latenzen
von 140µs machbar. Für den Beaglebone gibt es da schon fertige Images
und seit kurzem (soweit ich weiß) auch für den RPi.
Draco schrieb:> Ich will die Grundzüge des ARM lernen. Bare Metall
Das geht zwar irgendwie mit dem RPi, aber ich denke so ein billiges
STM32-Discovery ist dafür um Welten besser geeignet.
der RPi-Prozessor ist eigentlich ein Video- und Grafik-Prozessor mit
einem ARM-Hilfsrechenknecht nebendrann, und damit schon von der Hardware
bald soweit von "Bare Metal ARM" entfernt, wie nur irgendwie möglich.
Planlos schrieb:> der RPi-Prozessor ist eigentlich ein Video- und Grafik-Prozessor mit> einem ARM-Hilfsrechenknecht nebendrann, und damit schon von der Hardware> bald soweit von "Bare Metal ARM" entfernt, wie nur irgendwie möglich.
Zickt nicht auch der Hersteller bzgl. Support rum?
STM32 sind doch ganz schön verbreitet...
STK500-Besitzer schrieb:> Zickt nicht auch der Hersteller bzgl. Support rum?> STM32 sind doch ganz schön verbreitet...
Ja da hat sich Broadcom bisher nicht gerade mit Ruhm bekleckert.
Ebenfalls ein Grund, den BB dem RPi vorzuziehen, wenn man irgendetwas
mit Hardware machen möchte. STM32 wäre bei bare metal jedoch meine erste
Wahl. Die F7 haben zum Teil sogar native 64bit FPUs am Start.
Mit dem Raspi würde ich sowas auch nicht angehen; wenn schon, dann wie
andere schon schrieben auf Linux Treiberebene. Sich da Wissen anzueignen
ist sicherlich nicht verkehrt und Zukunftsweisender als jedes Detail
über den ARM selbst zu lernen.
Alternativ zu einem STM32 Board, kannst Du auch das MSP432 Launchpad von
TI nehmen (MSP432 hat einen ARM Cortex M4F Kern drin):
http://www.ti.com/tool/msp-exp432p401r
Kostet um die USD 12.- und hat alles drauf was man so braucht zum
einsteigen (RGB LED, Taster, JTAG interface, Speisung (per USB),
Debugger, Strommessung, I/O's herausgeführt, Back-channel UART via USB
zum PC...)
Es gibt nichts, was es nicht gibt:
http://www.valvers.com/open-software/raspberry-pi/step01-bare-metal-programming-in-cpt1/
Ob's sinnvoll ist, ist eine andere Frage.
Die stellt sich m.E. bei einem Hobby nicht. Wenn's aber doch sein muß,
würde ich persönlich Raspi-Bare-Metal-Programmierung jedenfalls
bezüglich der Sinnhaftigkeit noch über Briefmarkensammeln und Angeln
einordnen.
Markus F. schrieb:> Ob's sinnvoll ist, ist eine andere Frage.>> Die stellt sich m.E. bei einem Hobby nicht.
Naja, auch bei einem Hobby verfolgt man ja ein bestimmtes Ziel. Sinnvoll
ist dann, das zu tun, mit dem man diesem Ziel zumindest näher kommt.
> Wenn's aber doch sein muß, würde ich persönlich Raspi-Bare-Metal-> Programmierung jedenfalls bezüglich der Sinnhaftigkeit noch über> Briefmarkensammeln und Angeln einordnen.
Beim Angeln kann man das Ergebnis wenigstens grillen und verspeisen.