Şu anda bir Linux çekirdek modülüyle çalışıyorum ve bir dizide saklanan bazı 64 bitlik değerlere erişmem gerekiyor, ancak önce bir boşluk işaretçisini kullanmam gerekiyor.C: 'de uint64_t dizisi için void işaretçiyi göster
Boş bir işaretçi döndüren çekirdek işlevi phys_to_virt
kullanıyorum ve bu işaretçiyi işaret ettikleri dizinin içindeki öğelere erişmek için gerçekten nasıl kullanılacağını tam olarak bilmiyorum.
void *ptr;
uint64_t test;
ptr = phys_to_virt(physAddr);
test = *(uint64_t*)ptr;
printk("Test: %llx\n", test);
ben testinden alıyorum değer ben diziye içinde görmeyi beklediğim değil, bu yüzden ben yanlış bir şey yapıyorum oldukça eminim . Dizideki ilk üç öğeye erişmem gerekiyor, bu yüzden void imlecini bir uint64_t [] 'e çevirmem gerekiyor, ancak bunun nasıl yapılacağından emin değilim.
Her türlü öneri çok takdir edilecektir.
Teşekkür
Kodun kendisi geçerli gibi görünüyor ancak fiziksel belleği sanal olarak eşleştirmek, her durumda geçerli bir işlem değildir. 'PhysAddr'nızın tam olarak neyi işaret ediyor? – SomeWittyUsername
64 bit uzun değerler içeren 512 öğe dizisini işaret etmelidir. – Tony
Ama bu dizi nedir? Harici cihazda paylaşılan hafızada mı? – SomeWittyUsername