我有一台相机,但没有 Linux 驱动程序。因此,我尝试安装05e1:0b01。但它仍然失败。
设备插入/拔出正确显示/var/log/messages
Aug 19 19:15:47 example kernel: [39339.374902] usb 1-3: USB disconnect, device number 16
Aug 19 19:16:52 example kernel: [39404.464068] usb 1-3: new high speed USB device number 17 using ehci_hcd
Aug 19 19:16:55 example kernel: [39407.152965] usb 1-3: New USB device found, idVendor=05e1, idProduct=0b01
Aug 19 19:16:55 example kernel: [39407.152976] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Aug 19 19:16:55 example kernel: [39407.152984] usb 1-3: Product: USB Camera
Aug 19 19:16:55 example kernel: [39407.152990] usb 1-3: Manufacturer: Syntek
Aug 19 19:16:55 example kernel: [39407.152997] usb 1-3: SerialNumber: 0123456789AC
Aug 19 19:16:55 example mtp-probe: checking bus 1, device 17: "/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-3"
Aug 19 19:16:55 example mtp-probe: bus: 1, device: 17 was not an MTP device
步骤1:我从以下网站下载了此相机驱动程序http://sourceforge.net/projects/syntekdriver/
第2步:README 文件指示这样做。
stk11xx-2.1.0]# make -f Makefile.standalone
make -C /lib/modules/2.6.40.3-0.fc15.i686/build SUBDIRS=/home/sun/Downloads/stk11xx-2.1.0 modules
make[1]: Entering directory `/usr/src/kernels/2.6.40.3-0.fc15.i686'
CC [M] /home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.o
/home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.c: In function ‘usb_stk11xx_probe’:
/home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.c:803:2: error: implicit declaration of function ‘init_MUTEX’ [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
make[2]: *** [/home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.o] Error 1
make[1]: *** [_module_/home/sun/Downloads/stk11xx-2.1.0] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.40.3-0.fc15.i686'
make: *** [driver] Error 2
步骤3:在互联网上搜索后,我发现我必须在stk11xx-usb.
c 中添加以下新行:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
#include <linux/semaphore.h>
#else
#include <asm/semaphore.h>
#endif
#define init_MUTEX(LOCKNAME) sema_init(LOCKNAME,1);
步骤4:再次尝试构建,失败。
stk11xx-2.1.0]# make -f Makefile.standalone
make -C /lib/modules/2.6.40.3-0.fc15.i686/build SUBDIRS=/home/sun/Downloads/stk11xx-2.1.0 modules
make[1]: Entering directory `/usr/src/kernels/2.6.40.3-0.fc15.i686'
CC [M] /home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.o
CC [M] /home/sun/Downloads/stk11xx-2.1.0/stk11xx-v4l.o
/home/sun/Downloads/stk11xx-2.1.0/stk11xx-v4l.c:43:28: fatal error: linux/videodev.h: No such file or directory
compilation terminated.
make[2]: *** [/home/sun/Downloads/stk11xx-2.1.0/stk11xx-v4l.o] Error 1
make[1]: *** [_module_/home/sun/Downloads/stk11xx-2.1.0] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.40.3-0.fc15.i686'
make: *** [driver] Error 2
stk11xx-2.1.0]#
有人能告诉我现在该如何解决这个问题吗?我被屏蔽了。更多详细信息请访问SourceForge 论坛)。
答案1
您在步骤 4 中收到的错误消息表明编译器无法videodev.h
在您的系统上找到该文件。该文件videodev.h
随内核源代码一起提供(在我的系统上是这样的linux-2.6.37.3/include/kernel/videodev.h
,并且它应该在任何内核源代码版本上位于类似的位置)。当您安装内核头文件时,该文件将被安装到/usr/include/linux/videodev.h
- 而这正是您缺少的。
因此,(1)安装内核开发Fedora 提供的 RPM 或(2)您可能必须下载适当的内核版本(请参阅uname -r
但看起来您有 linux-2.6.40.3)源代码,然后安装内核头文件(阅读内核源代码README
然后运行make headers_install
- 您可能必须配置内核源,但您可能不必make
和make install
内核。您的目标是获取videodev.h
内核源中的副本和任何支持头文件到磁盘上可用的位置(可能是/usr/include
和/usr/include/linux
)。
/usr/include/linux/videodev.h
如果您的磁盘上已有,请验证INCLUDE
环境变量是否指向/usr/include
。
现在仔细观察,kernel.org 的人似乎已过时videodev.h
并从版本 2.6.39.3 之前的源代码中删除它(并用videodev2.h
? 替换它 - 目前还不清楚),看起来您有 linux-2.6.40.3。我建议您获取内核源代码的旧副本并手动复制videodev.h
到/usr/include/linux
(或您现在拥有的任何地方videodev2.h
)。
答案2
如果仍然实际 - 放那个文件
到/usr/src/(uname -a)/include/linux
。
它对我的 Arch 和 3.9.2-1 内核有帮助
答案3
videodev.h 来自 v4l1,它在新内核的支持中发生了很大变化,即使获取该标头(现在是 v4l1-videodev.h)也无法解决您的问题。
最好从您正在编译的驱动程序中删除所有 v4l1 支持。我已经这样做了,现在它对我来说编译得很好。
大部分代码位于 stk11xx-v4l.c 中
static long v4l_stk11xx_do_ioctl(struct file *fp,
unsigned int cmd, void __user *arg)
函数。只需删除所有 case 语句,直到看到 v4l2 注释即可。
然后删除对 videodev.h 的引用