基于ARM9的嵌入式Linux网络通信系统设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于ARM9的嵌入式Linux网络通信
系统设计与实现
随着计算机技术的发展,嵌入式系统已经成为计算机领域的一个重要组成部分。Internet现已成为社会重要的基础信息设施之一,是信息流通的重要渠道,如何让嵌入式设备连接到Internet上,和其他通信系统进行信息交换是当前嵌入式技术领域研究的热点所在。本文结合实际应用需求,详细研究实现了一种基于S3C2410平台和Linux操作系统的嵌入式网络通信系统。
1.嵌入式网络通信系统总体设计
经过大量的资料收集比较,深入地研究分析并结合现有的实验条件,我们对系统的体系结构、硬件平台和软件系统做出了以下选择:
1)目前嵌入式CPU很多,选择哪款CPU要根据自己产品的实际需要。一般而言,首先应尽量选择系统集成度高、外围电路简洁的CPU;其次,还应综合考察CPU的各项性能指标;最后,还应该考虑软硬件开发环境的建立、厂家的货源以及代理的软件支持力度。经过比较, 本设计采用三星的S3C2410微处理器。这是一款高性价比、低功耗、高集成度的CPU,基于ARM920T内核,主频最高为203MHz,专为手持设备和网络应用而设计,能满足嵌入式系统中的低成本、低功耗、高性能、小体积的要求。
图1为硬件平台的总体设计[ 1 ] 。CPU S3C2410模块是开发板的核心部件。S3C2410 在包含ARM920T核的同时,增加了丰富的外围资源,主要包括1个LCD 控制器,支持STN 和TFT液晶显示屏; 3个通道UART; 4个通道DMA; 4个具有PWM功能的16位定时/计数器和1个16位内部定时器, 支持外部时钟源; 8通道10位ADC,最高速率可达500kB / s;触摸屏、IIS总线、SD 卡和MMC卡接口;117位通用I/O口和24位外部中断源。存储系统包括64MB的NAND Flash存储器模块和SDRAM存储器模块; Flash用于存放嵌入式操作系统、应用程序和用户数据等,并作嵌入式文件系统; SDRAM作为系统运行时的主要区域,用于存放系统及用户数据。通信模块包括串口和以太网接口模块;以太网接口为系统提供以太网接入的物理通道, UART接口则通过RS232可以和宿主机做串口通讯。JTAG调试接口用于系统的嵌入式调试。扩展总线扩展出了系统总线供今后继续开发使用。
图1 硬件平台结构框图
2)网络通信系统需要一个便宜、成熟并且提供高端嵌入式系统所必须特性的操作系统,嵌入式Linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为嵌入式操作系统的首选。因此,在软件体系上采用L inux216版本作为操作系统内核,并使用GNU工具链,包括编译器、汇编器、库、调试器和相关实用程序等[ 2 ] 。根据以上,系统体系结构如图2所示:
图2 系统体系结构
2.基于S3C2410的以太网接口电路
以太网芯片采用了Cirrus Logic公司生产的低功耗、性能优良的16位以太网控制器CS8900A[ 3 ] 。CS8900A包括片上RAM, 10Base2T传输和接受滤波器。该芯片的突出特点是使用灵活,其物理层接口、数据传输模式和工作模式等都可以根据需要而动态调整,通过内部寄存器设置来适应不同的环境。为了工艺简洁,采用内部带有变压器的RJ45。本系统选用的是中山汉任的HR901103A。网络接口硬件电路原理图如图3。数据的发送校验,总线数据包的碰撞检测与避免是由CS8900A自己完成的。信号的发送和接收端通过RJ45接口接入CS8900A,再传送给S3C2410,从而组成了以太网信号传输的硬件通道。
3.嵌入式通信系统软件设计
本文的软件系统设计采用C/S(客户机/服务器)模式,以S3C2410平台作为服务器,以PC作为客户端。服务器在得到客户端的请求时将信息通过网络传给客户端。下面讨论通信系统软件的具体设计与实现[ 4 ] 。
3.1 建立宿主机开发环境
本文以PC为宿主机,带有Fedora5系统,开发环境就建立在这个平台上。对于嵌入式系统的开发,由于没有足够的资源在目标板上运行开发工具和调试工具,所以通常采用交叉编译调试的方式。本文采用的交叉编译器为arm2linux2gcc,开发时使用宿主机上的交叉编译、汇编及连接工具生成可执行的二进制代码。然后,把可执行文件下载到目标机上运行。为了快速方便地下载,采用tftp方式,这就需要宿主机在宿主机上安装tftp 服务器,并进行配置。
3.2 操作系统的移植
嵌入式系统的存储空间往往很有限, 需要把Linux系统根据实应用需求进行裁剪。对Linux进行裁减需要对L inux系统有完全的了解,如启动过程、文件系统、目录结构、系统工具文件等[ 5 ] 。这一过程需要在空间和功能上加以权衡。其主要包括以下两部分工作:
3.2.1 Linux内核的移植
针对系统的硬件,修改Linux2216内核,提供对S3C2410的支持和必要的设备驱动。由于在本系统所采用的Linux216内核中,S3C2410 CPU已经成为一种标准支持,因此关于内核移植部分的工作量就大大减少了,所需要做的就只剩下修改网卡驱动、加入支持Cramfs文件系统的选项、添加NAND Flash启动初始化代码等工作了。由于论文篇幅所限,具体工作请参考相关资料。
3.2.2 文件系统的设计
为了提供L inux运行所必需的环境,需提供文件系统。在嵌入式环境下,内存和外存资源都需要节约使用。Cramfs不会影响系统读取文件的速度,而且是一个高度压缩的文件系统,因此非常广泛应用于嵌入式系统中。本系统采用Cramfs文件系统, 包括如下内容: 目录/dev, /p roc, /bin, / etc, / lib, /usr, / tmp,最基本的应用程序如sh, ls, cp,mv等,最低限度的配置文件如inittab、fstab 等, 设备文件如/dev/mtd 3 , /dev/ console 等。此外,还应包括程序运行所需的函数库。由于以上所需文件远超过1144MB,因此文件系统的构建主要采用busybox 和其他必要的工具。
3.3 Linux环境下Socket[ 6]网络通信编程
Linux是和网络密切相关的,其自身也常常被用来支持各种应用的网络需求。Socket在所有网络操作系统和网络应用程序中都是必不可少的,它是网络通信中应用进程和网络协议之间的接口。Socket
接口是为方便开发人员进行TCP / IP程序开发,而为TCP / IP协议所开发的一组应用程序接口。当服务器和应用程序需要和其他进程通信时就需创建套接口。套接口地址的格式是一个IP地址和一个端口号,套接口是进程间通信的端点,每个套接口的名字都是惟一的,所以依靠套接口来确定整个Internet域中的一个网络进程。TCP和UDP是传输层协议,TCP是保证传输的面向连接的协议,而UDP是无连接协议,不能保证消息传送到目的地。本设计选择TCP协议,运用流式Socket编程技术实现服务器端、客户端之间的通信,图4是网络通信程序流程。服
务器端主要用到的函数有: socket()、bind()、listen( )、accep t ( )等。用ARM2L inux2gcc交叉编译工具编译服务器端程序TCPSever. c 生成可执行程序TCPSever。再将可执行应用程序加入到Cramfs文件系统里,下载到装有L inux内核的ARM开发板上。客户端主要用到的函数有Socket ( ) , connect ( )。用gcc编译客户端程序TCPClient. c生成可执行程序TCPClient。