www.mikrocontroller.net

Forum: PC-Programmierung Linux: Gerät soll auf physikalischen Speicher schreiben


Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wir entwickeln eine PCIe-Hardware. Diese soll unter anderem Daten in den 
RAM des Hauptprozessors schreiben. Ich bin jetzt gerade dabei ein 
Testprogramm unter Linux zu schreiben.
Ich stelle es mir so vor, dass ich einen Speicherbereich anfordere, 
diesen locke, die physikalische Adresse des Bereichs ermittele und an 
die PCIe-Karte übertrage. Mein Problem ist gegenwärtig, dass der 
angeforderte Speicher virtuell ist und nicht physikalisch auf der 
Adresse liegt, die mir z.B. malloc liefert.
Wie kann ich aus einer Anwendung (als root, ist ja nur für Testzwecke) 
physikalischen Speicher bekommen und dessen Adresse?



Danke Tom

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm,
vielleicht über einen Kerneltreiber als Modul?

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein früherer Kollege hat das über einen Kernelpatch gemacht. Der 
Speicherbereich wurde vor dem booten des Kernels reserviert und dem 
Kernel als reservierter Bereich übergeben.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Reinemann schrieb:

> Wie kann ich aus einer Anwendung (als root, ist ja nur für Testzwecke)
> physikalischen Speicher bekommen und dessen Adresse?

Auf regulärem Weg in traditionellem Betriebssystemumfeld überhaupt 
nicht. Dazu bedurfte es eines device drivers. Allerdings gibt es in 
neuerer Zeit eine Entwicklung hin zu user space device drivers, also 
Treibern die nicht im Kernel Kontext laufen, sondern vergleichbar zu 
Anwendungen. Könnte sich lohnen, mal in dieser Richtung zu suchen.

Autor: bla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.win.tue.nl/~aeb/linux/lk/lk-9.html

google: "linux kernel virtual physical" 4. link

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und das bezieht sich wie gefragt auf Anwendungsebene???

Nope, das steht ja auch drüber. Das beschreibt Kernel-Code, also 
Treiber-Programmierung.

Autor: Christoph Lechner (clechner)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, was du tun willst fällt halt nun nicht in den Aufgabenbereich von 
User-Space-Applications, sondern ist Aufgabe des Kernels.
"bla" hat schon recht mit dem Link. Schließlich hantiert man in Software 
mit virtuellen Adressen und die Hardware mit physikalischen Adressen. 
Also muss man das umsetzen.

Autor: Mark .. (mork)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einige Linux-Systeme bieten ein spezielles Memory-Device (/dev/mem), 
worüber man direkt auf den physkalischen Speicher aus dem User-Space 
zugreifen kann. Siehe 
http://pronix.linuxdelta.de/C/Linuxprogrammierung/...

Auf dauer sollte man das ganze aber trotzdem über einen eigenen 
Device-Driver realisieren, der der Anwendung nur die benötigten Daten 
liefert und sich um den Speicher selbst kümmert. Dafür sind Treiber da.

MfG Mark

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit /dev/mem kommt man zwar an den physikalischen Speicher ran, sein 
Problem besteht aber darin, solchen überhaupt erst mal zu kriegen, d.h. 
die physikalische Adresse eines DMA-fähigen Speicherbereichs. Das ist 
ohne Treiber nicht drin.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.