ich bin zur Zeit mit einer Linux-Kernel-Modul arbeitet, und ich brauche einige 64-Bit-Werte in einem Array gespeichert zuzugreifen, aber ich zuerst von einem Hohlraum gegossen Zeigern muß.Gusshohlraum Zeiger auf uint64_t Array in C
Ich benutze die Kernel-Funktion phys_to_virt
, die einen void-Zeiger zurückgibt, und ich bin nicht ganz sicher, wie dieser void-Zeiger tatsächlich verwendet wird, um auf Elemente innerhalb des Arrays zuzugreifen, auf das er zeigt.
Derzeit mache ich das:
void *ptr;
uint64_t test;
ptr = phys_to_virt(physAddr);
test = *(uint64_t*)ptr;
printk("Test: %llx\n", test);
Der Wert Ich bin von Test immer noch nicht, was ich innerhalb des Arrays zu sehen erwartet, also bin ich ziemlich sicher, dass ich etwas falsch mache . Ich muss auf die ersten drei Elemente im Array zugreifen, also muss ich den void-Zeiger auf einen uint64_t [] umwandeln, aber ich bin nicht ganz sicher, wie ich das machen soll.
Jeder Rat würde sehr geschätzt werden.
Dank
Der Code selbst gültig, aber die Abbildung physischen Speicher virtuellen scheint keine gültige Operation in allen Fällen. Worauf genau deutet dein 'physAddr' hin? – SomeWittyUsername
Es sollte auf ein Array mit 512 Elementen verweisen, das 64-Bit-Werte enthält. – Tony
Aber was ist das Array? Befindet es sich im Shared Memory innerhalb eines externen Geräts? – SomeWittyUsername