基于ARM嵌入式的以太网通信程序设计.docx
- 文档编号:8512777
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:61
- 大小:1.68MB
基于ARM嵌入式的以太网通信程序设计.docx
《基于ARM嵌入式的以太网通信程序设计.docx》由会员分享,可在线阅读,更多相关《基于ARM嵌入式的以太网通信程序设计.docx(61页珍藏版)》请在冰豆网上搜索。
基于ARM嵌入式的以太网通信程序设计
目次
1绪论
随着信息技术的迅猛发展,在我们的生活工作中,对于网络通信的要求逐年增高,且随着移动互联网络的发展与需求,嵌入式系统与通信网络,日日夜夜伴随着我们。
嵌入式系统与网络技术融合已经是必然的发展趋势,当嵌入式设备具有网络功能时,人们可以在任何地方、任何时间、任何平台随时浏览设备的信息,并进行操作和测试。
这是在嵌入式系统在其网络性和开放性的发展趋势。
1.1课题研究背景及意义
如今,我们的生活与工作中已经无法离开网络。
人们进行信息的传送和交流,之所可以实时且效地,恰是因为有“信息高速公路”,而“信息高速公路”的重要支撑网就是以太网[1]。
“以太(Ether)”这个词,是来源自十九世纪的物理学家们假设出的某种媒介,用以传播电磁波的辐射。
在下,他们认为“以太”充斥于世界各处,因此,到后来将“以太”这个假说引入到计算机局域网中,从而用来表现它在通信领域也是无处不在,就像“以太”充斥于世界中那样普遍存在。
以太网可以方便的接入网络,以太网使用的通信协议也因为适用性,有着十分优异的兼容性。
当前,在嵌入式系统接入因特网的所有技术中,被使用最多的局域网通信技术即是以太网通信。
通过以太网可以十分方便地搭建局域网,因而能与因特网链接。
嵌入式系统的开发与设计有了前所未有的空间与机遇,对于嵌入式系统的发展应用,任何时候都有机会跨入嵌入式以太网时代,这些都是需要两者技术上的完美融合。
只要完成了嵌入式系统与以太网的链接,使嵌入式系统发展成为以太网中单独的一个节点,用户在节点可以通过网络,便捷且低代价地进行数据传输。
所以为了实现整个系统的数据的传输功能,而在嵌入式系统与以太网链接的方法上做相应的研究,是具有十分重要的经济价值和现实意义的。
在这种背景下,本文对基于ARM的以太网通信的这一问题,进行研究与应用,具有充分的实际意义。
1.2嵌入式系统的现状和发展趋势
几乎电子设备所有新的生机都与嵌入式系统的发展关系紧密,在电子通信、医疗卫生、轻工业产品、监控安防、消费类电子、工业自动化系统等行业都有重要的嵌入式相关产品。
尤其是在消费电子相关产业,占有最高的嵌入式系统的产品的市场比重,监控安防、电子通信、医疗卫生以及其他领域紧随其后。
近十几年来,嵌入式系统得到了根本性的发展。
微处理器、微控制器大量在产品中使用,CPU也从当初8位的单片机发展到现在的16位、32位甚至64位的高端微处理器;从仅具备单一内核发展到提供丰富外设及接口功能;从几兆的频率发展到现在几百兆甚至1~2G的处理速度。
伴随着CPU性能的不断攀升,嵌人式系统也具备了文件系统、网络系统、图形界面系统等功能,并形成了以嵌入式操作系统为核心的嵌入式软件体系。
跟随应用程度的不断加深扩大的嵌入式系统,全新领域应用以及商品化的需求在嵌入式系统软硬件上面表现出了更高的需求。
嵌入式系统不仅仅具有微小性、低功耗、高可靠性的特点,还要向高实时性、高自适应性、易于操作和棋块化的方向发展[2]。
总的说来,嵌入式系统在以下几个方面将会有更大的发展:
1.嵌入式操作系统:
嵌入式系统刚刚发展的时候,软件系统还是前后台方式的系统开发,这种开发方式也被大多数人比喻为“裸奔”。
前后台方式下的软件系统的实时性差、功能单一、代码不易于维护等缺点越来越不适应嵌入式系统的高速发展,为此嵌入式操作系统被引人。
嵌入式操作系统的使用能够更加丰富嵌人式系统的功能,使得产品更加稳定可靠,多任务并发的处理方式也让系统的实时性要求得到满足,模块化的编程方式让产品的可定制性进一步增强。
当前普遍使用的嵌入式的操作系统有WindowsCE、μC/OS-
、Linux、VxWorks等。
这些嵌入式操作系统中当属Linux具有最高的人气和应用潜力,原因是其源代码公开且具有很好的定制性和可利用性,支持硬件广泛、安全可靠、拥有众多的开发者,另外有一重要原由便是产品生产商们在研发基于Linux系统的相关产品时,通常不必为发行软件或者生产产品而支付Linux的许可费用。
目前广泛应用在手机、PAD等消费电子产品上的安卓操作系统,便是由Linux的内核所开发出来的。
由此可见嵌入式操作系统,特别是嵌入式Linux系统应用潜力巨大。
2.网络互连:
网络技术已经深入到我们生活和工业生产的各个领域,由互联网引发的物联网技术正在快速发展中,网络也使得人与人、设备与设备之间的联系更加紧密,嵌人式设备为了适应网络技术的发展,必然要求在硬件上提供各种网络通信接口。
传统单片机的系统对于网络连接有很大欠缺,然而现在的嵌入式处理器,却拥有了内置的网络端口,不仅拥有对TCP/IP协议的支持外,对于USB、总线、IEEE1394、蓝牙、或红外通信接口的支持,拥有上述通信接口中的一项或者多项,而且还对物理层提供其驱动的软件,以及对应的通讯网的协议脚本。
3.易于操作的人机界面:
嵌入式产品是为人们的生产生活服务的,如果目前的嵌入式设备还像以前DOS系统那样使用命令行操作方式的话,就不会便于人们使用和操作,那些给我们生产生活带来方便和事受的电子高科技产品也不会产生,嵌人式产品被大家使用和接受的程度也将大大降低。
嵌入式系统的普及和应用离不开亿万大众,嵌入式产品的亲和力和人机互动性起着决定性的作用。
我们都希望在一套图形漂亮、直观简洁的界面下,仅仅通过手指点击就完成我们的操作。
苹果产品的热卖,平板电脑、智能手机的普及就充分说明了这点。
1.3嵌入式网络的关键问题
在嵌入式网络上面,主要关心如下2部分的问题
1.嵌入式本身的内存大小以及其运算速度,这些硬件问题需要被考虑,虽然AT91SAM9G20有着较高的主频,但也要尽量的减少系统开支,达到最大的效率。
2.搭建合适的平台以完成通信,选择合适的平台将大大降低网络搭建的工作量,所以依照所需要的功能搭建通信平台。
1.4本论文的主要工作
本课题通过对基于ARM嵌入式的以太网通信的研究,主要采用由Atmel公司推出的AT91SAM9G20芯片、DM9161AEP网络芯片、NandFlash等形成设计基础,在ARM嵌入式平台中移植Linux内核,通过Linux操作系统完成TCP/IP、UDP/IP通信的功能,最终在YL-9G20开发板上进行硬件测试。
本文第2章介绍了基于ARM的嵌入式系统硬件平台,介绍了基于ARM的嵌入式系统硬件平台的组成以及开发平台的组建,重要硬件实现部分的构成,囊括相关芯片的问题进行依次进行叙述,且对核心处理器芯片、网络控制芯片的内部结构、实现功能以及其工作的原理,分别做了相关简介;以及论述服务器端的开发环境搭建,以及基于ARM的AT91Bootstrap的移植,U-Boot的移植,Linux内核配置与根文件系统的移植。
本文第3章介绍了以太网通信的基本理论,通过Linux系统实现TCP/IP、UDP通信协议,体现了Linux操作系统实现网络通信的技术优势,分别讲述协议栈中ARP、IP、ICMP、TCP、UDP协议的实现过程,同时也介绍了协议栈与底层设备及应用层的接口设计。
最后介绍了运用socket套接字接口进行网络程序编写的流程。
本文第4章介绍了基于ARM嵌入式的以太网通信程序的设计。
论述了TCP、UDP网络编程,且在服务器和客户端测试TCP、UDP通信,实现基于ARM嵌入式的以太网通信功能,完成通信程序的编写。
2ARM嵌入式系统
目前,嵌入式系统相关技术已经在工业系统、个人消费电子产品、工业系统、智能家居等领域有着良好发展,其中多数伴随嵌入式系统产品的就是其嵌入式网络系统的开发,ARM嵌入式微处理器一般具有如下特点:
体积小、低功耗、低成本、高性能;支持Thumb(16位)/ARM(32位)双指令集,能很好地兼容8位/16位器件[3]。
本章,主要讲述嵌入式系统的硬件平台模块以及发开环境。
2.1系统开发环境
系统开发环境主要由硬件部分包括计算机、ARM9开发板、网络设备;软件中包含:
嵌入式Linux的开发环境以及相关设备驱动、SecureCRT组成。
软件部分的工作均在计算机PC(PersonalComputer)上完成,嵌入式Linux开发环境负责程序的开发和调试,SecureCRT可以打印串口输出的数据,以及通过串口向开发板发送数据。
ARM嵌入式系统的开发环境如下图2.1所示。
图2.1系统开发环境图
PC机提供了程序编写开发和调试的平台,搭载了Linux操作系统的开发环境和SecureCRT串口调试工具,完成嵌入式Linux系统的移植以及相关环境的搭建、程序的编写以及调试的功能。
通过串口和USB接口连接开发板,在PC机上进行对开发板的相关操作,通过以太网口完成PC机与开发板中的网络芯片的以太网通信的硬件连接,实现以太网通信。
2.2ARM嵌入式硬件平台
硬件系统是ARM嵌入式系统一切的根本,实现产品的基础就是硬件平台,实现产品的附加服务,则需要软件的帮助。
为了实现本文的目标-基于ARM嵌入式的以太网通信程序设计,我第一步要做的就是进行对ARM嵌入式系统硬件的学习和了解,所以在下面几节对于ARM嵌入式系统的硬件平台结构以及关键器件芯片进行介绍。
2.2.1嵌入式硬件平台结构
由上一节图2.1可以看出,ARM嵌入式平台需要通过以太网网络芯片和以太网口完成网络的联通;以及需要USB和串口对程序和内核等进行下载烧写以及调试;同时,我们还需要存储部分以及实时时钟来提供支持,当然电源模块为整个ARM嵌入式开发平台提供运行的保障。
如图2.2所示为本文所需的ARM嵌入式系统的硬件结构。
图2.2ARM嵌入式平台硬件结构
通过RJ45连接到PC机,在完成前期工作后,通过设置端口,运行服务器端(PC机)和客户端(ARM嵌入式平台)中的网络程序即可实现TCP或UDP协议的通信。
2.2.2嵌入式处理器
在嵌入式系统中,处理器依照其性能高低分别为嵌入式微控制器以及嵌入式微处理器。
在一些低端如:
简单运算处理、逻辑控制、IO控制等场合中,通常使用微控制器,这些微控制器大多是16位或8位的。
而在应用一些复杂运算、有处理速度需求且实时性要求的场合中,使用的处理器多是32位甚是64位的微处理器。
从2.1.1节的硬件结构可以看出,我们需要完成通信和数据处理的相关任务,要求处理器具有较快的处理速度,然而处理器的系统时钟对处理速度起决定性作用。
本文使用的ARM嵌入式硬件平台使用的处理器AT91SAM9G20,Atmel公司的AT91SAM9G20芯片主频达400MHz,完全满足应用需求[4]。
AT91SAM9G20微处理器基于ARM926EJ-S处理器核心内核,包含3个32位并行的I/O控制器,可控制SDRAM以及包括NandFlash在内的静态存储器。
如图2.3为该处理器的结构图。
图2.3AT91SAM9G20结构图
2.2.3网络芯片
时今网络硬、软件技术的快速发展使得网络设备的应用呈现大幅增长的态势。
控制各类仪器仪表、智能家电、消费电子产品、工业生产中的设备,以及它们相关数据采集的设备都开始了网络化,在Internet中共享及获取资源,从而进一步方便我们的工作和生活。
以太网通信,顾名思义,我们需要实现网络连接,也就离不开网络控制芯片。
在我完成设计的过程中,必要解决的就是硬件平台同以太网的通信问题。
本文中使用的ARM嵌入式平台采用了DM9161系列的网络控制芯片DM9161AEP,DM9161AEP的结构图如图2.4所示。
DM9161AEP的芯片特点如下所示:
1.48pinLQFP封装
2.工艺:
0.25μm,输入输出供电电压3.3V,模拟部分2.5V
3.支持MII和RMII连接方式(推荐使用MII)
4.支持双绞线自适应(AUTO-mix)
5.支持TCP/IP硬加速
6.与大部分厂家的微控制器是完全兼容。
使用的单口PHY。
图2.4DM9161AEP结构图
2.3搭建ARM嵌入式开发环境
在上面介绍完ARM嵌入式系统的硬件平台,展开了软件方面的工作。
对于嵌入式系统的软件开发来说,需要完成建立交叉编译工具;由于嵌入式系统所使用的芯片型号多种多样,很多芯片和硬件接口不能直接兼容[6],我们需要完成移植的工作:
AT91Bootstarp移植,U-Boot移植与烧写,Linux内核移植与烧写,根文件系统移植与烧写,PC机上开发环境的建立等任务。
2.3.1嵌入式Linux简介
Linux最早是由LinusTorvalds所创建的,经过20年时间的发展,Linux已经成为一个有着强大功能且稳定可靠的OS。
经过对原有的Linux操作系统进行调整和剪裁,形成了可在嵌入式平台运行的嵌入式Linux操作系统。
嵌入式Linux操作系统拥有嵌入式操作系统的全部特征,同时保留了十分丰富的开放的源代码,所以应用在嵌入式系统中是越来越普遍。
嵌入式Linux操作系统与其它嵌入式操作系统相比具有以下特点:
1.开放源代码。
Linux最大的特点就是源代码公开并且执行GPL协议,嵌入式Linux开发人员根据自己产品的需求可以更改内核源码来满足功能使用;不存在黑箱技术,遍布全球的众多Linux爱好者又是Linux开发的强大技术后盾[5]。
2.可裁剪、高效率的微小内核。
Linux小内核、高效率,内核的更新速度快而且可以被定制。
它的系统内核最小可以到134KB,这么优秀的内核设计可以使系统的仅仅占据更小的资源便可以可靠且稳定的运行。
独特的模块机制可以将用户的驱动或者应用程序模块动态的从内核中插入或卸载。
3.免费。
产品制造生产商在开发完基于嵌入式Linux的产品以后无需为产品的发布支付相关的许可费。
4.支持众多硬件。
嵌入式Linux操作系统可以支持多种处理器和多种硬件体系,是一种可以跨越平台的操作系统。
5.安全、可靠。
嵌入式Linux十分可靠,可以毫无故障的运行数年,一直广泛被数据中心所应用。
与此同时,嵌入式Linux的开发人员还可以使用systrace或者grsecurity此类的工具来加强其安全性,这是Windows操作系统开发者无法想象的。
6.优秀的网路功能。
嵌入式Linux在网络方面有着十分完整的内核结构,Linux对网络中最常用的网络协议,如TCP/IP网络通信协议有着整体的支持。
并且提供包括了10兆、100兆、1000兆的以太网络的支持。
因此嵌入式Linux十分适用于网络相关产品的开发。
嵌入式Linux的应用,主要在数字电话、机顶盒、视频通信、数据网络、以太网交换机、Hub、远程通信、网桥、医疗电子、信息家电、PDA、工业等领域。
可以说嵌入式Linux在民用还是工用范畴都有着普遍应用,当前很多平板电脑和智能手机采用的安卓也是采用Linux的内核。
2.3.2ARM嵌入式系统一般的开发方法
与多数常见的桌面软件的开发所不同,当嵌入式软件开发人员开发一个基于嵌入式系统的应用时,首先会在PC机上选择合适的嵌入式开发环境并且进行软件开发,然后在实验板或者开发平台上对其代码进行测试,最后PC机编译生成正确的映像文件或者可执行的文件,并且烧写到最终的目标产品中,如图2.5所示。
图2.5ARM嵌入式系统开发的一般方法
对于ARM嵌入式平台的Linux软件开发一般步骤如下:
1.PC机的开发环境选择。
这里本文选择的是Fedora14系统。
通过在Windows系统中的虚拟机来安装Fedora14操作系统,便于调试。
2.建立交叉编译工具:
Fedora14自带的GCC都是针对x86架构的,为了可以让编写的代码在开发板或者最终产品上良好运行,建立交叉编译工具是所必须条件。
3.开发、移植Bootloader。
4.配置、烧写U-Boot。
5.配置、移植Linux内核。
6.建立根文件系统。
7.开发程序。
2.3.3嵌入式Linux交叉编译环境的建立
嵌入式系统的硬件性能和其存储空间有限,因此,在对程序进行开发的时候都是在PC机上进行操作,首先建立一个用于开发板的交叉编译工具,用其在PC机上编译程序用于开发板。
可以看出,可以在一个系统平台中编译出能够运行在不同的体系架构上的代码,这就是交叉编译。
比如在处理器架构为x86的微机中编译出可以运行在ARM嵌入式中的代码。
若使用桌面级编译环境,则无法生成在ARM平台上运行的程序代码。
在PC机Linux系统下利用GCC编译程序,这样的编译方法称之为本地编译,本地编译的代码只能够在本地运行。
与本地编译相对应的,即是上面所介绍的交叉编译,通过交叉编译器可以编译出这种跨平台程序。
采用arm-linux-gcc-4.3.2版本的交叉编译工具,通过网络下载到的文件解压到个人目录中。
随后由终端进入解压后生成的/usr/local/目录中,将目录下的arm目录整体复制到系统文件根目录/usr/local/下面。
然后所有交叉编译工具都存储在其中,如图2.6所示。
图2.6交叉编译工具arm-linux-gcc-4.3.2
然后更改环境变量PATH的函数,将统一存储的交叉编译工具的路径目录添加到其中。
在终端中对PATH进行修改,键入:
#exportPATH=/usr/local/arm/4.3.2/bin:
$PATH
继而检查是否正确添加路径到PATH中,键入:
#echo$PATH
如图2.7所示,可以看到,有显示包含有交叉编译工具的路径,说明已完成添加新路径至PATH。
至此,已经完成交叉编译环境的搭建。
图2.7添加交叉编译工具环境变量
2.3.4开发、移植AT91Bootstrap
在AT91SAM9G20芯片内部含有一个BootRom代码。
当没有烧写任何Bootloader和内核文件的情况之下给芯片上电启动,通过串口调试工具(本文使用SecureCRT)可以看到串口是有打印消息的,显示的内容为“RomBoot”,此RomBoot代码是Atmel厂商定制在芯片中的,人为不能对其作修改。
作为ARM嵌入式开发人员,在启动代码的编写、修改和学习中,AT91Bootstrap是最先面对的环节。
AT91Bootstrap它的主要作用即是对SDRAM初始化以及相关的存储器(NandFlash)初始化,然后加载U-Boot到SDRAM中的指定字节并开始运行U-Boot。
AT91Bootstrap源代码由公共的硬件驱动、头文件以及库文件等组成。
首先,解压下载的AT91Bootstrap,在终端中输入:
#unzipAT91Boostrap1.13.zip
解压后,在当前目录下生成AT91Bootstrap目录。
进入相应9g20源码区,修改编译工具的路径,打开其文件夹,使用vi进行函数修改
此时,可以直接编译,在源目录下执行“make”指令。
编译过后可在该目录下看到nandflash_at91sam9g20ek.bin文件,如图2.8所示。
#cd/home/dietrich/Bootstrap-v1.13/board/at91sam9g20ek/nandflash
#make
图2.8make编译后生成bin文件
在这里就完成了ARM嵌入式系统的Bootstrap编译,接下来使用SAM-BA2.8烧写生成的.bin文件至NandFlash内存的起始地址处,即0x0,也就是处理器启动以后首先要从NandFlash上的)0x0地址位上读取AT91Bootstrap且开始运行,这也说明在启动代码中,AT91Bootstrap是第一部分。
2.3.5U-Boot移植与烧写
U-Boot的编译形式、源码目录都喝Linux的内很很相似。
实际上,很多U-Boot源代码就是通过对应的Linux系统内核弱化而来,特别是很多设备驱动程序。
可以在U-Boot源代码的注释行中有很多表现。
随着U-Boot版本不断的升级,其所支持的硬件资源和系统资源也是越来越丰富。
U-Boot有着诸多优点:
源代码开放、对很多系列的处理器支持、对很多嵌入式OS内核支持、十分灵活的功能设置、优异的稳定以及可靠性、多种设备的驱动源代码以及对网络的强大支持。
正是因为这些特点使得U-Boot被越来越多的嵌入式操作系统所应用,也有着更好的使用前景。
U-Boot启动并且引导Linux内核这一过程可以分为两个阶段,第一个阶段即为实现设备的初始化,绝大多数是采用汇编语言所编写来达到目的的;第二个阶段则是采用C语言编写,可读性强,并可实现相对复杂的功能。
两个阶段实现的功能如下:
1.第一阶段功能:
设置异常项和异常处理函数;
-设置控制寄存器地址;
-关闭着门狗和屏蔽中断;
-配置PLLCO飞等寄存器,确定系统的主频;
-关闭MMU功能;
-初始化RAM控制寄存器;
-拷贝数据至SDRAM;
-设置堆拢;
-消除BSS段;
-跳转到第二阶段代码人口。
2.第二阶段功能:
-初始化本阶段所涉及的硬件设备;
-设置SDRAM的起始地址和大小;
-读取内核到RAM中;
-为内核设置启动参数;
-调用内核。
可以从网络上下载U-Boot。
本文采用的版本是1.3.4。
在终端中使用解压命令将U-Boot-1.3.4.tar.bz2压缩文件在个人文件夹内进行解压操作,然后进入生成的u-boot-1.3.4目录对Makefile文件进行修改,将CROSS_COMPILE变量修改为编译器所在目录(本文2.2.3节)。
保存退出vi后对U-Boot进行make编译,即可在文件目录下生成我们需要的二进制.bin文件。
图2.9编译后生成的bin文件
烧写U-Boot的方法仍然与上一节烧写AT91SAM9G20相同,如图2.10所示,也是通过SAM-BA软件。
不过需要注意的是烧写起始地址应为NandFlash的0x200000地址处,然后SendFile开始烧写u-boot.bin。
图2.10烧写U-Boot.bin
2.3.6嵌入式Linux内核的移植及烧写
嵌入式Linux内核在本文中选择Linux-2.6.27这个一个版本,解压Linux-2.6.27.tar.bz2压缩文件,可以观察到源码包内有相当多的文件和目录,为了掌握Linux内核的移植方法,了解其结构很有必要的。
Linux-2.6.27内核包中一共有20个文件夹,有很多都与本文无关,不做介绍,下面只介绍最为重要的7个文件目录:
1.arch目录。
arch子目录包括了和硬件体系相关的核心代码。
它的每一个子目录都是代表一种可以支持的硬件体系结构,例如i386就是关于IntelCPU及与之相兼容体系结构的子目录(PC机一般都基于此目录)。
其中的arm目录是我们需要特别关心的,里面包含的是基于ARM处理器的体系结构,是本文对Linux进行移植所需用到的目录。
2.drivers目录。
drivers子目录里面是Linux系统所支持的硬件设备驱动程序;每种驱动程序各占用一个下级子目录,如/usb目录下为通用串行总线USB设备驱动程序。
对drivers/block/这个目录下的genhd.c文件进行查看,其中的device_setup()函数可以了解设备初始化的过程。
3.fs目录。
fs子目录包含的是所有文件系统和各种类型的文件操作代码,此目录包含用于配置核心的脚本文件等。
4.kenerl目录。
此目录内为核心代码,包含了进程通信、进程调度、内存管理、虚拟文件系统等在内的Linux系统大多数的内核函数。
5.include目录。
include子目录包括编译核心所需要的大部分头文件。
6.init目录。
这个目录内包含初始化代码。
7.lib目录。
lib子目录里面包含Linux内核库函数代码。
在Linux内核源码的根目录下还有一个文件需要特别注意,就是“Makefile文件”。
它是Linux内核里面的第一个Makefi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM 嵌入式 以太网 通信 程序设计