arm开发板6410/2440上mjpg-streamer网络视频服务器移植
摄像头移植
一、环境
主机环境 :ubuntu 10.10 目标板 :FS-S5PC100
主机工具链 :gcc-4.4.5 交叉工具链 :arm-unknown-linux-gnueabi-gcc
摄像头 :ZC301
注意事项:
自己制作文件系时,需要将交叉编译工具链中的库文件拷贝到文件系统中。
2 调试时使用nfs挂载,调试完成后,将zImage和yaffs文件系统(yaffs可读写)烧入开发板。
二、移植过程
1、配置内核使内核支持芯片为ZC301的摄像头
Make menuconfig
Device Drivers --->
<*> Multimedia support --->
<*> Video For Linux
[*] Enable Video For Linux API 1 (DEPRECATED) (NEW)
[*] Video capture adapters (NEW) --->
[*] V4L USB devices (NEW) --->
<*> USB Video Class (UVC)
[*] UVC input events device support (NEW)
<*> USB ZC0301[P] webcam support (DEPRECATED)
2、重新编译内核 make zImage
3、mjpg-streamer的移植
关于mjpg-streamer的资料可以在下面这个网址查看:http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page
mjpg-streamer的移植需要jpeg的库,所以我们先移植jpeg的库
(1)jpeg库的移植
1)jpeg源码包通过下面这个网址下载 http://download.csdn.net/detail/colwer/4531343
2)解压源码包在/home/linux/ 目录下解压: tar xvf jpegsrc.v8b.tar.gz
3)配置源码,在/home/linux/目录下创建jpeg目录mkdir jpeg
cd jpeg-8b
执行 ./configure --prefix=/home/linux/jpeg --host=arm-unknwn-linux-gnueabi
4)编译 make
5)安装 make install
6)拷贝库到文件系统中 cp /home/linux/jpeg/lib/libjpeg.so.8 /source/rootfs/lib
(2)mjpg-streamer的移植
1)mjpg-stream源码包通过下面这个网址下载 http://download.csdn.net/detail/colwer/4531434
2)解压源码 tar xvf mjpg-streamer-r63.tar.gz
3)修改源码 cd mjpg-streamer-r63
修改顶层makefile及plugins目录中的各级makefile,将所有
CC=gcc
修改为 CC=arm-unknown-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)将mjpeg可执行文件拷贝到文件系统的/bin目录下 cp mjpg-streamer /source/rootfs/bin
在文件系统中创建mjpg目录,将所有的动态库拷贝到该目录下
mkdir /source/rootfs/mjpg
cp *.so /source/rootfs/mjpg {6个so文件}
将mjpeg_streamer-r63目录下的/www目录拷贝到文件系统中
cp /www/ -a /source/rootfs/ -rf
4 运行
在WINDOWS下 运行viewer.exe或运行解压文件中的www目录下的所有文件复制到你当前的BOA服务器指定的目录下。
同时要将www目录下的cambozla.jar bodybg.gif ,favicon.ico, favicon.png, sidebarbg.gif拷贝到你的BOA服务器下。
打开开开发板将boa服务器运行起来
./etc/boa/boa &
输入下面一行命令:
./bin/mjpg_streamer -i "/mjpg/input_uvc.so -d /dev/video0" -o "/mjpg/output_http.so -w /www/ "
在linux系统的浏览器中,输入如下地址:
http://192.168.1.200:8080
显示界面如下图所示:
5 拍照功能的实现
由于mjpg_stream中output-file.so能实现连续拍照的功能,不能实现单拍或连拍几张的功能所以需要对output_file原码进行修改。
# cd mjpg-streamer-rc63/plugins/output_file
# vim output_file.c
在96行 函数 void *worker_thread(void *arg) 体中加入以下代码:
char buf[10]; //
int flags = 0; //拍照标志,1:表示11张照片,2:表示1张照片
int fd_com = 0; //打开管道的文件描述符
stop_num = 0; //拍照计数
if ( access(“/tmp/webcom”,F_OK) < 0 ) //创建有名管道用于接收拍照命令
{
if ( mkfifo(“/tmp/webcom”,0666 ) < 0)
{
Printf(“ photo fifo create failed\n”);
}
}
fd_com = open (“/tmp/webcom”,O_RDONLY,0666);
if (fd < 0)
{
perror (“open the file webcom error”);
}
在while( ok >= 0 && !pglobal->stop){ 后加入
if (flags == 0)
{
while(1)
{
reade(fd_com,buf,sizeof(buf));
if (strncmp(buf,”danger”,6) == 0) //拍11张照片
{
flags = 1;
bzero(buf,sizeof(buf));
break;
}
if (strncmp(buf,”one”,3) == 0) //拍1张照片
{
flags = 2;
bzero(buf,sizeof(buf));
break;
}
}
}
在if (delay > 0){
usleep(1000*delay);
}后加入
stop_num++
if (flags == 1) //判断拍照的数量
{
if ( stop_num > 9)
{
stop_num = 0;
flsgs = 0;
}
}
else if (flags == 2)
{
stop_num = 0;
flags = 0;
}
所以只要向有名管道/tmp/webcom写入danger就能连拍11张照片,写入one就拍一张照片。
注:拍照功能实现:
./bin/mjpg_streamer –i “/mjpeg/input_uvc.so –d /dev/video0” -o “/mjpeg/output_file.so –f /pice -d 15000 ” & echo danger > /dev/video0
arm开发板6410/2440上mjpg-streamer网络视频服务器移植的更多相关文章
- iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板
本文转自迅为开发板:http://www.topeetboard.com 在前面实战教程中,移植了“串口文件传输工具”,整个移植过程是比较简单的,而且我 们没有做任何协议方面的了解,只是“配置”+“编 ...
- 使用arm开发板搭建无线mesh网络(二)
上篇博文介绍了无线mesh网络和adhoc网络的区别,这篇文章将介绍无线mesh网络的骨干网节点的组建过程.首先需要介绍下骨干网节点的设计方案:每个骨干网节点都是由一块友善之臂的tiny6410 ar ...
- 使用arm开发板搭建无线mesh网络(一)
由于项目的需要,老板让我使用arm开发板(友善之臂的tiny6410)搭建无线mesh网络.一般而言,无线自组织网络的网络设备都是由用户的终端设备来充当,这些终端设备既要处理用户的应用数据,比如娱乐, ...
- 关于ARM开发板与PC主机的网络设置问题
直观来讲,ARM开发板多数情况下会有条网线与主机相连,所以最重要的一步是保证PC主机与ARM开发板能互通. 互通的意思进一步来讲就是互相能ping通.也就是说在瘟都死的dos下(假设主机是瘟都死系统) ...
- ARM开发板挂载虚拟机 nfs目录
ARM开发板做相关开发,为了调试方便,常把开发板mnt目录挂载到虚拟机nfs共享目录上,这样调试程序时候就不用把程序转到开发板上再运行,方便很多.要挂载nfs共享目录,需要安装必要的组件支持. 1.虚 ...
- 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...
- Windows10、ARM开发板、VMware虚拟机同时连接Internet
前段时间有人遇到一些网络连接问题,让我帮忙处理,他想让ARM开发板连接外网,可以连接网络数据库,同时保证自己的电脑可以上网. 本来说直接可以连接一个路由器,分配一个内网IP给ARM就可以了,但是当时那 ...
- ubuntu 交叉编译qt 5.7 程序到 arm 开发板
ubuntu 交叉编译qt 5.7 程序到 arm 开发板平台1 ubuntu 12.042 arm-linux-gcc 4.5.13 QT 5.74 开发板210 armcortex-A8 一 概述 ...
- Arm开发板+Qt学习之路
从2015.11.13日开始接触arm开发板,开始学习Qt,到现在已经四个月零17天了,从一个拿到开发板一无所知的小白,到现在能够在开发板上进行开发,有付出有收获. 之前一直没有时间将这个过程中的一些 ...
随机推荐
- 查看SELinux状态
查看SELinux状态:1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 2.getenforce ##也可以用这个命令检查 关闭S ...
- 多校hdu5726 线段树+预处理
第一问是没有修改的线段树,第二问暴力预处理,因为gcd的结果不会很多 在预处理阶段需要把每个区间的gcd相等的数量储存起来(用map容器),在一个序列例如:12467,枚举左区间L直到n此处时间为O( ...
- java 命令行
javac 编译 linux平台下:javac -cp ./hadoop-common-2.7.1.jar:./hadoop-mapreduce-client-core-2.7.4.jar: Word ...
- Centos7 docker容器 搭建
Dockerfile 文件如下: # # MAINTAINER Carson,C.J.Zeong <zcy@nicescale.com> # DOCKER-VERSION # # Dock ...
- js组合模式
组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 透明方式,也就是说在Commponent中声明所有用来管理子 ...
- js适配器模式
适配器模式,将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范 ...
- hibernate学习(1)
对象的持久化 狭义的理解,“持久化”仅仅指把对象永久保存到数据库中 广义的理解,“持久化”包括和数据库相关的各种操作 -保存:把对象永久保存到数据库中 -更新:更新数据库中对象的状态 -删除:从数据库 ...
- 【疯了C#】神奇的换肤(一)
之前看网上有换肤控件IrisSkin2的介绍,感觉很神奇,今天亲自做下试验,C#越来越有趣了,是Labview无法比拟的. 前期准备工作如下:下载后IrisSkin2.dll及匹配的皮肤. 其中ssk ...
- uva 10453 dp/LCS变形
https://vjudge.net/problem/UVA-10453 给出一个字符串,问最少添加几个字符使其变为回文串,并输出任意一种答案.就是一个类似于LCS的题目,而且简化了一下,只会出现三种 ...
- 奔跑吧,OpenStack现场分享:超融合架构如何抹平物理硬件差异?
转自:https://www.ustack.com/blog/moping/ “通过引入OpenStack这一中间层,实现了云平台统一的管理调度支配向上交付,解决了业务的灵活性问题.但是在抹平下层物理 ...