免费注册 查看新帖 |

Chinaunix

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

驱动开发,虚拟内存设备,测试时read,write以及cat,>重定向符的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-18 14:36 |只看该作者 |倒序浏览
我是初学者,自己按照LLD3上写了个虚拟内存设备,进行测试时,发现用c语言调用read write和直接在命令行里敲cat /dev/complete0, echo "hello" > /dev/complete0行为不一样
后者虽然也进complete_read和complete_write了,但是不出写不进东西,也读不到东西,调试发现传入的count参数是0.
而前者则运行正常。count参数也不是0.
费解啊。
求高手帮助。
附件中有源码,以及调用脚本。complete.c complete.h Makefile complete.init。附带了我自己写的两个测试程序,read.c, write.c,用以测试。
加载时,用complete.init start, 卸载时,用complete.init stop。经多次测试,这个脚本是好用的。
代码量很少,但是我就是搞不懂为什么会出现不一样的行为。
求高手指导。

LLD练习complete小程序.rar

4.17 KB, 下载次数: 71

论坛徽章:
0
2 [报告]
发表于 2011-11-18 14:38 |只看该作者
这两天看驱动看的我好不辛苦~~求高手指导!!!求指导啊!!!!!!!

论坛徽章:
0
3 [报告]
发表于 2011-11-23 11:43 |只看该作者
问题出在
  1. struct complete_dev* dev;
  2.         dev = container_of(inode->i_cdev, struct complete_dev, cdev);
复制代码
把分配的内存单独处理
  1. void *c_buf = NULL;
  2. if(c_buf == NULL)
  3.                         c_buf = kmalloc(1024,GFP_KERNEL);
复制代码
  1. filp->private_data = c_buf;
复制代码

论坛徽章:
0
4 [报告]
发表于 2011-11-24 11:00 |只看该作者
回复 3# highnjupt


    好像不是这个原因。dev = container_of(...)之后,dev和complete_device指向的是同一块global resource。而且file->private_data中应该要包含必要的其他信息。

论坛徽章:
0
5 [报告]
发表于 2012-03-30 15:48 |只看该作者
在测试程序中,把read函数替换fread即可。

论坛徽章:
0
6 [报告]
发表于 2013-05-09 10:58 |只看该作者
回复 5# Gforge

为什么呢?


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP