|
我用的内核版本是2.6.9,想用__get_free_pages得到一个2M的空间,然后mmap给应用层,让应用层直接来写这个空间,之后我用DMA把这2M的数据搬到其他地方去处理,结果碰到了一些问题,向大家讨教。我测试发现,通过mmap以后,应用层只写入了4k的数据,其他的数据没有写成功,很奇怪~,我的代码如下,编译没有报任何错误
1、 使用__get_free_pages得到内存
pvideo_codec_dev->DMA_BaseAddr = (DWORD*) __get_free_pages(GFP_KERNEL|GFP_DMA,9)
res_addr = (DWORD *)pvideo_codec_dev->DMA_BaseAddr;
while (pages < 512)
{
//Let the page always in the mem
SetPageReserved(virt_to_page(res_addr));
res_addr = res_addr + PAGE_SIZE;
pages++;
}
memset(pvideo_codec_dev->DMA_BaseAddr, 0, PAGE_SIZE<<9);
2. 使用mmap
map_page_range(vma,vma->vm_start,
virt_to_phys(pvideo_codec_dev->DMA_BaseAddr),
vma->vm_end-vma->vm_start,
vma->vm_page_prot)
请大家帮忙看一些,我的代码或者思路是否有问题,多谢!
另外还有一个问题,为何我#include <linux/wrapper.h>,make后报错,
linux/wrapper.h: No such file or directory
多谢大家~ |
|