阅读:2136回复:7
需要多个进程能同时open device,driver上有什么讲究?
问题先放在这里,俺去research
有人先回答了就给分:D:D |
|
|
沙发#
发布于:2003-07-24 11:25
还是跟调用有关?但我看标志里(O_RDWR之类)里没有像windows的共享/独占之类呀
或者其它?mknod有没有关? :(.。。。 |
|
|
板凳#
发布于:2003-07-25 07:59
其实多个进程同时打开device,如果不需要互斥的话,基本没有多大的关系,当然,如果你的device里面有互斥的操作的话,就要注意了。同时,在freebsd里面好像有一个宏,是用于在打开device时自增和自减的,属于原子操作,可以参考一下。
另外,如果你的设备是动态加载和卸载的,那一定要加上这种宏,防止在有用户使用设备的情况下卸载设备 |
|
|
地板#
发布于:2003-07-25 09:00
对不起,问题好像没说清楚,这个问题比你想像中的基本。
我只需要两个程序都可以 open 它,但现在的情况是 第一个 open后,第二个程序 open 时会出现 resource busy 的错误。 我看了一下日志,第二次的 open 好像还没有调用到 driver 的 open 例程。(当然也没有涉及实际的设备操作) 不知道设备的共享与否是在哪里控制的?(说实话,我的感觉怎么和 driver 没关似的) 其实目前,在一个程序(进程)中也不能连续 open 两次。 另:driver 是 USB PC Camera. [编辑 - 7/25/03 by jason.gao] |
|
|
地下室#
发布于:2003-07-30 14:23
如果在一个时间只允许一个进程打开一个设备需要在驱动中进行处理,
处理的办法通常是在驱动的设备的抽象出来的数据结构中设置一个计数或者标志位, 然后在open调用中更改它的值,并且加以判断,如果已经打开的设备就打印complain并且退出, 如果要想多个进程同时打开一个设备,理论上在驱动上不作上述处理就可以了,但是涉及设备的数据维护的地方必须要小心,仍然应该采取互斥的措施,否则将会出现多个进程同时存取数据的问题。 所以要想使不同的进程可以同时打开一个设备,程序的编写者必须要保证对设备的操作不是互斥的才行 |
|
5楼#
发布于:2003-07-31 11:44
对不起,问题好像没说清楚,这个问题比你想像中的基本。 可以考虑在Driver上在加一层API,只是负责抓图,然后再把抓好的图给不同的AP,这样就不用在driver中下功夫了.因为在USB PC Camera这样的device driver中作修改使之可以被不同的AP打开,看来还是比较麻烦的,不过要是有时间的话,也可以试试无妨. |
|
6楼#
发布于:2003-08-01 10:26
呵呵,elegant, cheetah说的是一般情况,我的这个情况好像有点特殊,这是我开始没想到的。super_hzh说得有点对路了。
看了一下,肯定是不能同时open两个用于read image的,windows下也是这样。但我现在并不要那样,而是一个read image/preview,另一个用于控制ioctl 根据V4L的spec,这样做是可能的 (见multiple open一节),但具体怎么做还没找到,因为这里面涉及到多个driver(dev/video和自己的camera driver) [编辑 - 8/1/03 by jason.gao] |
|
|
7楼#
发布于:2003-08-01 10:32
分先给了,如有更好的建议我们可以继续,尽管目前不是很着急解决这个问题。
研究嘛 :D |
|
|