基于Linux和S3C2410的嵌入式图象传输系统设计

发布者:760802csy最新更新时间:2007-06-25 来源: 微计算机信息关键字:接口  控制  闪存  缓冲 手机看文章 扫描二维码
随时随地手机看文章
1 引言

如何更好的获得监控现场的图象数据一直是棘手的一个问题,传统的方法是采用CCD摄象机获取现场的视频信息,这种方法易于实现,但成本较高。随着ARM系列处理器应用的越来越广和基于linux的嵌入式技术的迅速发展,利用linux自身带有的TCP/IP协议来实现远程监控、图象传输已成为可能。本文提出的正是一种这样的方法,利用市场上很常见的中星微系列的USB摄象头来得到现场的图象数据,利用linux内核中的Video4Linux编程接口函数采集图象,并把得到的图象通过Internet传输到上位机PC上,在PC上实现图象的保存和显示。

2 硬件系统设计原理

系统的硬件功能框图如图1所示,CPU采用的是三星公司的S3C2410。该处理器内部集成了A R M 公司A R M 9 2 0 T 处理器核的3 2 位微控制器,并带有独立的16KB的指令Cache 和16KB的数据Cache、L C D 控制器、R A M 控制器、NAND 闪存控制器、3路UART、4路DMA 、4路带PWM 的Timer、并行I/O口、8路10位ADC、触摸屏接口、I2C接口、I2S接口、2个U S B 接口控制器、2路SPI,主频最高可达203MHZ。在此基础上,平台还进行了相应的配置和扩展,配置了4MB16位的Flash和8MB32位的SDRAM,通过以太网控制芯片DM9000E扩展了一个网口。引出了一个UART接口,通过RS232可以和宿主机做串口通讯。并引出了一个HOST USB接口,通过在USB接口上外接一个带USB的摄象头将采集到的图象数据放入输入缓冲区中。对缓冲区的数据进行处理,最后通过网口发送到Internet上,在PC上保存和接收。

图 1 S3C2410系统平台的硬件功能框图

3 软件系统设计

本文的软件系统设计采用C/S(客户机/服务器)模式,以S3C2410平台作为服务器,以PC作为客户端。服务器的主要任务是把得到的图象数据发送到Internet上去,客户端的任务主要是从Internet上接收得到的数据,并把数据以保存成文件。下面分别讨论两者的具体实现。

3.1 服务器端软件系统设计

3.1.1 建立宿主机开发环境

本文以PC为宿主机,并带有RedHat9.0系统,开发环境就建立在这个平台上,其主要包括:交叉编译器的的选择和安装、NFS和TFTP服务器的配置等。

对于嵌入式系统的开发,由于没有足够的资源在目标板上运行开发工具和调试工具,所以通常采用交叉编译调试的方式。开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码。然后把可执行文件下载到目标机上运行。本文采用的交叉编译器为arm-linux-gcc,具体安装不再赘述。为了方便调试和下载烧写,可让宿主机支持NFS和TFTP服务器。需要特别说明的是为了支持TFTP服务器需要在安装RedHat9.0时须选择完全安装,如果没有选择完全安装,需要将第三张光盘里面的tftp-server-0.32-4.i386.rpm和tftp-0.32-4.i386.rpm安装到宿主机下。

3.1.2 摄象头驱动程序的实现

系统采用的是最普通的USB摄像头,主芯片为中星微ZC0301P。这种摄象头的一个特点是可以实现硬件JPEG编码。其驱动程序的编写重点包括下面的内容:提供基本的I/O 操作接口函数open、read、write、close的实现、对中断的处理实现、内存映射功能以及对I/O 通道的控制接口函数ioctl的实现等,并把它们定义在struct file_operations中。这样当应用程序对设备文件进行诸如open、close、read、write等系统调用操作时,Linux内核将通过file_operations结构访问驱动程序提供的函数。

当然,现在网上已经有了这种摄象头的通用驱动,可以从相关网站 下载usb-2.4.31.patch.gz,然后将这个补丁打到内核对应的位置即可。但是对有些内核版本的linux系统,在打补丁时,会产生Config.in.rej和Makefile.rej。这时只需要将这两个文件中修改失败的部分手动添加到对应的Config.in和Makefile中去就可以了。

3.1.3 linux内核配置

对于已经做过基本移植的linux在配置内核的时有以下几个方面是值得注意的:

1)因为要用到内核中的Video4Linux编程接口函数,所以在配置内核时首先必须选中Video for Linux并且最好是直接编译进内核而不用编译成模块的形式再加载;

2)要选中USB Support、OHCI、UHCI。并在USB Support下的USB Multimedia devices 中选中对应的摄象头,对本系统来说,选择USB SPCA5XX Sunplus Vimicro Sonix Cameras,并把它配置成Module。

3)配置完内核后做make dep, make zImage, make module。则在对应的spca5xx目录下会生成spc5xx..o,可以把spc5xx..o通过NFS mount到目标板上或者加到主文件系统ramdisk中的某个目录下。然后在目标板上做 insmod spca5xx.o就会找到摄象头。

3.1.4 服务器端应用程序的编写

完成驱动程序和内核配置后就开始应用程序的编写了,程序首先用交叉编译器在宿主机上进行编译连接,生成的的可执行文件通过NFS mount到目标板上进行调试。调试成功后再固化到文件系统ramdisk中去。其实现主要有下面几个步骤:

1) 初始化设备基本信息

2) 打开设备文件,读取设备基本信息和信号源基本信息,并设置video_mmap并为定义的帧结构分配缓冲区并初始化线程互斥量

3) 创建图象获取的线程。该线程函数实现以内存影射的方式读取设备中的数据,锁定线程互斥量,接着对帧结构的各个元素赋值。并解锁互斥量。使该过程做一个死循环。

4) 创建一个基于连接的socket,并绑定到一个端口上,开始在该端口上侦听。

5) 当有连接到来时,创建一个图象发送的线程。该线程函数实现:如果确定读取了客户端的数据,则把缓冲区内的一帧数据发送到网络上。让这个过程也为死循环。

6) 控制两个线程的同步

7) 如果程序退出,则关闭套接字,释放分配的资源。

可以看出,程序的内容主要有三个部分:图象采集部分,图象的网络发送部分和程序的多线程控制部分。下面分别介绍一下这三个部分主要涉及的内容。

在图象采集部分,定义了一个数据结构,它的主要成员变量有:

Video_capability 包含基本的设备信息(设备名称、支持的最大最小分辨率、信号源信息)

video_channel 关于各个信号源的属性

video_mbuf 利用mmap进行映射的帧的信息

video_buffer 最底层对buffer的描述

video_mmap 用于mmap

pthread_mutex_t 线程互斥量

截取图象方法有两种:直接读取设备文件和内存影射的方法,本文采用后面一种。采用这种方法后,普通文件被映射到内存地址空间,进程可以象访问普通文件一样访问内存,这样做的一个好处是可以提高效率。做视频截取的两个主要函数是:

  n  ioctl(vd->fd, VIDIOCMCAPTURE, &(vd->mmap)) 若调用成功,开始一副图象的截取。是否截取完毕留给VIDIOCSYNC来判断。

  n  ioctl(vd->fd, VIDIOCSYNC, &frame)若调用成功,表明一帧截取已完成。可以开始做下一次截取

对于网络发送部分,主要是linux下的socket编程,调用的主要函数有:创建套接字函数socket、端口绑定函数bind、监听函数listen、等到连接函数accept、数据接收函数read、数据发送函数write等。这些函数的具体定义和用法具体可以查阅相关资料 。需要说明的是为了能够正确发送一帧数据,要把定义的帧的结构体设置为单字节对齐,具体方法是在结构体的定义后面加上_attribute_((packed))。

多线程编程部分用到的主要函数有:互斥量初始化函数pthread_mutex_init、互斥量锁定函数pthread_mutex_lock、互斥量解锁函数pthread_mutex_unlock、互斥量注销函数pthread_ mutex _destroy、线程创建函数pthread _ create、线程同步函数pthread_join。此外,程序中为了能更好的实现两个进程的同步,还需要用到信号量机制的一些内容。受篇幅所限,这些函数的具体定义和用法请参考相关资料 。

3.2 客户机端软件系统设计

客户端是建立在一台PC机上,用Visual C++ 6.0设计一个基于MFC的界面作为接收端。在接收端主要完成从网络缓冲区内读取数据,并保存成文件的形式,文件以接收到数据的时间为名。图2为图象采集时间间隔为1秒时程序执行的结果。图象大小为320 象素。需要说明的是:服务器端发送的数据采用了单字节对齐,对应的在客户端接收的时候也要采用单字节对齐。在WINDOWS下实现内存单字节对齐的方法是在定义的帧结构体前面加上#pragma pack (1),并在其定义之后加上#pragma pack ()。

 图2 客户端程序执行结果(1秒种采集一次图象)

4 结束语

本文提出了一套基于S3C2410平台和linux系统的嵌入式图象采集、传输系统的具体实现,并给出了实验结果。实验结果证明:系统很好的完成了图象采集和传输。得到的图象清晰。服务器可以稳定运行,不会发生断开或退出的现象。本系统可应用于工业现场的监控,也可以与其他系统如门禁系统相结合获得门开或关时现场的重要图象数据。

参考文献

[1] Alessandro Rubini著 LISOLEG译,linux设备驱动程序开发,中国电力出版社,2002
[2] 乔晓丹张鹏,一个基于Linux操作系统的嵌入式网关的实现,微计算机信息,2005年第21卷第7-2期
[3] 朱刚 等,Linux网络编程,科学出版社,2000.
[4] 于明俭 等,linux程序设计权威指南 机械工业出版社 2001.
[5] http://mxhaard.free.fr/embedded.html

关键字:接口  控制  闪存  缓冲 引用地址:基于Linux和S3C2410的嵌入式图象传输系统设计

上一篇:基于ARM的嵌入式多参数监护仪设计与实现
下一篇:使用图形化的开发环境——LabView开发嵌入式系统

推荐阅读最新更新时间:2024-05-13 18:36

海洋观测网络化智能接口标准的研究
海洋观测技术作为认识海洋、开发海洋的高技术手段,是建设海洋强国、捍卫国家安全和实现可持续发展的伟大目标所必不可少的。在海洋观测领域,为了满足目前海洋研究、开发和利用对于空间性和实时性的强烈需求,构建能够综合、协调、实时、持续地获取各种海洋物理参数的海洋观测系统是必然的发展趋势。 为了实现海洋环境信息的大规模、实时地获取与控制,海洋观测系统需要对底层仪器(包括传感器或执行器)组网进行各种参数的获取。 网络化的观测方式,更注重系统性和整体性,通过性能可靠和实时连接的所有观测平台、探测设备、传感器协同观测,实现海洋环境信息共享与交互。但是目前仪器的软件协议和数据格式大多是非标准的而且并不统一,这就给系统构建、扩展、更新和维护等
[测试测量]
海洋观测网络化智能<font color='red'>接口</font>标准的研究
基于PIC单片机的永磁无刷直流电动机控制系统的开发
引言 嵌入式系统是指以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、体积、成本、可靠性、功耗严格要求的专用计算机系统。嵌入式系统是面向应用的,系统的硬件选型和软件开发模式都必须根据具体的应用确定。 永磁无刷直流电动机是电机控制研究领域的热点之一,这与其自身固有的技术优势密切相关:以电子换相取代了有刷直流电动机的机械换相。从根本上革除了普通有刷直流电动机由于电刷换相带来的火花、噪音、高故障率等一系列问题,同时又使系统的性能能够与普通有刷直流电动机相媲美,因此得到了广泛的应用。永磁无刷直流电动机的电子换相离不开电机的转子位置信号,传统的方法是采用霍尔器件或其他位置传感器检测位置信号,这使得系统的维护和制造
[嵌入式]
proteus7.7+Keil2仿真80C51控制路口信号灯(无绿灯倒计时+绿灯倒计
本例的控制程序未使用80C51的(定时器)中断功能, 而是以for循环作为延时函数, 以粗略提供0.5s和1s的时延. 本例的控制逻辑为①南北方向圆饼灯为红灯时, 南北方向车辆停止在停车线内等待. ②南北方向圆饼灯为绿灯时, 南北方向车辆(直行和左转)同时放行. ③东西方向圆饼灯为红灯时, 东西方向车辆停止在停车线内等待. ④东西方向圆饼灯为绿灯时, 东西方向车辆(直行和左转)同时放行. ⑤圆饼灯为黄灯时, 未越过停车线的车辆应停车等待. ⑥南北方向和东西方向的右转车辆在不影响交通秩序的前提下, 可不用看圆饼灯通行. 本例的设计逻辑其实并不复杂. 我先将南北方向的信号控制设计好, 之后相对于南北方向设计东西方向即可. 如果
[单片机]
proteus7.7+Keil2仿真80C51<font color='red'>控制</font>路口信号灯(无绿灯倒计时+绿灯倒计
高精度电流检测提高闭环控制系统效率
高精度电流检测是提高闭环控制系统(即电机驱动器)效率的关键。在这篇博客中,笔者总结了不同隔离电流检测方法的利与弊,并列出了一些采用它们的典型应用。 分流电阻器可用于多种工业应用,并能提供较高的准确度且实现低温度漂移。但是,它们的使用受限于其自身电阻值引起的功耗。在具有高共模电压的应用中,分流电阻器需要AMC1200等隔离式放大器或AMC1304L05等隔离式Δ-Σ调制器(适用于性能最高的系统)。AMC1304L05可提供±50mV的低输入电压范围,从而允许您使用更小的电阻分流器却不会影响性能。 图1:AMC1304L05 —— 有效位数和过采样率 罗氏线圈(Rogowski coils)只测量交流电流(AC)并被缠绕在
[网络通信]
STM32H7系列微控制器全新Arm 强化互联智能设备保护功能
意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM),今天发布了平台安全架构(PSA)。 PSA是实现同级最佳的普适网络安全的关键技术。意法半导体的STM32H7高性能微控制器采用与PSA框架相同的安全概念,并将这些概念与 STM32产品家族 的强化安全功能和服务完美融合。 个人用户和组织机构越来越依赖通过互联电子产品管理时间,监测健康状况,处理社交活动,享受或提供服务,提高工作效率。防止与未经授权的设备与互动,对于保护设备身份、个人信息、实体资产和知识产权极其重要。随着物联网的规模和普及率提高,公民安全和国家安全均受到威胁。设备厂商为打击黑客层出不穷的入侵手段而必须不断地创新安保系统,P
[嵌入式]
STM32H7系列微<font color='red'>控制</font>器全新Arm 强化互联智能设备保护功能
运动控制执行器的几种主要类型
        电动、液压和气压是传动装置中三种主要的运动技术。你使用哪一种要取决于应用的特点。          电动控制,在需要移动非常准确或者需要连续移动的时候,是非常出色的。电动伺服控制在多种应用中有用处:比如机器中心或者电梯内部对轴的计算机数字控制(CNC)。这种控制经常出现在装配操作中。          液压,当需要快速反应的时候,是大负载条件下的选择。它可以承受的压力是三个运动类型中最大的,最多可以达到100吨。          气压,在不利的环境中可以保证安全和可靠性,它对于高温、低温、灰尘、机械振动、潮湿以及 电子 噪音都不太敏感。  由于使用各种圆柱形装置,液压和气压可以轻松容易的实现直线运动。而电动控制,由
[嵌入式]
新型微控制器AduC812的P1口的应用
   1 AduC812的通用数据端口   AduC812是一种新型的高度集成的高精度12位数据采集系统。在其片内,不仅包含了可重新编程的非易失性闪速/电擦除程序存储器的高性能8位(与8051兼容)MCU,还包含了高性能的自校准多通道(8个输入通道)ADC,两个12位DAC。AduC812微控制器内核与8051指令集兼容,具有9个中断源(2个优先级)。片内还集成了8K字节的闪速/电擦除程序存储器、640字节的闪速/电擦除数据存储器以及256字节RAM。   AduC812共有52个管脚,使用4个通用数据端口P0~P3与外部器件进行数据交换。每一个I/O口都有自己不同的驱动执行电路。除端口1之外都是8位双向端口。端口1的操作是A
[单片机]
交通信号控制仪的研制
    摘要: 本文利用单片机设计出一种性价比很高的城镇公路交通信号控制仪,并给出了电路原理图及主程序清单。     关键词: 交通信号仪 1 前言 我国机动车辆发展迅速,而城镇道路建设由于历史等各种原理而相对滞后。道路拥挤、阻塞现象及交通事故常有发生。如何利用当今计算机与自动控制技术,有效地疏导交通,提高城镇交通路口的通行能力,提高车辆速度,降低车辆油耗,减少城市污染,减少交通事故是我们研究的新课题。 2 技术要求 目前国内城镇公路交通信号仍以点控为主,线控、面控技术在国内外正处起步发展之中,技术与设备造价昂贵,普遍推广使用还有一段时间。我们设计的交通信号仪既要能适用当前点控的需要,也要能适用今后线控、面控的
[传感技术]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved