내가 이해한 바로는 주소 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");
목적은 이 링 버퍼에서 데이터를 읽는 것입니다.
공급업체에서 제공한 앱을 사용하여 장치가 활성 상태이고 스트리밍 중인지 확인할 수 있습니다. 내가 원하는 것은 단순히 애플리케이션을 통해 보는 것이 아니라 데이터를 가져와서 파일에 저장할 수 있는 것입니다.
문제는 매핑된 링 버퍼를 저장하려고 할 때 애플리케이션을 통해 0이 아닌 데이터를 보았음에도 불구하고 모두 0이 된다는 것입니다. 그래서 제가 처음 생각한 것은 mmap을 잘못 사용하고 있거나 장치가 매핑된 위치를 잘못 결정하고 있다는 것입니다. 후자의 경우 매핑된 모든 장치와 해당 주소를 표시할 수 있는 것이 Linux에 있습니까?