ARM에서 커널 3.18을 사용하고 있습니다. 나는 드라이버를 쓰고있는 카메라에서 데이터를 읽는다. 나는 메모리를 설정하려면 다음을 사용하십시오 : 이것은 매우 잘 작동어디에서 remap_pfn_range에 대해 vm_area_struct를 얻을 수 있습니까?
cpu_handle = dma_alloc_coherent(NULL, dma_size, &dma_handle, GFP_KERNEL | GFP_DMA);
. 나는 카메라가 데이터를 전달한 후에 동일한 커널 모듈을 사용하여 메모리를 읽고 그림을 볼 수있다.
이제 사용자 공간 응용 프로그램을 시작하여 동일한 데이터를 읽으 려합니다. 가는 길은 remap_pfn_range
입니다.
필자는 예제를 계속 찾고 있지만 결코 설명하지 않는 한 가지는 내가 vm_area_struct를 얻는 곳입니다. 나는 이것이 사용자 응용 프로그램 권한에서 왔다고 가정하고 있습니까? 첫 번째 인수는 "user vma to map"이라고되어 있습니다. 그러면이 구조체에 대한 포인터를 어떻게 얻을 수 있습니까?
드라이버가'dma_alloc_coherent()'로 버퍼를 할당했다면'remap_pfn_range()'를 직접 호출하지 말고'dma_mmap_coherent()'를 통해 해당 버퍼에 대한'mmap()'요청을 구현해야합니다. – Notlikethat
이 팁을 가져 주셔서 감사합니다. dma_mmap_coherent가이 문제를 해결하는 방법 인 것 같습니다. – pgibbons