驱动开发,虚拟内存设备,测试时read,write以及cat,>重定向符的问题
我是初学者,自己按照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。经多次测试,这个脚本是好用的。
代码量很少,但是我就是搞不懂为什么会出现不一样的行为。
求高手指导。 这两天看驱动看的我好不辛苦~~求高手指导!!!求指导啊!!!!!!! 问题出在struct complete_dev* dev;
dev = container_of(inode->i_cdev, struct complete_dev, cdev);把分配的内存单独处理void *c_buf = NULL;
if(c_buf == NULL)
c_buf = kmalloc(1024,GFP_KERNEL);filp->private_data = c_buf; 回复 3# highnjupt
好像不是这个原因。dev = container_of(...)之后,dev和complete_device指向的是同一块global resource。而且file->private_data中应该要包含必要的其他信息。 在测试程序中,把read函数替换fread即可。:D) 回复 5# Gforge
为什么呢?
页:
[1]