Wie programmiert man für Linux Boards (Grundlagen)

OP #1447486
Lesenswert?
• ▲
▼
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!
Gast #1447519
Lesenswert?
• ▲
▼
> 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.
#1447637
Lesenswert?
• ▲
▼
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!
Gast #1447642
Lesenswert?
• ▲
▼
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
Gast #1447644
Lesenswert?
• ▲
▼
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 ;-)
#1447742
Lesenswert?
• ▲
▼
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.
Gast #1447876
Lesenswert?
• ▲
▼
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren