/ dev / video0:无效的参数

时间:2013-03-20 21:22:34

标签: kernel device webcam linux-device-driver device-driver

为什么我无法读取此文件。我尝试用cat读取此文件:

cat /dev/video0 

但它说

cat: /dev/video0 : invalid arguments

同样,如果我尝试将dd用作:

dd if=/dev/video0 ~/vid

仍然无法阅读。

请注意,video0是我的网络摄像头的设备文件。

3 个答案:

答案 0 :(得分:3)

在这种情况下,找到更多信息的一种方法是在 strace中运行命令

strace cat /dev/video0

将显示故障点的更多细节:

....
open("/dev/video0", O_RDONLY)           = 3
fstat(3, {st_mode=S_IFCHR|0660, st_rdev=makedev(81, 0), ...}) = 0
fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
read(3, 0x2379000, 65536)               = -1 EINVAL (Invalid argument)
....

在我的情况下似乎是说我的/ dev / video0设备不支持所需的操作:所以在这种情况下,'cat'试图从设备读取64k字节。

然而,我发现使用nc(netcat)代替cat确实可以用于此目的:

nc -l 1234 </dev/video0

用相应的:

nc 127.0.0.1 1234 | mplayer tv://device=/dev/stdin

在本地显示; SSH隧道端口也可以在这里工作。

答案 1 :(得分:2)

我用:

dd if=/dev/video0 of=~/movie.mpg

然后

vlc movie.mpg

但我正在使用PVRUSB2 mpg编码器/解码器作为源。

在您的dd调用中,您可能会考虑使用“of”构造的重定向“&gt;”。

答案 2 :(得分:1)

我认为您在驱动程序中创建的设备节点“video0”的show函数可能是错误的。

在下面举一个例子。

static DEVICE_ATTR(video0, S_IRUGO|S_IWUSR|S_IWGRP|S_IWOTH, video0_show, video0_store);

static ssize_t video0_show(struct device *dev, struct device_attribute *attr, char *buf);

static ssize_t video0_store(struct device *dev, struct device_attribute *attr, char *buf, size_t count);

当您在运行时捕获设备节点“video0”时,它会调用“video0_show”函数来打印某些内容。 错误消息“cat:/ dev / video0:invalid arguments”表示video0_show函数的参数错误。你应该调试驱动程序。