Hallo zusammen!
Ich glaube ich habe ein kleines Problem beim Verständnis von Pointern.
In C habe ich ein kleines ladbares Modul geschrieben, dass per insmod in den Kernel eingefügt werden kann.
Innerhalb des Treibers frage ich per unsigned long buf =__get_free_pages(GFP_DMA,1) eine Speicherseite an (bei mir 4kb).
Wenn ich alles richtig verstanden habe, dann bekomme ich als Rückgabewert die virtuelle Startadresse der DMA-Region.

Jetzt möchte ich den Inhalt dieser Region auslesen.
Dazu erzeuge ich einen neuen Pointer (unsigned long *ptr), weise diesem per ptr=buf den Speicherbereich zu.
Anschließend lese ich per Schleife *ptr, *(ptr+1),*(ptr+2), ...
Ist das alles richtig? ich bekomme etwas komische Werte dabei zurück.
Ist es richtig, dass ich den virtuellen Bereich auslese, oder muss ich die Adresse zuvor per _pa(buf) umwandeln und somit auf den physikalischen Bereich zugreifen?