Linux系统mjpg_streamer流媒体移植摄像头驱动移植
一、mjpg-streamer移植
主机环境 :ubuntu 14.04
编译器:arm-none-linux-gnueabi-gcc
开发板:A9
移植系统:Linux3.14
摄像头:USB摄像头
1、MJPG-stream的移植需要jpeg库,所以必须先移植jpeg库,
源码下载︰Jpeg源码包:http:// www.ijg.org/files/jpegsrc.v8b.tar.gz
MJPG-streamer源码包:http://sourceforge.net/projects/mjpg-streamer/
-
jpeg库的安装
<1>解压
tar -xvf jpegsrc.v8b.tar.gz
<2>终端上配置编译
./configure --host=arm-none-linux-gnueabi --prefix=/home/linux/workdir/fs4412-bak/camera/jpeg-install
这里的--host=交叉开发工具链前缀--prefix=编译完之后,安装的路径
<3>编译
make
<4>安装
make install
安装成功之后,在--prefix参数指定的路径下,可以看到如下内容:
2、mjpg-stramer源码移植
<1>解压
tar -xvf mjpg-streamer-r63.tar.gz
<2>修改mjpg-streamer-r63源码顶层目录下的Makefile
<2>修改对应插件下的Makefile
这里只使用了input_uvc和output_http两个插件,所以只需要修改这两个插件的Makefile。plugins/input_uvc/Makefile修改如下:
plugins/output_http/Makefile修改如下:
<3>编译
make的时候,会提示fatal error: linux/videodev.h: No such file or directory这样的错误,找到对
应的文件,这个文件中包含的#include<linux/videodev.h>修改成#include <linux/videodev2.h>就可以了。
编译成功之后,效果如下:
此时,已经完成了mjpeg-stramer源码的编译,接下来我们把它拷贝到开发板上的文件系统中,最终在开发板上运行我们的应用程序。笔者这里开发板启动的时候,是通过NFS的方式挂载文件系统的。我们在开发板的文件系统中,新建一个camera目录,拷贝以下文件到camera目录下:
start.sh是运行应用程序的脚步文件
www目录存放的是一个网页,这个网页可以通过网络的方式在浏览器上显示
input uvc.so插件库,完成的是从摄像头中采集数据
ouput http.so插件库,完成的是将摄像头采集的数据通过http协议传输到客户端
mjpg stremaer就是我们需要运行的应用程序,它在运行的时候,会加载input_uvc.so和ouput_ http.so
同时我们在将jpeg库的lib文件夹中的库文件拷贝到我们挂载的文件系统中。(拷贝到lib文件夹下)
在A9平台,摄像头采集出来的数据是YUYV格式的原始数据,是无法直接显示的,所以需要将YUYV格式转换成jpeg格式。这里我们只需要修改start.sh,告诉应用程序需要将YUYV格式数据转换成jpeg格式就可以了。修改如下:
二、USB摄像头驱动的移植(Linux3.14系统下操作)
1、修改设备树文件
$ vim arch/arm/boot/dts/exynos4412-fs4412.dts
添加如下内容:(末尾添加,大括号内)
usbphy: usbphy@125B0000 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "samsung,exynos4x12-usb2phy";
reg = <0x125B0000 0x100>;
ranges;
clocks = <&clock 2>, <&clock 305>;
clock-names = "xusbxti", "otg";
usbphy-sys {
reg = <0x10020704 0x8 0x1001021c 0x4>;
};
};
ehci@12580000 {
status = "okay";
usbphy = <&usbphy>;
};
usb3503@08 {
compatible = "smsc,usb3503";
reg = <0x08 0x4>;
connect-gpios = <&gpm3 3 1>;
intn-gpios = <&gpx2 3 1>;
reset-gpios = <&gpm2 4 1>;
initial-mode = <1>;
};
-
配置内核
make ARCH=arm menuconfig
USB配置项
Device Drivers --->
[*] USB support --->
<*> EHCI HCD (USB 2.0) support
<*> EHCI support for Samsung S5P/EXYNOS SoC Series
<*> USB Mass Storage support
<*> USB3503 HSIC to USB20 Driver
USB Physical Layer drivers --->
<*> Samsung USB 2.0 PHY controller Driver
SCSI device support --->
<*> SCSI device support
<*> SCSI disk support
<*> SCSI generic support
USB摄像头配置项
Device Drivers --->
<*>Multimedia support --->
<*>cameras/video grabbers support
[*]Media USB Adapters --->
<*>USB Video Class (uvC)
[*]uvC input events device support
3、编译内核和设备树
make ARCH=arm CROSS_COMPILE=arm-linux- uImage
make ARCH=arm CROSS_COMPILE=arm-linux- dtbs
4、将生成的内核文件和设备树文件拷贝到开发板上运行 (笔者通过tftp文件传输协议挂载)
cp arch/arm/boot/uImage ../../tftpboot/
cp arch/arm/boot/dts/exynos4412-fs4412.dtb ../../tftpboot/
5、在开发板上运行start.ch文件
6、ubuntu上通过开发板的IP地址访问视频文件
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgjahbe
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13