Existe um dispositivo mapeado na memória que, no meu entender, realiza o DMA em um buffer de anel começando no endereço 0x7CC00000. Eu tentei usar um mmap da seguinte forma:
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");
com a intenção de ler daquele buffer de anel.
Usando um aplicativo fornecido pelo fornecedor, posso verificar se o dispositivo está ativo e em streaming. O que eu quero é poder capturar e salvar os dados em um arquivo, em vez de apenas visualizá-lo por meio do aplicativo.
O problema é que, quando tento salvar o buffer de anel mmap, tudo que vejo são zeros, apesar de ver dados diferentes de zero através do aplicativo. Então, meu primeiro pensamento é que estou usando o mmap incorretamente, ou estou errado quanto ao local do mapeamento do dispositivo. Para o último, existe alguma coisa no Linux que mostre todos os dispositivos mapeados e seus endereços?
Tags memory