免费注册 查看新帖 |

Chinaunix

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

[硬件及驱动] 求教一个分配DMA空间的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-18 21:23 |只看该作者 |倒序浏览
大家好,小弟在做一个Silicon Image 3132芯片的光驱驱动遇到了一个问题,请各位大侠帮帮忙的问题。
从光驱读数据是用DMA方式来读。我在用dmam_alloc_coherent函数来申请DMA空间地址时候,编译完程序。用insmod命令 插入模块的时候,总是提示模块“已杀死”。请问问大家,在内核中申请DMA地址 一般是用什么方式实现的呢?我把代码贴上了麻烦各位帮我看看**问题,万分感谢了。

     struct device dev;
     struct sil24_port_priv pp;
     union sil24_cmd_block *cb;
     unsigned long cb_size = sizeof(*cb); //31 max cmds
     dma_addr_t  cb_dma;

     cb = dmam_alloc_coherent(&dev,cb_size,&cb_dma,GFP_KERNEL);
      
    不知道这里的dev 是不是必须要初始化呢? 如何去初始化呢? 看代码里面找不到调用的的地方? 感谢感谢

论坛徽章:
0
2 [报告]
发表于 2012-06-19 14:55 |只看该作者
感谢大家帮帮忙啊~~~~

论坛徽章:
0
3 [报告]
发表于 2012-06-19 17:07 |只看该作者
回复 2# bailin2010


试试   cb = dma_alloc_coherent(NULL,cb_size,&cb_dma,GFP_KERNEL);

论坛徽章:
0
4 [报告]
发表于 2012-06-19 20:40 |只看该作者
回复 3# zhenggn123
非常感谢您的答复,我试过了,虽然插入模块的时候不会被杀死,但是提示:error inserting -1 cannot allocate memory。
不知道是不是需要初始化它的第一个参数? 请再帮忙想想办法哈,呵呵 感谢感谢··· 我实在是没有办法了
   

论坛徽章:
0
5 [报告]
发表于 2012-06-20 09:23 |只看该作者
回复 4# bailin2010


    没有代码,不知道怎么说。一般情况下在你分配DMA通道时能得到dev的。通常的做法,私有数据是附在dev后面的。能访问私有数据,就能访问dev。

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
6 [报告]
发表于 2012-06-22 20:03 |只看该作者
回复 1# bailin2010
没有代码不好说,只说一些一般性的调试方法:
最好有一个调试器 (如GDB)来跟踪代码运行,这样就比较容易找到问题
没有调试器,就只好用笨办法:加printf/printk来追踪代码运行;这种方法也很有效,就是慢点。

   

论坛徽章:
0
7 [报告]
发表于 2012-10-14 15:47 |只看该作者
GFP_KERNEL好像有限制,只能分24bit的内存,也就是4M。你的cb_size是多大?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP