为什么我无法读取此文件。我尝试用 cat 读取这个文件:
cat /dev/video0
但它说
cat: /dev/video0 : invalid arguments
同样,如果我尝试使用 dd as :
dd if=/dev/video0 ~/vid
它仍然无法读取它。
请注意,video0 是我的网络摄像头的设备文件。
为什么我无法读取此文件。我尝试用 cat 读取这个文件:
cat /dev/video0
但它说
cat: /dev/video0 : invalid arguments
同样,如果我尝试使用 dd as :
dd if=/dev/video0 ~/vid
它仍然无法读取它。
请注意,video0 是我的网络摄像头的设备文件。
在这种情况下,了解更多信息的一种方法是在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 隧道端口也可以在这里工作。
我用:
dd if=/dev/video0 of=~/movie.mpg
然后
vlc movie.mpg
但我使用 PVRUSB2 mpg 编码器/解码器作为源。
在您的 dd 调用中,您可能会考虑使用“of”构造的重定向“>”。
我认为您在驱动程序中创建的设备节点“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);
当您在运行时 cat 设备节点“video0”时,它会调用“video0_show”函数来打印一些东西。错误消息“cat: /dev/video0 : invalid arguments”表示 video0_show 函数的参数错误。您应该调试驱动程序。