电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
创作
电子发烧友网>电子资料下载>嵌入式开发>Linux和S3C2410的嵌入式图象传输系统设计解析

Linux和S3C2410的嵌入式图象传输系统设计解析

2017-11-06 | rar | 0.2 MB | 次下载 | 1积分

资料介绍

 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上保存和接收。
  Linux和S3C2410的嵌入式图象传输系统设计解析
  图 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) 如果程序退出,则关闭套接字,释放分配的资源。
  可以看出,程序的内容主要有三个部分:图象采集部分,图象的网络发送部分和程序的多线程控制部分。下面分别介绍一下这三个部分主要涉及的内容。
  在图象采集部分,定义了一个数据结构,它的主要成员变量有:
  l Video_capability 包含基本的设备信息(设备名称、支持的最大最小分辨率、信号源信息)
  l video_channel 关于各个信号源的属性
  l video_mbuf 利用mmap进行映射的帧的信息
  l video_buffer 最底层对buffer的描述
  l video_mmap 用于mmap
  l 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 ()。
  
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1TPS54202H降压转换器评估模块用户指南
  2. 1.02MB   |  7次下载  |  免费
  3. 2华瑞昇CR215芯片数字万用表原理图
  4. 0.21 MB   |  1次下载  |  3 积分
  5. 3SMD LED选型目录 灯珠手册
  6. 5.36 MB   |  1次下载  |  免费
  7. 4Tiva C系列DK-TM4C129X入门指南
  8. 1.69MB   |  1次下载  |  免费
  9. 5电涌保护器(SPD)的选择、安装以及装配
  10. 4.57 MB   |  1次下载  |  免费
  11. 6时源芯微EMC前车灯案例
  12. 458.59 KB  |  1次下载  |  免费
  13. 7bq25890、bq25892双级联充电器EVM(PWR692)用户指南
  14. 2.02MB   |  1次下载  |  免费
  15. 8TPS54426降压转换器评估模块用户指南
  16. 847.7KB   |  次下载  |  免费

本月

  1. 1ADI高性能电源管理解决方案
  2. 2.43 MB   |  156次下载  |  免费
  3. 22024PMIC市场洞察
  4. 2.23 MB   |  63次下载  |  免费
  5. 3开关电源设计原理手册
  6. 1.83 MB   |  30次下载  |  免费
  7. 4智能门锁原理图
  8. 0.39 MB   |  28次下载  |  免费
  9. 5OAH0428最新规格书(中文)
  10. 2.52 MB   |  15次下载  |  7 积分
  11. 6ST7789V2单芯片控制器/驱动器英文手册
  12. 3.07 MB   |  9次下载  |  1 积分
  13. 7LTH7充电电路和锂电池升压5V输出电路原理图
  14. 0.04 MB   |  7次下载  |  免费
  15. 8TPS54202H降压转换器评估模块用户指南
  16. 1.02MB   |  7次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935119次下载  |  10 积分
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420061次下载  |  10 积分
  5. 3Altium DXP2002下载入口
  6. 未知  |  233084次下载  |  10 积分
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191367次下载  |  10 积分
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183334次下载  |  10 积分
  11. 6labview8.5下载
  12. 未知  |  81581次下载  |  10 积分
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73807次下载  |  10 积分
  15. 8LabVIEW 8.6下载
  16. 未知  |  65987次下载  |  10 积分