Linux: Gerät soll auf physikalischen Speicher schreiben

OP (Firma: abaxor engineering) #1400596
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
Gast
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.
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.
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.
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/Linuxsystemprogrammieren_C_Kurs_Kapitel9a.shtml#9_4

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.