新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于S3C2410的嵌入式图象传输系统设计

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

作者:时间:2012-05-17来源:网络收藏

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

3.1.3 linux内核配置

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

1)因为要用到内核中的编程接口函数,所以在配置内核时首先必须选中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 线程互斥量



评论


相关推荐

技术专区

关闭