Rico Board是基于TI AM437x的一款小型学习板,提供的丰富的接口以及资源,能够实现很多有趣的idea,从本周起,开始总共四期的实验教程,帮助玩家们快速上手Rico Board在嵌入式上面的应用。

Lab 1 是使用Rico Board实现网络摄像头的应用。



前言


这里我们采用的方案是使用USB摄像头采集图像,然后通过网络在电脑的浏览器或客户端上显示。如果要实现这么一个应用,软件由这么几个部分组成,首先需要的是内核对USB的驱动,然后是采集,视频传输服务程序,如果使用客户端还需要电脑上的客户端程序。早在Linux Kernel版本2.4的时代,就有一个著名的SPCA5xx系列驱动,它是的起因是由一个法国医生由于在Linux上面找不到USB摄像头的驱动而自己开发的一个项目,之后这个项目支持的摄像头越来越多,如今该驱动已经被继承进了Linux Kernel主分支中,项目也施法最终版后关闭完结,但大家仍然可以访问http://mxhaard.free.fr/来下载改项目的源代码。关于这个法国医生的相关故事可以阅读这里

但是如今内核版本已经发展到了3.1x,同时原来的V4L1也进化到了V4L2,因此改项目中包含的servfox和spcaview这对C/S结构的程序已经不能用了,当年的Jpeg、Mpeg编码也发展到了如今的H.264,H.265,另外现在还有更通用的UVC(USB Video Camera)架构的摄像头驱动标准,基于的软件也变为了UVC驱动+mjpg-streamer实现。当然内核版本是2.4或2.6的系统还是可以使用SPCA5xx+servfox+spcaview的软件来实现webcam应用的。



开始移植




UVC驱动


配置内核编译选项

1
make

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

搜索找到UVC选项,选择UVC驱动

Device
Drivers  --->
         <*>
Multimedia support  --->
           Media
USB Adapters  --->
                         <*>  
USB Video Class (UVC)
                             UVC
input events device support

重新编译内核。

至于其他USB摄像头驱动,SPCA5xx可以选择驱动,但由于之后使用的应用程序是V4L2,SPCA5xx接口是V4L1,所以就不再测试了。



交叉编译mjpg-streamer


下载r182版本的mjpg-streamer,(r63版本支持有问题)

http://sourceforge.net/code-snapshots/svn/m/mj/mjpg-streamer/code/mjpg-streamer-code-182.zip

1
2
3
uzip
mjpg-streamer-code-182.zip
cd

mjpg-streamer-code-182
make

CC=arm-linux-gnueabihf-gcc DESTDIR=
/home/myir/targetNFS/

install

交叉编译jpeg库


RicoBoard默认安装Matrix Gui,文件系统上已经集成了jpeg库,可以忽略这部,如果使用的是其他文件系统,还需要编译jpeg库。

下载jpeg库源码:http://www.ijg.org/files/jpegsrc.v9.tar.gz

1
2
3
4
5
tar

-zxvf jpegsrc.v9.
tar.gz
cd

jpegsrc-9a
./configure

CC=arm-linux-gnueabihf-gcc --host=arm-unknown-linux --prefix=
/home/myir/targetNFS/

--
enable-shared
--
enable-static
make
make

install

修改mjpg-streamer包含v9版本库。

1
2
3
4
5
6
vi

mjpg-streamer-code-182
/mjpg-streamer/plugins/input_uvc/Makfile
--
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall
++
CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -I
/home/myir/jpeg-9/jpeg/include
 
--
$(CC) $(CFLAGS) -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(LFLAGS)
++
$(CC) $(CFLAGS) -ljpeg -L
/home/myir/targetNFS/lib

-o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

编译mjpeg-streamer

1
make

CC=arm-linux-gnueabihf-gcc DESTDIR=
/home/myir/targetNFS/

install

实验结果


将/home/myir/targetNFS/目录中编译生成的二进制文件,全部拷贝到目标开发板的根目录。也可以直接下载使用本文附件中提供的编译好的文件,将mjpg_streamer.tar.gz文件,拷贝进开发板文件系统,执行:

1
2
tar

zxvf mjpg_streamer.
tar.gz
cd

mjpg_streamer

将lib文件夹下三个库文件input_uvc.so,output_http.so,libjpeg.so.9拷贝到/lib目录下,将www整个目录拷贝到根目录下,

然后在开发板命令行执行:

1
mjpg_streamer
-i
"/lib/input_uvc.so"

-o
"/lib/output_http.so
-w /www"

注意:

      1.如果是Matrix Gui文件系统,需要关闭Matrix或杀掉http进程,释放端口。

1
2
/etc/init.d/matrix-gui-2.0
stop
kill

$(
ps

|
grep

"http"

|
awk

'{print $1}'
)

2.执行中,如果出现

1
2
Unable
to
set

format
:
1196444237 res: 640x480
 Init
v4L2 failed !!
exit

fatal

错误,需要根据摄像头支持的格式,修改源文件,市面上大部分摄像头都是支持YUV的,而不是JPEG的

01
02
03
04
05
06
07
08
09
10
11
12
13
14
[fire@fire
mjpg-streamer]$
cd

mjpg-streamer
/plugins/input_uvc/
[fire@fire
input_uvc]$ vim input_uvc.c
 
int
input_init(input_parameter *param, int
id)
{
    char
*dev =
"/dev/video0",
*s;
    int
width = 640, height = 480, fps = -1,
format

= V4L2_PIX_FMT_MJPEG , i;
 
    /*
initialize the mutes variable */
    if(pthread_mutex_init(&cams[id].controls_mutex,
NULL) != 0) {
        IPRINT("could
not initialize mutex variable\n"
);
        exit(EXIT_FAILURE);
    }
......................

如果摄像头支持YUV的,修改format = V4L2_PIX_FMT_YUYV

以上就设置了默认的图像格式,重新把模块编译,之后就成功了!

在PC端打开浏览器,访问:http://<Rico Board IP>:8080/?action=stream,就可以看到流畅的视频流了

 






mjpg_streamer.tar.gz

498.38 KB, 下载次数: 1242

包含编译好的库文件和可执行的mjpg_steamer二进制文件

【ARM-Linux开发】TI AM437x调试WEB CAM的更多相关文章

  1. 在Ubuntu上建立Arm Linux 开发环境

    我使用的是友善2410的板子,以前都是用Fedora,现在家里的电脑被我转为Linux专用的了,装的是Ubuntu.但是嵌入式还是要玩的,在装载过程中也遇到一些小麻烦.在此记录一下,一来自己比较健忘, ...

  2. 成功移植SQLite3到ARM Linux开发板

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 ...

  3. minigui移植到arm linux开发板上无法执行

    要保证目录下有该文件 /etc/MiniGUI.cfg 复制过程使用cp –af 强制复制

  4. 应聘linux/ARM嵌入式开发岗位

    **************************************************************** 因为发在中华英才和智联招聘没有人采我所以我 在这里发布我的个人简历希望 ...

  5. 【DSP开发】【Linux开发】基于ARM+DSP进行应用开发

    针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法加速,既能够保持算 ...

  6. VS2015配置Linux开发远程调试

    # VS2015配置Linux开发远程调试 ### 简介-----------------------------vs2015支持跨平台开发 ### 软件环境--------------------- ...

  7. Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核

    Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...

  8. 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容

    [Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...

  9. 构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS

    上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来.但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Kernel Panic). 原因是找不到文件 ...

随机推荐

  1. antd 表单获取参数

    wrappedComponentRef是为了把form的值赋值到自定的对象中 <OpenCityForm wrappedComponentRef={(inst)=>{this.cityFo ...

  2. 发布新的模型类包(用于上传到 NuGet 服务器上)

    生成包文件: 1.修改了模型类之后,在项目上点击右键,在列表菜单中选择 “编辑 …….csproj”,然后将里面的三个版本号都换成新的版本号. 2.右键项目,点击“打包” 3.复制输出信息中生成的包的 ...

  3. linux系列(十二):more命令

    1.命令格式: more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file] 2.命令功能: more命令和cat的功能一样都是查看文件里的内容,但 ...

  4. redis配置数据持久化---APPEND ONLY MODE

    Redis配置数据持久化---APPEND ONLY MODE 2016年04月01日 19:05:11 阅读数:9918 Redis可以实现数据的持久化存储,即将数据保存到磁盘上. Redis的持久 ...

  5. bootstrap中tab切换的使用

    文档地址:https://v3.bootcss.com/javascript/#tabs 简单实例: <!DOCTYPE html> <html lang="en" ...

  6. mvn ssm 异常 org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'multipartResolver'

    解决方案: 添加 commons-fileupload-1.2.jar <!-- https://mvnrepository.com/artifact/commons-fileupload/co ...

  7. CF786E ALT

    题意 有一棵 \(n\) 个点的树和 \(m\) 个人,第 \(i\) 个人从 \(u_i\) 走到 \(v_i\) 现在要发宠物,要求一个人要么他自己发到宠物,要么他走的路径上的都有宠物. 求最小代 ...

  8. linux red hat下安装tomcat的过程

    linux下安装tomcat <-----------1.0----------------->:首先需要先去tomcat官网下载linux版本的tomcat的安装包;  我在官网上下载的 ...

  9. 走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven

    小李的Build之路(上) 转自: 刘欣 码农翻身 2016-07-10 摘要:手工Build的烦恼要不是为了和女朋友留在一个城市,小李肯定去北上广奋斗去了.现在他只能留在这个2.5线城市,进入这家软 ...

  10. 1.linux 基本操作和命令

    整理复习之前的linux学习笔记,正好贴出来了.   1.[root@chen ~]#    [当前登录用户@主机名  当前所在目录]# 当前用户身份     #号表示管理员root     $号表示 ...