目标其实很简单,就是想让 USB 摄像头在 Linux 上工作。安装uvc、uv4l(我猜是bcm2835内核模块)后,仍然不起作用。
目前,我在安装和调试过程中创建了以下字符文件:
crw-rw-rw- 1 root video 240, 0 Jul 4 20:24 video0
crw-rw-rw-+ 1 root video 81, 0 Jul 4 20:24 video10
crw-rw-rw-+ 1 root video 81, 1 Jul 4 20:24 video11
crw-rw-rw-+ 1 root video 81, 2 Jul 4 20:24 video12
crw-rw-rw- 1 root video 239, 0 Jul 4 23:01 uv4l
最后一个 uv4l 仅在我运行uv4l
命令后出现,并在重新启动后消失。
当我使用 dd 或其他程序调用 char 文件时,它会输出一个Input/output error
.所以我开始检查内核模块或驱动程序。我在想也许 char 文件没有正确注册到内核模块。
这是以下的输出udevadm info -a -n /dev/uv4l
:
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/virtual/cuse/uv4l':
KERNEL=="uv4l"
SUBSYSTEM=="cuse"
DRIVER==""
uv4l char文件关联的驱动什么都没有,根据下也没有device
文件夹/sys/dev/char/major#:minor#/
这个答案。同样的情况也适用于 char 文件videoX
。
这是否意味着我的猜测是正确的?是不是uvc驱动没安装好?
以下是一些相关输出lsmod
:
bcm2835_codec 36864 0
bcm2835_v4l2 45056 0
v4l2_mem2mem 24576 1 bcm2835_codec
v4l2_common 16384 1 bcm2835_v4l2
videobuf2_vmalloc 16384 1 bcm2835_v4l2
bcm2835_mmal_vchiq 32768 2 bcm2835_codec,bcm2835_v4l2
videobuf2_dma_contig 20480 1 bcm2835_codec
videobuf2_memops 16384 2 videobuf2_dma_contig,videobuf2_vmalloc
videobuf2_v4l2 24576 3 bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem
videobuf2_common 45056 4 bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2
snd_bcm2835 24576 1
videodev 200704 6 bcm2835_codec,v4l2_common,videobuf2_common,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2
snd_pcm 102400 2 snd_usb_audio,snd_bcm2835
media 36864 2 videodev,v4l2_mem2mem
并cat /proc/devices
显示以下内容(简短):
81 video4linux
239 uv4l
240 video0
似乎所有必需的内核模块都已安装,为什么字符文件没有与这些驱动程序关联?或者我在这里误解了一些基本概念?谢谢。