最近在搞中星微摄像头,想在linux下使用usb摄像头。
但是网上看的uvc驱动是从linux2.6.27以后才支持的,以前都是单独的摄像头驱动。
而我用的是linux2.6.21,在multimedia devices居然有z0301驱动。
我使用了两款中星微摄像头
vendor id product id 分别为
0ac8 301b
0ac8 3580
在linux如果现在运行cat /proc/kmsg | grep usb
居然识别了0ac8:301b,提示No supported sensor,查看设备文件没有/dev/video0,后来才知道z0301只支持两种传感器。
网上下了gspca万能驱动,编译下载后,cat /proc/kmsg | grep usb。发现支持了0ac8:301b,有了/dev/video0。
通过servfox和spcaview检验摄像头没有问题。
用camtest测试摄像头不行。我猜测可能万能驱动不是用的v4l2架构。
但是另外一款中星微电子0ac8:3580用不了,没有办法只有移植uvcdriver驱动。
我下了linux2.6.28的代码,重点将drivers/media/uvc的代码移植过去。
另外将include/media文件修改了一下,选择uvcdriver为Module。
make modules。make zimage。(由于修改了.h文件所以导致kernel编译不了,用以前的zimage就可以了,影响不大)
发现生成了模块,但是zimage生成不了。
不管那么多,直接insmod uvcdriver.ko,提示undefined symbols
依次加载下面的模块。居然能够使用摄像头了。
insmod v4l1-compat.ko
insmod v4l2-common.ko
insmod videodev.ko
insmod compat_ioctl32.ko
insmod uvcvideo.ko