【usb摄像头驱动的移植】
常见的usb摄像头有两种格式:YUV,GSPCA 格式
YUV格式:不经压缩的视频GSPCA格式:视频经过了压缩
1.如果摄像头是YUV格式:
通用的移植步骤是:
make menuconfig
Device Drivers --->
<*> Multimedia support --->
[*] Cameras/video grabbers support
[*] Media USB Adapters --->
< *> USB Video Class (UVC) (NEW)
2.视频通过一张一张图片连续播放得到视频信息,每秒播放24帧图像会得到视频信息
3.添加摄像头驱动(GSPCA)
1.将摄像头插入到pc电脑,让pc电脑去识别摄像头。
将得到的详细的硬件信息是:
V(vendor)ID: 0AC8 PID:303B
2.在内核的源码中搜索VID或者PID.
grep "303b" * ./* -nR
搜索结果:drivers/media/usb/gspca/zc3xx.c:6986: {USB_DEVICE(0x0ac8, 0x303b)},
425 config USB_GSPCA_ZC3XX
426 tristate "ZC3XX USB Camera Driver"
427 depends on VIDEO_V4L2 && USB_GSPCA
说明要添加USB_GSPCA_ZC3XX VIDEO_V4L2 USB_GSPCA
3.在菜单中用/ 搜索USB_GSPCA
搜索结果:Symbol: USB_GSPCA [=n]
│
│Type : tristate
│Prompt: GSPCA based webcams
│Location:
│-> Device Drivers
│(1) -> Multimedia support (MEDIA_SUPPORT [=n])
│-> Media USB Adapters (MEDIA_USB_SUPPORT [=n])
│Defined at drivers/media/usb/gspca/Kconfig:1
│Depends on: USB [=y] && MEDIA_SUPPORT [=n] && MEDIA_USB_SUPPORT [=n]
4.根据搜索结果找到对应的驱动在菜单中选中添加:
make menuconfig
-> Device Drivers │
<*> Multimedia support --->
[*] Cameras/video grabbers support │
[*] Media USB Adapters --->
<*> GSPCA based webcams --->
< *> ZC3XX USB Camera Driver (NEW)
5.make uImage.
在开发板上:
会有如下提示信息:
[root@farsight ]# [ 33.740000] gspca_zc3xx 1-3.1:1.0: URB error -71, resubmitting
[ 33.765000] gspca_zc3xx 1-3.1:1.0: URB error -71, resubmittinggspca_zc3xx 1-3.1:1.0: URB error -71, resubmitting
[ 33.815000] gspca_zc3xx 1-3.1:1.0: URB error -71, resubmitting[ 33.820000] usb 1-3.1: USB disconnect, device number 3
[root@farsight ]# ls /dev/video0
ls: /dev/video0: No such file or directory
[root@farsight ]# [ 41.450000] usb 1-3.1: new full-speed USB device number 4 using exynos-ehci
[ 41.565000] gspca_main: gspca_zc3xx-2.14.0 probing 0ac8:303b
[ 42.555000] input: gspca_zc3xx as /devices/12580000.ehci/usb1/1-3/1-3.1/input/input2 [ 42.900000] random: nonblocking pool is initialized
驱动添加成功后产生/dev/video0:
[root@farsight ]# ls /dev/video0
/dev/video0说明驱动添加正确
【如果想查看视频信息】
查看视频的软件:mjpg_streamer
软件在运行的时候需要依赖于图片库,所以在移植视频的源码之前,先移植图片库
1.移植jpeg图片库的源码
1) 下载jpeg图片库的源码。
jpeg源码包通过下面这个网址下载
/files/jpegsrc.v8b.tar.gz
2)解压源码包
tar xvf jpegsrc.v8b.tar.gz
3)配置源码
cd jpeg-8b
./configure --host=arm-none-linux-gnueabi --prefix=/home/linux/jpeg
4)编译
make
5)安装
make install
如果make install时加上sudo, 会有以下错误信息:
libtool: install: chmod 644 /home/linux/jpeg/lib/libjpeg.a
libtool: install: arm-none-linux-gnueabi-ranlib /home/linux/jpeg/lib/libjpeg.a
./libtool: line 950: arm-none-linux-gnueabi-ranlib: command not found
解决办法:
sudo -i切换到root用户下,再make install
6)拷贝库到文件系统中
cp /home/linux/jpeg /lib/libjpeg.so.8 /rootfs/lib
2.mjpg-stream的移植
1)mjpg-stream源码包通过下面这个网址下载
/projects/mjpg-streamer/
2)解压源码
tar xvf mjpg-streamer-code-182.tar.gz
3)修改源码
cd mjpg-streamer-code-182/mjpg-streamer
make clean
修改顶层makefile及plugins目录中的各级makefile将所有
CC=gcc
修改为
CC=arm-none-linux-gnueabi-gcc
修改plugins/input_uvc/Makfile文件
修改
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC
为
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/linux/jpeg/include 添加头文件路径
修改
$(CC) $(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
为
$(CC) $(CFLAGS) -ljpeg -L /home/linux/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo 添加动态库文件所在路径
4)编译
make
5)测试
mkdir /rootfs/mjpg
cp *.so /rootfs/mjpg
cp mjpg-streamer /rootfs/bin
打开开发板运行
mjpg_streamer -i "/mjpg/input_uvc.so" -o "/mjpg/output_http.so -w /www"
打开一个网页输入下面地址就能够看到一个视频(开发板的IP为192.168.1.202):
http://192.168.1.202:8080/?action=stream
打开一个网页输入下面地址就能够看到一个静态图片:
http://192.168.1.202:8080/?action=snapshot
6)在mjpg源码下有一个www的目录,这个一个网络使用mjpg的实例,结合web 服务器(boa)可以实现一些其他相关功能。
在源码目录下有start.sh,这个脚本里有一些mjpg-stream的使用方法及说明。