免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2021 | 回复: 3
打印 上一主题 下一主题

[内核入门] DMA 分配连续空间 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-08 12:05 |只看该作者 |倒序浏览
调试一个摄像头驱动程序,系统是linux_2.6.12,其中需要分配一块DMA。
原来的实例程序是
#define YUV_IMG_BUF_SIZE PAGE_ALIGN(0x96000 + PAGE_SIZE - 1)
camif_yuv_buf = dma_alloc_coherent(NULL, YUV_IMG_BUF_SIZE, &camif_yuv_buf_dma,GFP_KERNEL);

现在我想申请大一点的空间:
#define YUV_IMG_BUF_SIZE PAGE_ALIGN(0x280000 + PAGE_SIZE - 1)

调试时系统提示:coherent allocation too big...
分析内核,发现/arch/arm/mm/consistent.c文件中
#define CONSISTENT_BASE        (0xffc00000)
#define CONSISTENT_END        (0xffe00000)
限制了分配空间。

后打算修改这个宏,但调试又出现了bug:
kernel BUG at arch/arm/mm/consistent.c :221!

实在无语了!
现在请教有过内核或驱动开发经验的各位高人,如何才能增大申请的DMA空间?

论坛徽章:
0
2 [报告]
发表于 2012-12-08 18:34 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2012-12-10 11:24 |只看该作者
谢谢!
看着有点意思,但是又不太懂,如何从从DMA32里为DMA分内存呢?dma_alloc_coherent的第一个参数除了NULL还有哪些?

论坛徽章:
0
4 [报告]
发表于 2012-12-10 21:50 |只看该作者
dma_alloc_coherent的第一个参数除了NULL,还可以传入一个具有dma功能的设备,一般是pci设备。你可以看dma_alloc_coherent是如何实现的。。。毕竟DMA只有16M。留给你可以用的很少的。只有去DMA32空间申请。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP