嵌入式课程设计报告一、课程设计目1.1 掌握linux开发环境搭建;1.2巩固嵌入式交叉编译开发思想;1.3掌握嵌入式GUI软件设计技。
,.二、课程设计规定输入信号为 1 路AV 视频信号,规定系统能对 1 路输入信号进行实时采集,数字化解决,压缩,存储,要保证一定录像质量. 依照设计题目规定,选取拟定ARM 芯片型号,视频采集芯片型号,完毕系统硬件设计和程序设计.三、课程设计内容设计原理ARM10 系列微解决器为低功耗32 位RISC 解决器,最合用于对价位和功耗要求较高消费类应用.ARM10 系列微解决器重要应用领域为:工业控制,Internet 设备,调制解调器设备,移动电话等各种多媒体和嵌入式应用.视频监控系统总体设计一方面需要对系统进行总体规划,将系统划提成几种功能模块,拟定各个模块实现办法.整个视频监控系统采用C/S 构造,从主体上分为两某些:服务器端和客户端.服务器端重要涉及S3C4510 平台上运营采集,压缩,传播程序,客户端是PC 机上运营接受,解压,回放程序.视频监控终端从摄像头捕获实时视频信息,压缩之后通过以太网传播到视频监控服务器上.视频图像采集和打包发送在服务器端完毕,图像接受解包和回放将在客户端完毕. 采集图像数据压缩打包发送接受系统硬件设计系统采用模块化设计方案,重要涉及如下几种模块:主控制器模块,储存电路模块,外围接口电路模块,电源和复位电路,S3C4510 主控器模块主控器模块是整个系统核心,采用S3C4510B 解决器.Samsung 公司S3C45 10B 是基于以太网应用系统高性价比16/32 位RISC 微控制器,内含一种由ARM 公司设计16/32 位ARM7TDMI RISC 解决器核,ARM7TDMI 为低功耗,高性能16/32 核,系统存储电路模块主控器还需某些外围存储单元如Nand Flash,和SDRAM.Nand Flash 中包括Lin ux Bootloader,系统内核,文献系统,应用程序以及环境变量和系统配备文献等;S DRAM 读写速度快,系统运营时把它作为内存单元使用.外围电路模块外围电路重要是如下几种电路,复位电路图,电源电路图以及JTAG 电路,三、课程设计设备及工具硬件:UP-NETARM2410-S嵌入式实验仪、PC机、ov511摄像头;软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMR-LINUX开发环境。
四、设计方案本次课程设计采用arm10开发平台。
该平台采用Samsung公司解决器S3C2410。
该解决器内部集成了ARM公司 ARM920T解决器核32位微控制器,资源丰富,带独立16KB指令Cache和16KB数据Cache、LCD控制器、RAM控制器、NAND 闪存控制器、3路UART、4路DMA、4路带PWMTimer、并行I/O口、8路10位ADC、Touch Screen接口、I2C接口、I2S接口、2个USB接口控制器、2路SPI,主频最高可达203MHz。
在解决器丰富资源基本上,还进行了有关配备和扩展,平台配备了16MB 16位Flash和64MB 32位SDRAM。
通过以太网控制器芯片DM9000E扩展了一种网口,此外引出了一种HOST USB接口。
通过在USB接口上外接一种带USB口摄像头,将采集到视频图像数据放入输入缓冲区中。
然后,对缓冲区中视频数据进行压缩成帧,并把每一帧图片在网页中显示出来,每秒钟刷新两次,得到一种动态视频界面,然后通过局域网访问该主机网页,得到网络视频信息。
本次课程设计重要是完毕得到视频图片及网页刷新过程。
本次设计规定在局域网环境中进行。
五、开发环境配备5.1 摄像头驱动加载在Linux下,设备驱动程序可以当作Linux内核与外部设备之间接口。
设备驱动程序向应用程序屏蔽了硬件实现了细节,使得应用程序可以像操作普通文献同样来操作外部设备,可以使用和操作文献中相似、原则系统调用接口函数来完毕对硬件设备打开、关闭、读写和I/O控制操作,而驱动程序重要任务也就是要实现这些系统调用函数。
本系统平台使用嵌入式arm-Linux系统在内核重要功能上与 Linux操作系统没本质区别。
Video4Linux(简V4L)是Linux中关于视频设备内核驱动,它为针对视频设备应用程序编程提供一系列接口函数,这些视频设备涉及现今市场上流行TV卡、视频捕获卡和USB摄像头等。
ov511驱动,2.4内核中就有,因此咱们只需重新编译内核,将下边选项都选上,然后重新烧写内核就可以了。
也就是直接静态加载。
(1)在arm linuxkernel目录下make menuconfig。
(2)一方面(*)选取Multimedia device->下Video for linux。
加载video4linux模块,为视频采集设备提供编程接口;(3)然后在usb support->目录下(*)选取support for usb和usb camera ov511 support。
这使得在内核中加入了对采用OV511接口芯片USB数字摄像头驱动支持。
(4)保存配备退出。
(5)make dep;make zImage就生成了带有ov511 驱动内核。
接下来就通过uboot将内核烧到flash里去。
这时你将摄像头插上,系统就会提示发现摄像头-ov511+,这阐明驱动正常。
:-),驱动加载就成功了。
5.2 安装jpeg库在地址ftp:///graphics/jpeg/jpegsrc.v6b.tar.gz中下载jpeg库压缩包。
# tar -zxvf jpegsrc.v6b.tar.gz //解压库文献# cd jpeg-6b# ./configure --prefix=/usr/local/jpeg6--enable-shared //生成MAKEFILE文献# make //编译安装文献#mkdir /usr/local/jpeg6#mkdir /usr/local/jpeg6/include#mkdir /usr/local/jpeg#mkdir /usr/local/jpeg/lib#mkdir /usr/local/jpeg/bin#mkdir /usr/local/jpeg/man#mkdir /usr/local/jpeg/man/man1 //建立生成安装文献目录#make install -lib /生成安装文献#make install //开始安装文献六、设计过程6.1 硬件设计系统主体设计思想是将视频前端和嵌入式Web服务器整合在一起,摄像头通过USB接口和嵌入式系统板USB HOST相连,摄像头采集来视频信号通过压缩后,通过内部总线传送到内置Web服务器,客户端采用浏览器/服务器构造(即B/S 构造),可以通过IE浏览器访问视频Web服务器,以便查看所监控视频画面,并且,顾客还可以控制平台对镜头动作或对系统进行配备控制。
网络视频采集系统是由视频监控终端和视频监控中心构成,终端使用嵌入式系统加上USB摄像头,在Linux操作系统上运营USB摄像头驱动和相应视频采集解决传播程序,得到视频监控画面,并画面通过网络传播,监控中心运营监控软件端,通过Internet浏览器来浏览终端送来监控画面,其硬件连接图如下所示:网络视频采集硬件连接图从图中可以看出,PC机某些可以直接采用IE浏览器,不需要在PC机上运营其她软件,重要设计工作是开发板端设计。
视频监控终端重要有两个某些构成,硬件某些涉及摄像头和开发平台选取;软件某些涉及系统级软件(Boot Loader,嵌入式操作系统,USB驱动程序)与顾客级软件(应用程序)。
6.2 软件设计Video4linux为应用程序提供了一系列接口函数,通过这些函数,可以执行打开、读写、关闭等基本操作。
设备驱动提供了read、write、open、close等函数详细实现,在内核这些函数都可以调用。
视频采集流程图如下所示:视频采集流程图运用V4L编写视频采集程序重要代码如下,下列代码包括采集编码程序某些核心函数。
(1)程序中定义数据构造struct _v4l_struct{int fd; // 保存打开视频文献设备描述符struct video_capability capability;struct video_picture picture;struct video_mmap mmap;struct video_mbuf mbuf;unsigned char *map; // 用于指向图像数据指针int frame_current;int frame_using[VIDEO_MAX_FRAME]; // 这两个变量用于双缓冲};typedef struct _v4l_struct v4l_device;这些数据构造都是由Video4Linux支持,它们用途如下:*video_capability包括摄像头基本信息,例如设备名称、支持最大最小辨别率、信号源信息等;*voide_picture包括设备采集图像各种属性,如brightness(亮度)、hue(色调)、contrast(对比度)、whiteness(色度)、color(深度)等;*video_mmap用于内存映射;*voido_mbuf运用mmap进行映射帧信息,事实上是输入到摄像头存储器缓冲中帧信息,涉及size(帧大小)、frames(最多支持帧数)、offsets(每帧相对基址偏移)。
程序中用到重要系统调用函数有:open("/dev/voideo0",int flags)、close(fd)、mmap(void *start,size_t length,int prot,int flags,intfd,off_t offset)、munmap(void *start,size_tlength)和ioctl(int fd,int cmd,…)。
前面提到Linux系统中把设备当作设备文献,在顾客空间可以通过原则I/O 系统调用函数操作设备文献,从而达到与设备通信交互目。
固然,在设备驱动中要提供对这些函数相应支持。
这里阐明一下ioctl(in t fd,int cmd,…)函数,它在顾客程序中用来控制I/O通道,其中,fd代表设备文献描述符,cmd代表顾客程序对设备控制命令,省略号普通是一种表达类型长度参数,也可没有。
(2)采集程序实现过程一方面打开视频设备,摄像头在系统中相应设备文献为/dev/video0,采用系统调用函数grab_fd =open ("/dev/video0",O_RDWR),grab_fd是设备打开后返回文献描述符(打开错误返回-1),后来系统调用函数就可使用它来对设备文献进行操作了。