最近开始准备搞摄像头了,按装spca5xx时,出现没有jiffies_to_msec 符号的警告,别看这个只是一个警告,
但在内核的驱动里面出现,就有可能导致驱动加载不上的错误哦。
看INSTALL上说kernel 的高版本没有警告, 再加上前一段时间学驱动程序的编写,说最好用自己的内核,
不要用发行版的内核。
所以准备把内核升级了,版本为2.6.18.4
升级过程中,参考了下面的文档
Linux-2.4.20-8升级内核到Linux-2.6.13实战:
首先,在编译之前,要做以下几个准备工作:
1、 下载module-init-tools-3.1.tar.bz2,
下载地址:
下载完后进行如下操作:
tar –zxvf module-init-tools-3.1.tar.bz2
./configure --prefix=/
make moveold
make all install
./generate-modprobe.conf /etc/modprobe.conf
2、 下载mkinitrd-4.1.18-2.i386.rpm,
下载地址:
3、 下载lvm2-2.00.25-1.01.i386.rpm和device-mapper-1.00.19-2.i386.rpm
下载地址:
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm
4、 删除旧的软件,方法如下
rpm –e (旧的软件名,这里是软件名,不是软件包,如mkinitrd-4.1.18-2) --nodeps
接下来两步和上面一样,把旧的lvm和device-mapper删掉,记住,这里要加――nodeps参数,不然是删不掉的[*浏览了很多的资料,发现都是没有提及这一步的,都说使用――nodeps强制安装就可以,可我装的时候却出现了错误,所以大家可以先省略这一步,先做第五步,出了问题再做一下第4步]
5、 如果已执行了第四步,直接使用rpm –ivh package-name
如果未执行第四步,使用rpm –ivh package-name ――nodeps
6、OK,编译前的准备工作做好了,如果不更新以上几个包在make install时会提示以下错误:mkinitrd failed
make[1]: *** [install] Error 1
make: *** [install] Error 2
7、现在可以编译了吧!!NO,还得去下内核呢!
8、把下载的tar包CP到/usr/src目录下,并使用tar –zxvf linux-2.6.13.tar.gz
9、cd /usr/src/linux-2.6.13
10、好了,万事俱备!!哦,对了,忘了提醒一点了,请确保你有足够的磁盘空间,具体要求多少空间我不知道,记得大一点的好,有一次编译到最后就提示空间不足
11、OK,接下来就正式开始make了:
#make menuconfig
使用这个命令后会打开一个编译对话框,以后的事就你自己慢慢去发挥吧,我也是新手,对那里面的东西也不是很熟悉,大家可以到网上去找一下关于那方面的资料,但是针对于在vmware5.0中做的朋友来说,以下几点是要特别注意的
A:Device Drivers --->SCSI device support ---><*> SCSI disk support
Device Drivers --->SCSI device support --->SCSI low-level drivers --->
<*> BusLogic SCSI support,如果这几项不选,等编译完成后重启后会发现系统会提示:No module BusLogic found for kernel的错误,然后死掉
B:Device Drivers ---> Fusion MPT device support --->
Fusion MPT (base + ScsiHost) drivers和 Fusion MPT misc device (ioctl) driver(这个要不要,不确定)
注意:只能选模块方式,直接编译进内核,就出错,不知道为什么,这个浪费了我好多时间才找到,编译了几十次的成果。
出错信息如下:No module mptbase found for kernel vmware(*我使用默认方式并没有出现这个提示,这一段是一个网友所述,不知为何!)
C:Device Drivers ---> USB support ---><*> USB Mass Storage support
Device Drivers ---> Networking support --->Ethernet (10 or 100Mbit) ---> <*> AMD PCnet32 PCI support(*这两段也是从那位网友那CP来的,不知这个USB不设会不会启不来,第二段是设置网卡的,VMWARE是使用AMD PCnet32的)
D:还有一点切记,把所有的有关ext3(Ext3 journalling file system support, Ext3 Security Labels和JBD (ext3) debugging support等等)的选项都编译到内核里面去,记住,是内核<*>不是模块,否则重启系统后会提示:Mount: error 19 mounting ext3
E:差不多了,还有其它的一些什么自己看看吧,或者上网搜一下,介绍一个不错的网站。
12、 make
make modules_install //如果没有模块就不需要。
13、make install //update grub
14、OK,这样就行了,init 6你的系统,会发现在重启后,在引导的时候会有两个不同内核的系统可选,我们当然要选刚编译的系统啦。
重启发现usbfs 错误
fs type usbdevfs not supported by kernel usbdevfs 这个名字已经改了 改为usbfs
于是 打开/etc/rc/rc.sysinit 找到这里:
if [ $usb = 1 -a ! -f /proc/bus/usb/devices ];
then action $"Mounting USB filesystem: " mount -t usbdevfs usbdevfs /proc/bus/usb
fi
修改其中的 usbdevfs 为 usbfs 。即可解决。
哪知在2.6.18.4下面编译驱动, 错误有7,8个,好像是 videodev.h中的数据结构名字变了, 结果webcamera也没
搞成功。
重新进到2.6.5下面,自己分析了一下,出警告的原因, 对照内核源码,改了一句代码,把
jiffies_to_msec(x) 换成x*10 ,make 顺利通过。
插上摄像头,终于成功,
[root@hujunlinux camera]#
spcaview
Spcaview version: 1.1.7 date: 06:11:2006 (C) mxhaard@magic.fr
Initializing SDL.
SDL initialized.
bpp 3 format 15
Using video device /dev/video0.
Initializing v4l.
**************** PROBING CAMERA *********************
Camera found: Z-star Vimicro zc0301p
Bridge found: ZC301-2
Bridge find ZC301-2 number 13
StreamId: JPEG Camera
wrong spca5xx device
Bridge find ZC301-2 number 13
Available Resolutions width 640 heigth 480 native
Available Resolutions width 352 heigth 288 decoded
Available Resolutions width 320 heigth 240 native *
Available Resolutions width 176 heigth 144 decoded
*****************************************************
grabbing method default MMAP asked
VIDIOCGMBUF size 2457616 frames 2 offets[0]=0 offsets[1]=1228808
VIDIOCGPICT
brightnes=32768 hue=0 color=0 contrast=32768 whiteness=0
depth=12 palette=4
VIDIOCSPICT
brightness=32768 hue=0 color=0 contrast=32768 whiteness=0
depth=24 palette=15
Used 18994ms for 472 images => 40ms/image 24fps.
Quiting SDL.
Decoded frames:472 Average decode time: 3.000000
unmapping
closing
closed
Destroy Picture thread ...
Quiting....
看到了自己的头像。
感觉linux就是好阿, 自己懂得越多,系统就用得越顺, 有什么问题,找出问题的原因, 一定能够解决!
Linux video capture interface: v1.00
Jan 20 15:04:33 hujunLinux kernel: /public/camera/spca5xx-20060501/drivers/usb/spca5xx.c: USB SPCA5XX camera found. Type Vimicro Zc301P 0x301b
Jan 20 15:04:33 hujunLinux kernel: /public/camera/spca5xx-20060501/drivers/usb/spca5xx.c: [spca5xx_probe:5482] Camera type JPEG
Jan 20 15:04:33 hujunLinux kernel: EXT3 FS on hdb2, internal journal
Jan 20 15:04:33 hujunLinux kernel: device-mapper: 4.1.0-ioctl (2003-12-10) initialised: dm@uk.sistina.com
Jan 20 15:04:33 hujunLinux kernel: /public/camera/spca5xx-20060501/drivers/usb/zc3xx.h: [zc3xx_config:558] Find Sensor HV7131R(c)
后记: 上面是用的2.6.5的内核 加载spca5xx.o驱动的
后来又在2.6.18.4的内核加载gspca.ko驱动成功用摄像头看到了自己哦, 关键是要配置内核,
刚开始加载驱动也是不成功,说是
Jan 23 21:01:18 hujunLinux kernel: usb 3-1: new full speed USB device using ohci_hcd and address 2
Jan 23 21:01:18 hujunLinux kernel: usb 3-1: configuration #1 chosen from 1 choice
Jan 23 21:01:25 hujunLinux kernel: gspca: Unknown symbol video_devdata
Jan 23 21:01:25 hujunLinux kernel: gspca: Unknown symbol video_unregister_device
Jan 23 21:01:25 hujunLinux kernel: gspca: Unknown symbol video_device_alloc
Jan 23 21:01:25 hujunLinux kernel: gspca: Unknown symbol video_register_device
Jan 23 21:01:25 hujunLinux kernel: gspca: Unknown symbol video_usercopy
Jan 23 21:01:25 hujunLinux kernel: gspca: Unknown symbol video_device_release
后来把ov511, zc0301 usb camera作为了模块,编译内核, 在那个网站上下载针对
2.6.11的摄像头驱动gspcav1-20070110.tar.gz, 成功了, 而且图像更清晰。
Linux video capture interface: v2.00
26611 Jan 23 22:31:36 hujunLinux kernel: zc0301: V4L2 driver for ZC0301[P] Image Processor
and Control Chip v1:1.05
26612 Jan 23 22:31:36 hujunLinux kernel: usb 3-1: ZC0301[P] Image Processor and Control Ch
ip detected (vid/pid 0x0AC8/0x301B)
阅读(5166) | 评论(4) | 转发(0) |