感谢支持
我们一直在努力

在Linux2.28内核上使用摄像头

Ubuntu 8.04自带的驱动已经能够识别大多数摄像头,然而兼容性并不好,很多只能被Ekiga识别,而无法使用skype进行视频聊天。我们需要进行一些安装和调试工作来让摄像头更好的工作。


首先,查看当前的usb口连接情况:


$ lsusb
Bus 005 Device 001: ID 0000:0000 
Bus 004 Device 001: ID 0000:0000 
Bus 003 Device 002: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader
Bus 003 Device 001: ID 0000:0000 
Bus 002 Device 005: ID 0ac8:301b Z-Star Microelectronics Corp. ZC0301 WebCam
Bus 002 Device 003: ID 046d:c01f Logitech, Inc.
Bus 002 Device 001: ID 0000:0000 
Bus 001 Device 001: ID 0000:0000


从这些信息我们可以看出摄像头的Vendor_id=0ac8,Product_id=301b;还可以看出图形界面已经使用的usb端口的情况及摄像头芯片的制造商Z-Star Microelectronics Corp.说明我们的摄像头已经被系统所识别,下面让我们开始吧:
如果没有连接,重新插一下摄像头,在虚拟机上将会看到摄像头的图标,然后选择到linux中,这样在linux中就能发现USB摄像头设备。


然后安装摄像头的万能驱动,在linux2.6.18以上内核的都需要打补丁。
1. 下载gspcav1-20071224.tar.gz并解压
$ wget -c http://www.slackware.com/~alien/slackbuilds/gspcav1/build/gspcav1-20071224.tar.gz
$ tar zxvf gspcav1-20071224.tar.gz


2. 编译并安装驱动
$ cd gspcav1-20071224
$ make clean
$ make
$ sudo make install


若编译出现以下错误的解决办法
/usr/src/gspcav1-20070508/gspca_core.c:2303: 错误: ‘VIDIOCSYNC’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2354: 错误: ‘VIDIOCGFBUF’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2357: 错误: ‘sizeof’ 不能用于不完全的类型 ‘struct video_buffer’
/usr/src/gspcav1-20070508/gspca_core.c:2357: 错误: ‘sizeof’ 不能用于不完全的类型 ‘struct video_buffer’
/usr/src/gspcav1-20070508/gspca_core.c:2357: 错误: ‘sizeof’ 不能用于不完全的类型 ‘struct video_buffer’
/usr/src/gspcav1-20070508/gspca_core.c:2357: 错误: ‘sizeof’ 不能用于不完全的类型 ‘struct video_buffer’
/usr/src/gspcav1-20070508/gspca_core.c:2357: 错误: ‘sizeof’ 不能用于不完全的类型 ‘struct video_buffer’
/usr/src/gspcav1-20070508/gspca_core.c:2357: 错误: ‘sizeof’ 不能用于不完全的类型 ‘struct video_buffer’
/usr/src/gspcav1-20070508/gspca_core.c:2358: 错误: 提领指向不完全类型的指针
/usr/src/gspcav1-20070508/gspca_core.c:2361: 错误: ‘BASE_VIDIOCPRIVATE’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2393: 错误: ‘VIDIOCKEY’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2395: 错误: ‘VIDIOCCAPTURE’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2397: 错误: ‘VIDIOCSFBUF’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2399: 错误: ‘VIDIOCGTUNER’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2400: 错误: ‘VIDIOCSTUNER’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2402: 错误: ‘VIDIOCGFREQ’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2403: 错误: ‘VIDIOCSFREQ’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2405: 错误: ‘VIDIOCGAUDIO’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c:2406: 错误: ‘VIDIOCSAUDIO’ 未声明 (在此函数内第一次使用)
/usr/src/gspcav1-20070508/gspca_core.c: 在函数 ‘cd_to_spca50x’ 中:
/usr/src/gspcav1-20070508/gspca_core.c:2616: 警告: 隐式声明函数 ‘to_video_device’
/usr/src/gspcav1-20070508/gspca_core.c:2616: 警告: 初始化时将整数赋给指针,未作类型转换
/usr/src/gspcav1-20070508/gspca_core.c: 在函数 ‘spca50x_create_sysfs’ 中:
/usr/src/gspcav1-20070508/gspca_core.c:2655: 警告: 隐式声明函数 ‘video_device_create_file’
/usr/src/gspcav1-20070508/gspca_core.c:2665: 警告: 隐式声明函数 ‘video_device_remove_file’
make[2]: *** [/usr/src/gspcav1-20070508/gspca_core.o] 错误 1
make[1]: *** [_module_/usr/src/gspcav1-20070508] 错误 2
make[1]: Leaving directory `/usr/src/linux-2.6.21.2′
make: *** [default] 错误 2


解决办法,打补丁


内核:linux2.6.27.11
到这儿下载两个文件 http://www.slackware.com/~alien/slackbuilds/gspcav1/build/


gspca_kernel_2.6.27.diff
gspcav1-20071224.tar.gz
第一个文件是补丁文件,LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)用就用得上了。
第二个是驱动文件。


解压:
gspcav1-20071224.tar.gz并进入其目录,拷贝
gspca_kernel_2.6.27.diff到此目录。


当前目录运行命令:
patch -p1<gspca_kernel_2.6.27.diff
进行补丁 

3. 编辑模块加载选项文件
$ sudo gedit /etc/modprobe.d/options

为这个驱动添加一个选项(在最后添加一行)
options gspca force_rgb=1


4. 安装摄像头软件Cheese
$ sudo apt-get install cheese


启动cheese测试摄像头,如果不能得到图像:
$ lsmod|grep gspca
gspca                 643920   0
videodev             29440   2 gspca,zc0301
usbcore             146028   6 gspca,zc0301,usbhid,ehci_hcd,uhci_hcd


删除zc0301模块
$ sudo modprobe -r zc0301


添加gspca模块
$ sudo modprobe gspca


检查一下:
$ lsmod |grep gspca
gspca                 643920   0
videodev             29440   1 gspca
usbcore             146028   5 gspca,usbhid,ehci_hcd,uhci_hcd


再保险一点:
$ lsmod |grep videodev
videodev             29440   1 gspca
v4l1_compat          15492   1 videodev
v4l2_common          18304   1 videodev


一般这个时候cheese就可以获取到图像了,如果还不可以:
$ ls -l /dev/video0
crw-rw—-+ 1 root video 81, 0 2008-05-16 23:48 /dev/video0


修改权限
$ sudo chmod 777 /dev/video0
crwxrwxrwx+ 1 root video 81, 0 2008-05-16 23:48 /dev/video0

赞(0) 打赏
转载请注明出处:服务器评测 » 在Linux2.28内核上使用摄像头
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏