[转]基于嵌入式Linux的B/S远程视频监控设计

基于嵌入式Linux的B/S远程视频监控设计

This is my毕业设计。题目是“基于嵌入式Linux的B/S远程视频监控设计”

==>实现的目的是:
ARM9 S3C2410上运行嵌入式Linux,外接上USB摄像头,接入以太网,在以太网上任一台PC通过浏览器即可播放摄像头采集的图像

==>软硬件平台:
华恒ARM9教学实验箱,“Host -- Target”的交叉编译开发模式:Host 为iRed Hat 9.0系统,Target为ARM9 S3C2410 + 嵌入式系统Mizi Linux .

==>要解决的主要问题分析: 
USB摄像头的选用及其驱动在嵌入式Linux系统的加载;
基于嵌入式Linux的图像采集应用程序编写;
嵌入式Linux上HTTP Server的选用及配置;
与浏览器交互的动态WEB技术的CGI程序(C语言)编写;

==>实验记录:

一、 熟识开发平台
用虚拟软件运行已装好的且已搭好交叉编译环境的PC Linux (Ret Hat 9.0 ,在command line上敲Linux的常用命令(对刚接触Linux来说,这是很新鲜的,在那黑底白字屏幕上练习cd, cp, rm, mkdir, vi…到熟练时给人一种像在黑客帝国里面电脑高手那样的感觉,Cool… ), 接好实验箱与PC的串口线,网线,打开PC Linux的minicom,运行嵌入式平台的mizi linux,学会了ifconfig,学会了tftp, 学会了mount,浏览mount到mnt目录下的PC Linux 内容,用“Host --- Target”开发模式运行了计算机界都公认的the first program:Hello world !

二、熟识开发模式
研究Hello目录下的Makefile,学会编写简单的Makefile以及看懂较大型源程序的Makefile,能看懂编译时出现的基本errors。

三、掌握驱动程序的开发框架
以“键盘-LED实验”为例子,熟悉驱动源程序的框架以及驱动程序 *.o 文件的生成过程, insmod *.o加载驱动,编写“键盘—LED”小程序,run,增强开发自己的应用程序的confidence。

四、让嵌入式Linux认出我的摄像头
可以有两种选择:Ones is采用嵌入Linux自带驱动的采用vo511芯片的WebEye摄像头;The
other is采用国产芯片中星微Zc301的摄像头,据说我们的国产Zc301芯片占目前市面上70%的份额, 现在视频聊天流行,找个USB摄像头不难,那就拿个普通的视频聊天摄像头look look,居然就是我想要的 :-) . 但其驱动都是面向Window系统的,哪能用在我的嵌入式系统上,且由于摄像头用作嵌入式Linux上不广泛,又那有人那么傻give up making money by writing drivers for windows而写嵌入式Linux的驱动而free of charge地给人用呢?皇天不负有心人,在论坛上请教达人后得知,我们中国人不肯做的事,在法国就有人做了, 在http://mxhaard.free.fr网站上  offers free download该芯片摄像头在Linux的驱动,还有一个light-edition,就是面向Embedded Linux的。自家的Zc301芯片,让外国人写上摄像头driver并share了。下载了个light-edition的包,解压,修改Makefile里的target processor为ARM9 S3C2410,以及自己的交叉编译路径,make一下就出来我要的摄像头驱动 *.o了。
在kernel目录下make menuconfig, 选上Video4Liunx,重新编译内核,跟ramdisk一起先tftp 到RAM中测试一下,insmod *.o ; lsmod ; 看到了我的驱动模块加载上去了, 接上我的摄像头,在command line里就提示我的USB Camera已regestered了。娃哈哈!

五、USB摄像头图像采集程序的编写
图像采集程序才是本Design的难点。按Video4Linux介绍,有两种方法:一种是read()直接读取,简单但速度慢; 另外一种是mmap()内存影射,稍复杂但速度快;先写一个read()方法只采集一张图片的程序吧, 有时间再用mmap()方法实现。
由于之前新编译的内核已经支持Video4Linux视频接口编程。故关键是掌握Video4Linux接口编程的一些函数。主要有如下:
1) dev = open(ope_cam ,O_ RDWR) 打开视频捕获设备;
2) ioctl (dev , VIDIOCGCAP , &vid_caps) 获取该视频设备的相关性能;
3) ioctl (dev , VIDIOCGCHAN , &vid_chnl) 获取摄像头通道的相关参数;
4) ioctl (dev , VIDIOCGFBUF , &vid_buf) 获取帧缓冲的属性;
5) ioctl (dev , VIDIOCGPICT , &vid_pi) 获取图片采集的设置;
6) ioctl (dev , VIDIOCSPICT , &vid_pic) 设置图片采集的相关参数,包括颜色深度、调色板类型、亮度、对比度等;
7) ioctl (dev , VIDIOCSWIN , &vid_win) 设置图像采集的视区参数;
8) fwrite (m_buf ,1 ,230400 ,p) 采集的数据存入
9) ioctl ( dev , VIDIOCMCAPTURE , &vid_mmap)开始俘获一帧;
编好,调试成功并采集了一张图片保存下来,暗爽,再把它放在windows上打开My first采集的图片,照的是自己,虽模糊且不像人样似的,但绝对不会是Ghost,调试一番,图片很清晰,照的还是myseof, 明显more handsome了,娃哈哈!
然后简单地加上定时采集,不断覆盖更新,就成了源源不断的“视频”图像了 

六、WEB SERVER配置 + CGI Program编写 + 简单网页制作
嵌入式平台上选用小型HTTP Server就行了,在此选用boa,Open sources,配置简单。主要配置好boa.conf、mime.types文件就行。
由于是在Embedded Linux平台上,CGI程序的编写该选用C语言,主要是接收Browser发送的request(用GET的方法),解出URL编码,调用嵌入式系统上的相应应用程序,然后将执行结果return到浏览器端。
网页的制作,关键是实现图片的定时更新,暂时用的方法是整个网页的刷新,也已经实现了所要的目的效果,但更理想的I think is,在browser端用JavaScrip编写图片定时更新脚本,但暂时没弄出来,有待改进。

七、效果演示 
把嵌入式平台的IP改成与局域网相同的网段,接入交换机,在局域网中的任一台PC用IE即可“播放”嵌入式平台外接USB Camera采集的图像。

==>后话:
本设计还有很多技术details没有探讨,也有很多还可以improve的地方,欢迎交流!
loading...
 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值