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

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

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中去就可以了。

你可能感兴趣的:(c,linux,redhat,嵌入式,internet,linux内核)