Forum: Compiler & IDEs Wie programmiert man für Linux Boards (Grundlagen)


von John G. (johngo)


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!

von Rolf Magnus (Gast)


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.

von Karl H. (kbuchegg)


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!

von Olaf (Gast)


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

von Matthias (Gast)


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 ;-)

von John G. (johngo)


Lesenswert?

Wie sieht dann z.B. der Zugriff auf einen IO-Port aus?

von Thomas P. (tpircher) Benutzerseite


Lesenswert?

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.

von Klaus W. (mfgkw)


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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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

von Gast (Gast)


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...

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.