日期:2014-05-16  浏览次数:20598 次

linux设备驱动程序中的实验问题!
我按照   linux设备驱动程序(2th)做他上面的字符设备驱动程序,

实现scull0-3;

实现scullpipe,但是发现scullpipe运行的过程中,fops的read方法,好像一直都不

会停止读的(即使停下来),也是因为没有数据,被放进了wait_queue;

我的问题是,每次read到底read多少,什么时候结束?

(我知道每次read调用的count   参数都是4096),但是好像我ls   >   /dev/pipe,输入

了这么多数据,read完之后,他还是接着read;

所以,我想知道open   ,read,write,release函数在驱动中被调用的机制(什么时候

开始,结束)以及相关的参数传递!

请多指教!

------解决方案--------------------
open: 就是当你在app调用open的时候打开。
release:就是当你在app调用close的时候关闭。
至于read,write,根据你的描述我想肯定不是一次调用而使你产生这种现象,
而你所要了解具体读写多少,这个根据你的情况来定的。
当kernel态没有足够的空间来写的时候他只能写相应大小,我们必须等待有足够的空间来写才可以。同样,如果读的话,看kernel有没有为你准备好相应的读数据。