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


von Thomas R. (Firma: abaxor engineering) (abaxor)


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

von Steffen (Gast)


Lesenswert?

Hmm,
vielleicht über einen Kerneltreiber als Modul?

von Mathi (Gast)


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.

von (prx) A. K. (prx)


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.

von bla (Gast)


Lesenswert?

http://www.win.tue.nl/~aeb/linux/lk/lk-9.html

google: "linux kernel virtual physical" 4. link

von (prx) A. K. (prx)


Lesenswert?

Und das bezieht sich wie gefragt auf Anwendungsebene???

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

von Christoph L. (clechner)


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.

von Mark .. (mork)


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

von (prx) A. K. (prx)


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.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?


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.