是否列出了设备映射?

是否列出了设备映射?

据我了解,有一个内存映射设备,它对从地址 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 中是否有任何东西可以向我显示所有映射的设备及其地址?

相关内容