Hallo, habe bisher nur für Embedded Systems ohne Betriebssystem programmiert. Wie schaut das Programmieren eigentlich konkret aus, wenn ein Betriebssystem wie etwa Linux vorhanden ist? Z.B. -Zugriff auf CPU-Register, (oder ist das gar nicht mehr nötig?), -Zugriff auf Peripherie des Prozessors, wie etwa serielle Schnittstelle, IO-Ports, Ethernet, -Timer, -Zugriff auf angeschlossene Geräte wie SD-Karte, USB, ... -Netzwerk, TCP/IP, HTTP, ... Danke für Infos!
> habe bisher nur für Embedded Systems ohne Betriebssystem > programmiert. > Wie schaut das Programmieren eigentlich konkret aus, wenn ein > Betriebssystem wie etwa Linux vorhanden ist? Genauso wie bei einem PC, auf dem Linux ist, nur daß du eben einen Crosscompiler verwendest und das Programm nachher irgendwie auf dein Embedded-System kopieren mußt. > -Zugriff auf CPU-Register, (oder ist das gar nicht mehr nötig?), Das ist nicht nötig. Wozu hast du sonst das Linux? > -Zugriff auf Peripherie des Prozessors, wie etwa serielle Schnittstelle, > IO-Ports, Ethernet, > -Timer, > -Zugriff auf angeschlossene Geräte wie SD-Karte, USB, ... > -Netzwerk, TCP/IP, HTTP, ... Dafür sollte das Linux für das Board alle Treiber schon mitbringen. Die serielle Schnittstelle z.B. heißt dann eben /dev/ttyS0 und wird ganz genau so angesteuert, wie sie das auch auf dem PC würde. Beim Netzwerk verwendest du die üblichen Sockets, u.s.w.
John Go schrieb: > -Zugriff auf CPU-Register, (oder ist das gar nicht mehr nötig?), > -Zugriff auf Peripherie des Prozessors, wie etwa serielle Schnittstelle, > IO-Ports, Ethernet, > -Timer, > -Zugriff auf angeschlossene Geräte wie SD-Karte, USB, ... > -Netzwerk, TCP/IP, HTTP, ... Die wichtigste Umdenke, wenn man ein Betriebssystem hat ist: Das ist alles direkt verboten! Du greifst keine CPU Register an Zugriffe an Peripherie regelt ein Treiber An SD-Karten geht man selbst gar nicht ran (ausser in Ausnahmefällen), sondern überlässt das Schreiben/Lesen dem Filesystem Dito für Netzwerk etc. Sobald du ein Betriebssystem hast, ist es Aufgabe des BS sich um die Details zu kümmern und alle Aktivitäten im Rechner zu koordinieren. Das geht aber nur dann, wenn sich jedes schnöde Programm an die Spielregeln hält. Das ist wie in der Werkzeugausgabe: Solange du daheim im Bastelkeller arbeitest, kannst du jedes Werkzeug benutzen wie du lustig bist. Sobald du aber in einer Firma bist, gibt es jemanden der für die Verwaltung zuständig ist. Wenn du was brauchst, gehst du zu ihm. Übergehst du ihn und holst dir das Teil direkt aus dem Lager, gibts was auf die Finger!
Die Grundlagen lernst du am einfachsten indem du Linux auf deinem PC installierst und lernst dort zu programmieren. Die Idee von Linux auf einem Controller besteht ja darin das man sich die Arbeit von tausenden anderen Programmierern welche eben gerade schon die Treiber fuer so komplexe Hardware wie USB oder TCP/IP geschrieben haben, zunutze macht. Allerdings lernst es sich auf dem PC natuerlich erstmal leichter weil das Debugging einfacher ist. Olaf
Schöne Umschreibung. Das mit dem direkten Zugriff, gilt aber nur solange er nicht vor hat, selber einen Treiber zu schreiben. Un in die Versuchung kann man ja im Embedded Bereich immer mal kommen ;-)
Wie sieht dann z.B. der Zugriff auf einen IO-Port aus?
John Go schrieb:
> Wie sieht dann z.B. der Zugriff auf einen IO-Port aus?
Genauso wie bei Linux auf einem Desktoprechner. Entweder dein
Userspace-Programm holt sich mit ioperm() die Erlaubnis beim BS auf
einen Port-Bereich zugreifen zu koennen oder du schreibst ein
Kernelmodul.
Wenn es schon einen Treiber dafür gibt: In dessen Doku nachsehen.... Das wird irgendein /dev/blabla sein, das man einfach wie eine Datei öffnen kann, aber in Wirklichkeit keine Datei ist (ähnlich wie sich hinter /dev/hd... und /dev/sd... Festplatten u.ä. verbergen, /dev/st... ein Bandlaufwerk etc.). Ähnlich kann etwas auch z.B. in proc... eingeblendet sein, wo man mit Schreiben und Lesen mit einem Treiber kommunizieren kann.
Um PC Linux für Hardwareansteuerungen zu nutzen: Jürgen Plate Linux Hardware Hackz Messen, Steuern und Sensorik mit Linux http://www.netzmafia.de/skripten/buecher/linuxhackz/index.html € 39,90 Leseprobe Servoansteuerung http://files.hanser.de/hanser/docs/20070801_278115139-82_978-3-446-40783-1_Leseprobe.pdf
Hallo, wichtig ist, dass Du zunächst die Prinzipien von Linux verstehen lernst. Wichtige Stichpunkte sind hier: - Was ist der Unterschied von User-Space und Kernel-Space - Was bedeutet "everything is a file" - ... Um ein "selbsgebautes" Gerät anzusprechen, musst Du Dir dann einen Device Driver schreiben. Der kann dann standardisierte Mechanismen nutzen, um Dir Zugriff auf die Hardware zu verschaffen, bzw. Dich mit Daten zu versorgen. Die Funktionalität eines Device Drivers befindet sich im Kernel-Space. Deine Applikationen laufen im User-Space. Die Schnittstelle zwischen beiden stellen Funktionen zur Verfügung, die Du auch von wo anders her kennen solltest. Die heißen nämlich z.B. open, close, read, write, ioctl,... Eine richtig gute Doku hierzu ist dieses Buch hier: "Linux Device Drivers" von O'Reilly. Es ist als Open Book unter http://lwn.net/Kernel/LDD3/ verfügbar! Device Treiber zu programmieren ist keine leichte Sache, da muss man sich erstmal reinfinden. Aber die Mechanismen, die dort existieren sind schon toll, wenn man sie denn mal beherrscht...
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.