Kernel /dev/video0:参数无效

Kernel /dev/video0:参数无效,kernel,device,webcam,linux-device-driver,device-driver,Kernel,Device,Webcam,Linux Device Driver,Device Driver,为什么我无法读取此文件。我尝试使用cat读取此文件,如下所示: cat /dev/video0 但是它说 cat: /dev/video0 : invalid arguments 同样,如果我尝试将dd用作: dd if=/dev/video0 ~/vid 它仍然无法阅读它 请注意,video0是我的网络摄像头的设备文件。我认为您在驱动程序中创建的设备节点“video0”的显示功能可能是错误的 下面给出一个例子 static DEVICE_ATTR(video0, S_IRUGO|S_I

为什么我无法读取此文件。我尝试使用cat读取此文件,如下所示:

cat /dev/video0 
但是它说

cat: /dev/video0 : invalid arguments
同样,如果我尝试将dd用作:

dd if=/dev/video0 ~/vid
它仍然无法阅读它


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

我认为您在驱动程序中创建的设备节点“video0”的显示功能可能是错误的

下面给出一个例子

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”进行cat时,它会调用“video0\u show”函数来打印某些内容。 错误消息“cat:/dev/video0:invalid arguments”表示video0\u show函数的参数错误。您应该调试驱动程序。

我使用:

ddif=/dev/video0 of=~/movie.mpg

然后

vlc电影.mpg

但是我使用一个PVRUSB2 mpg编码器/解码器作为源


在您的DD调用中,您可能会考虑使用“OF”构造的重定向“>”。在这种情况下,发现更多的方法是在Struts

中运行命令。 这将显示故障点的更多详细信息:

....
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

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

也许可以使用dmesg的输出useful@Federicodmesg在执行cat/dev/video0时没有输出权限不足?IME shell工具并不总是提供您可能期望的错误消息。尝试
strace
并准确查看
read()
sys调用失败时发生的情况。此设备文件用于配置底层网络摄像头、摄像头或传感器驱动程序,即配置分辨率(宽度、高度和bpp)、颜色模式(RGB、YUV)等。。我想我们无法从这个设备文件中读取任何信息。大多数配置都是使用ioctl calls完成的。nc-l-p 1234?否@moof2k,请阅读手册页:>>>-p source\u port指定nc应使用的源端口,但受权限限制和可用性的限制。将此选项与-l选项结合使用是错误的。
nc -l 1234 </dev/video0
nc 127.0.0.1 1234 | mplayer tv://device=/dev/stdin