www.mikrocontroller.net

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


Autor: John Go (johngo)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: John Go (johngo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht dann z.B. der Zugriff auf einen IO-Port aus?

Autor: Thomas Pircher (tpircher) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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/linuxhack...
€ 39,90

Leseprobe Servoansteuerung
http://files.hanser.de/hanser/docs/20070801_278115...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.