![是否列出了设备映射?](https://linux22.com/image/104913/%E6%98%AF%E5%90%A6%E5%88%97%E5%87%BA%E4%BA%86%E8%AE%BE%E5%A4%87%E6%98%A0%E5%B0%84%EF%BC%9F.png)
据我了解,有一个内存映射设备,它对从地址 0x7CC00000 开始的环形缓冲区执行 DMA。我尝试使用 mmap,如下所示:
int memfd;
FILE *file;
void *ringBuffer;
char *rx;
memfd = open("/dev/mem", O_RDWR | O_SYNC);
ringBuffer = mmap(0,4096,PROT_READ|PROT_WRITE,MAP_SHARED,memfd, 0x7CC00000);
rx = (char *)ringBuffer;
file = fopen("rx_data.dat","w");
fwrite(rx,sizeof(char),4096,file);
destroyRxBuffer(rx);
fclose(file);
sleep(5);
printf("Done.\n");
目的是从该环形缓冲区中读取数据。
使用供应商提供的应用程序,我可以验证设备是否处于活动状态并正在流入。我想要的是能够抓取数据并将其保存到文件中,而不是仅仅通过应用程序查看它。
问题是,当我尝试保存映射的环形缓冲区时,尽管通过应用程序看到了非零数据,但我得到的都是零。所以我的第一个想法是要么我错误地使用了 mmap,要么我错误地确定了设备映射的位置。对于后者,Linux 中是否有任何东西可以向我显示所有映射的设备及其地址?