当前位置: 技术问答>linux和unix
linux设备驱动程序中的实验问题!
来源: 互联网 发布时间:2016-01-21
本文导语: 我按照 linux设备驱动程序(2th)做他上面的字符设备驱动程序, 实现scull0-3; 实现scullpipe,但是发现scullpipe运行的过程中,fops的read方法,好像一直都不 会停止读的(即使停下来),也是因为没有数据,被放进...
我按照 linux设备驱动程序(2th)做他上面的字符设备驱动程序,
实现scull0-3;
实现scullpipe,但是发现scullpipe运行的过程中,fops的read方法,好像一直都不
会停止读的(即使停下来),也是因为没有数据,被放进了wait_queue;
我的问题是,每次read到底read多少,什么时候结束?
(我知道每次read调用的count 参数都是4096),但是好像我ls > /dev/pipe,输入
了这么多数据,read完之后,他还是接着read;
所以,我想知道open ,read,write,release函数在驱动中被调用的机制(什么时候
开始,结束)以及相关的参数传递!
请多指教!
实现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有没有为你准备好相应的读数据。
release:就是当你在app调用close的时候关闭。
至于read,write,根据你的描述我想肯定不是一次调用而使你产生这种现象,
而你所要了解具体读写多少,这个根据你的情况来定的。
当kernel态没有足够的空间来写的时候他只能写相应大小,我们必须等待有足够的空间来写才可以。同样,如果读的话,看kernel有没有为你准备好相应的读数据。