关于项目移动物体监控与报警系统,进行了全程资料整理与流程记录,仅供日后回顾与复习用。
1.声音报警子系统
1.1 OSS/ALSA声卡驱动内核配置
a. OSS、ALSA、ALSA-OSS封装架构介绍
b. 内核配置与运行
配置、编译、下载、运行,然后在SecureCRT窗口检查开发板上声卡驱动是否完整(ls /dev/dsp、ls /dev/mixer);若无,则将驱动复制到rootfs的lib子目录,通过insmod命令安装(snd-soc-wm8960.ko,snd-soc-mini210-wm8960.ko)
1.2 Madplay嵌入式播放器移植
a.分别解压三个lib依赖库文件压缩包
b.运行脚本配置文件命令,生成Makefile
./configure --host=arm-liunx ==prefix=${PWD}/_install
c.编译、复制.so.a库文件到根文件系统下
make、make install
d.解压madplay包,配置、编译,拷贝应用程序到/rootfs/
make
e.若madplay缺少其他库,将库拷贝至rootfs下子目录
2.摄像头子系统
2.1 摄像头驱动内核配置
a. 硬件选择
USB摄像头,内置芯片ZC30系列
b. 内核配置
选择万能摄像头驱动、ZC30对应的驱动程序
c. 编译下载
make uImage ARCH=arm CROSS_COMPILE=arm-linux
d. 驱动测试
camera
2.2 V4L2编程接口学习
a. 驱动架构
硬件层:摄像头->
内核空间:摄像头驱动->V4L2接口规范->
用户空间:图像采集应用程序
b. 设计架构图
取出帧缓冲(出队列)-> 读取帧缓冲中的数据 -> 放回帧缓冲入队列
c. V4L2编程举例
1)打开摄像头设备文件
fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);//非阻塞方式
2)获取驱动信息
ioctl(fd,VIDIOC_QUERYCAP,&cap);
3)设置图像格式
ioctl (fd, VIDIOC_S_FMT, &fmt);
4)申请帧缓冲
ioctl (fd, VIDIOC_REQBUFS, &req);
5)获取帧缓冲地址、长度信息
ioctl (fd, VIDIOC_QUERYBUF, &buf);
6)使用mmap把内核空间的帧缓冲映射到用户空间
mmap (NULL , buf.length, PROT_READ | PROT_WRITE , MAP_SHARED , fd, buf.m.offset);
7)将申请的帧缓冲入队列
ioctl (fd, VIDIOC_QBUF, &buf);
8)开始采集图像
ioctl (fd, VIDIOC_STREAMON, &type);
9)取出帧缓冲(出队)
ioctl (fd, VIDIOC_DQBUF, &buf);
10)访问帧缓冲数据
write(file_fd,buffers[buf.index].start,buffers[buf.index].length);
11)帧缓冲重新入队
ioctl(fd, VIDIOC_QBUF, &buf);
3.移动图像监控主系统
3.1原理
通过获取的摄像头图像,比较前后每一帧图像数据,从而实现移动物体监控
3.2实现
a. 移植移动监控软件motion
1)下载开源包并解压,编译,拷贝可执行文件到根文件系统
./configure
make
make install
2)修改配置文件motion_dist_conf
更改驱动设备文件、图像存储个数、图像大小、像素变化门限值、框出移动物体、图像存储目录
3)运行 motion -c /motion-dist.conf即可捕获到移动物体
b. 关联报警功能
在motion_dist_conf配置文件中,配置项on_motion_detected后面加上"madplay alarm.mp3"
c. ffmpeg抓取视频
解压、编译、安装、拷贝库文件
修改配置文件motion_dist_conf,添加--ffmpeg配置选项
重新编译,运行motion -c /motion-dist.conf
4.嵌入式web服务器移植
4.1BOA嵌入式服务器的移植
a.下载boa服务器,解压,进入src目录
b.执行./configure生成Makefile,修改Makefile(arm-linux-gcc),并修改源代码
c.编译,拷贝可执行文件boa到根文件系统
d.配置boa
修改boa.conf,指明开发板网页路径等
4.2CGI网页控制
a. 控制流程
1)用户浏览器-->(请求连接)-->web服务器
web服务器包括:
a.供浏览器登录的网页界面程序(HTML);
b.供服务器调用的CGI程序(扩展服务器功能)
2)浏览器登录web服务器指定的网页界面,给予指令-->调用.cgi程序进行控制
3)获取的返回结果->web服务器发送到网络中,用户即可通过浏览器远程获取数据信息。
b. CGIC库移植
1)解压CGIC库
2)修改Makefile(不需配置)
3)编译,拷贝库文件至根文件系统
4)boa配置文件修改boa.conf (指明CGI程序路径)
c. CGIC程序设计
1)网页文件.html文件修改,跳转cgi程序
<a class="menu" href="/cam/image.cgi"> //获取图片的程序,跳转运行/CGI程序
2)cgi主程序
(1)print_file(cgiOut,"../top.html"); //加头,将top.html内容打印到cgiOut
(2)total = list_pic("/mnt/sd","jpg"); //将.jpg图片文件加入显示列表
(3)if (cgiFormSubmitClicked("gopage") == cgiFormSuccess) //处理用户的选择请求
(4)show_pic(start,end,total); //显示图片
(5)show_select_form(total); //实现下拉框
(6)print_file(cgiOut,"../bottom.html"); //加尾,将bottom.html内容打印到cgiOut
3)编译生成.cgi文件
arm-linux-gcc -L CGIC绝对路径 -lcgic -l CGIC 绝对路径 C语言源文件 -o cgi后缀目标文件
4)获取视频的程序开发
(1)<a class="menu" href="/cam/movie.cgi"> //获取视频的程序,跳转运行.cgi程序
(2)fprintf(cgiOut, "<embed src = \" / sd / % s\" autostart = true loop = true width = \"640\" height =\"480\">< / embed>","01-19700101000405.avi");
【注:以上内容,仅供本人日后复习与回顾用】