本文研究的是基于ARM9的32位高端嵌入式微处理器和嵌入式操作系统内核,设计新型数据采集系统平台,是得到重庆大学创新实验室资助的研发项目。开发软件在uclinux操作系统下进行,本文详细介绍了uclinux开发环境的建立及编译运行、RS232串口模块和以太网模块的软件设计。
 本文是基于嵌入式系统ARM9平台的设计,并得到了重庆大学创新实验室的资助,其系统设计及网络软件编程均经过实践检验,具有较强的通用性,部分功能的改变只需添加或删除相关的代码,不必对整个系统进行大改动,提供的实验步骤具有可操作性。本文是研发小组在研发过程中进行的软件部分总结而编写的。     

  1 嵌入式数据采集平台整体设计      

  一个完整的嵌入式数据采集平台系统包括硬件和软件两部分。在硬件方面,由于ARM9芯片本身集成的接口比较多,而ARM7本身集成的接口较少,从整个系统的成本来看,选择ARM9与选择ARM7作为控制器的系统总体成本基本上相差不大;而从效果来看,由于ARM9大多数接口都在芯片内部集成,对硬件设计和调试来说,都方便了很多,因此我们采用三星的ARM9芯片S3C2410。由于ARM9芯片的封装基本上都采用BGA封装格式,电路板的设计、制作以及芯片的焊接都比较麻烦,因此采用核心板的方式,这样底板就可以使用两层板,可以节省电路板的制作费用(BGA封装的芯片一般必须使用多层板,制板费比较贵),并且核心板可以重复利用,只要接口相同,同一块核心板可以在不同的底板上使用。

  2 嵌入式数据采集平台硬件 

  Embest Arm EduKit II 开发板是实验系统的主要硬件平台,它是英蓓特公司开发的一款全功能ARM开发板,基于Samsung 公司的S3C2410x处理器(ARM920T),资源丰富,特别集成了可连接多种液晶控制器及串行USB主/从控制器单元。硬件系统包含了嵌入式系统开发应用所需的
 大部分设备,如串口、以太网口、USB口、音频输出、LCD及TSP触摸屏、5*4的小键盘、大容量的FLASH和SDRAM等等,完全自主设计的软硬件系统,可以支持使用Embest 或ARM JTAG 仿真器的开发调试[1]。      

  由ARM完成了数据包的预处理功能,包括数据包类型的读取;源IP地址,目的IP地址的读取、比较;数据包协议类型的提取;IP数据包头的奇偶校验;TCP/UDP数据包端口提取,检测等。特征值的数据采样也由ARM完成[3]。      

  3 嵌入式数据采集平台软件设计      

  3. 1 建立uclinux开发环境      

  为了实现基于uclinux的应用系统的开发和研究,就必须建立一个完备的 uclinux开发环境。基于uclinux系统的应用开发环境一般是由目标板和宿主PC机所构成。目标板用于运行操作系统和系统应用程序,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主PC机来完成。双方之间一般通过串口和以太网口建立连接。     

  3.1.1 宿主机安装uclinux-Cygwin软件      

  Cygwin软件是一个运行于windows下的Linux模拟环境。它由二部分组成: 其一:动态链接库Cygwin.dll。作为Windows环境下的Linux模拟层,提供标准的Linux API函数。 其二:一组Linux 工具集。使用户可以在Windows环境下使用Linux 环境所提供的各种工具。      

  Cygwin提供的一组功能强大的工具,包括大多数GNU软件(如gcc,gdb,xfree86,bash,tetex,opengl,perl,python等),可以将应用程序从Linux移植到Windows平台。 Cygwin对于学习掌握Linux操作环境,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用[3]。      

  3.1.2 宿主机安装开发工具链       

 (1)工具链源代码

  工具链源代码从uclinux官方网站下载,下载地址为http://www.uclinux.org/pub/uClinux/arm-elf-tools/tools-20030314       

 (2)工具链的安装
  Win2000系统Cygwin环境的工具链安装软件和Linux系统下的工具链安装解压包:arm-elf-compiler.tar.gz ,linux系统下工具链安装解压包,在控制台使用以下命令安装 
       tar xvzf arm-elf-compiler.tar.gz ,安装arm-elf-tools-cygwin.sh 。 
       Win2000下工具链安装脚本文件,在Cygwin下使用以下命令安装 ,
./arm-elf-tools-cygwin.sh ,显示提示信息后直接按回车键安装,工具链将被安装到 /usr/local/armtools目录。

       3.1.3编译运行uClinux

       uClinux源代码包,文件名为uClinux-dist.tar.gz。 
       解压uCLinux源代码包,执行命令: 
       mkdir /usr/local/src, 
       cd /usr/local/src , 
       tar xzvf /tmp/uclinux-dist/uclinux-dist.tar.gz ,解压完毕后,在/usr/local/src下面会有一个文件夹uclinux-dist存放源代码,以后的操作均在此目录下进行。       

  3.1.4 配置uClinux  

 执行 make xconfig 命令后弹出配置窗口。点击 Target Platform Selection(目标平台选择),弹出窗口,用户根据要求进行设置。       

  3.1.5 用户程序配置      

  在上节的目标平台配置过程中,选择定制用户程序后将弹出用户程序配置窗口,该窗口详细列出了用户程序配置选项,用户根据应用的需求进行选择,选中的用户程序最终将出现在文件系统中并影响文件系统的大小,用户需要考虑系统是否有相当的资源。在配置过程中不涉及修改的选项采用默认设置。
编译uClinux ,在Cygwin中依次执行以下命令完成uClinux的编译过程:
cd /usr/local/src/uclinux-dist , make dep , make clean ,PATH=”/usr/local/armtools/
bin:$PATH” , make lib_only , make user_only ,make romfs ,make image ,最终在images目录下生成2个文件: zImage( uClinux 内核2.4.x的压缩方式可执行映像文件)、romfs.img (文件系统的映像文件)。      

  3.1.6 运行uClinux      

  烧写映像文件 使用Embest Flash Programmer 和Embest ARM 仿真器或者其他烧写工具      

  将启动软件映像文件bootloader.bin、自己编译生成的内核映像文件zImage、文件系统映像文件romfs.img 烧写到扇区。 然后配置并启动超级终端,启动Win2000下超级终端软件,并设置超级终端为115200 波特率,无校验,1 位停止位,无数据流控制。运行uClinux ,复位系统,在超级终端将显示提示信息,在出现命令提示符“/>”后可输入uclinux各类命令进行操作。      

  3.2 以太网模块软件设计       

  Linux Socket是通过标准的UNIX文件描述符和其它程序通信的一个方法,其实质是提供了一个进程的端点,可以看作是一种特殊的管道。每个套接字都有一个半相关描述协议,本地地址、本地端口,或者一个全相关描述协议,本地地址、本地端口、远程地址、远程端口。每一个套接字都有一个本地的由操作系统分配的唯一的套接字号。本文采用的流式Socket提供可靠的、面向连接的通信流,并使用TCP协议,从而保证了数据传输的正确性。Socket是最为通用的一种基于TCP/IP的网络通信编程机接口,也是在Internet上进行应用程序开发最为通用的一种API。嵌入式Socket通信所要调用的主要库函数有:Socket()函数、 bind()函数、connect()函数、listen()函数、accept()函数、send()和receive()函数、 receive()函数。       

  3.3 网络协议分析及socket编程相关原理      

  uCLinux 下的 TCP/IP 网络协议栈的各层之间是通过一系列互相连接层的软件来实现 Internet 地址族的。其中 BSD socket 层由专门用来处理 BSD socket的通用套接字管理软件来处理,它由 INET socket 层来支持。INET socket 为基于 IP 的协议 TCP 和 UDP 管理传输端点。UDP(用户数据报协议)是一个无连接协议,而 TCP(传输控制协议)是一个可靠的端对端协议。传输 UDP 包的时候,uCLinux 不知道也不关心它们是否安全到达了目的地。TCP 则不同。在 TCP 连接的两端都需要加上一个编号,以保证传输的数据被正确接收。在IP 层,实现了 Internet 协议代码,这些代码要给传输的数据加上一个 IP 头,并且知道如何把传入的 IP 包送给 TCP 或者 UDP 协议。在 IP 层以下,就是网络设备来支持所有的 uCLinux 网络工作,如 PLIP、SLIP 和以太网。      

  网络的 socket 数据传输是一种特殊的 I/O,socket 也是一种文件描述符,也具有一个类似文件的函数调用 socket()。该函数返回一个整型的 socket 描述符,随后的连接建立、数据传输等操作都是通过该 socket 函数实现的。常用的socket 类型有两种:流式 socket 和数据报式 socket。两者的区别在于:前者对应于 TCP 服务,后者对应于 UDP 服务。       

  3.4 实现步骤与结果        

  基于uClinux下的网络接口编写应用程序,要求实现一个简单的客户机/服务器应用,服务器程序接收客户机发送来的字符串并回传给客户端,同时将接收到的字符串打印到串口终端。在uClinux系统下映射主机目录进行程序的调试[3]。       

  本节由两部分组成:(1) 开发板做客户端,PC机做服务器;(2)开发板做服务器,PC机做客户端。

  3.4.1 开发板做客户端,PC机做服务器
  首先在写字板上编写客户端程序client.c完成以后将其拷贝到工作目录

       f/cygwin/usr/local/src/uclinux-dist/user/app中在cygwin软件中执行以下操作:
cd /, ls , export PATH=/usr/local/armtools/bin:$PATH(设置路径),
cd /usr/local/src/uclinux-dist/user/app(进入工作目录),
ls, arm-elf-gcc –o client client.c –elf2flt,生成二进制client 并复制到目录f/cygwin/usr/local/src/uclinux-dist/romfs/bin中,
gcc –o client client.c ,cd ..,cd ..,退回到目录usr/local/src/uclinux-dist中,
make image,生成镜像文件zImage在f/cygwin/usr/local/src/uclinux-dist/image中
  下面我们要做的就是将这个生成的镜像文件烧写到开发板的flash中,步骤如下:
  打开英倍特软件进行配置,最后点击按钮programm进行烧写。
  打开 /开始/程序/附件/通信/超级终端,设置串口设置,在超级终端执行以下指令: 
       ifconfig eth0 192.168.1.200,//修改开发板的IP为192.168.1.200
cd /bin,./client 192.168.105(服务器IP),//运行 client 并修改服务器IP
  结果显示send to server...default test string字样。       

  在另一PC机上打开tcp&udp测试工具,并进行以下设置 :创建服务器—端口统一设置为8000,本地端口设置为8000,选择TCP方式,设置好后点击连接,连接成功后即可向服务器发送数据。       

  3.4.2 开发板做客户端,PC机做服务器
  首先在写字板上编写服务器程序server.c。完成以后将其拷贝到工作目录f/cygwin/usr/local/src/uclinux-dist/user/app中在cygwin软件中执行以下操作:
cd /,ls,export PATH=/usr/local/armtools/bin:$PATH(设置路径),cd /usr/local/src/uclinux-dist/user/app(进入工作目录),ls,arm-elf-gcc –o server server.c –elf2flt,生成二进制server 将其复制到目录f/cygwin/usr/local/src/uclinux-dist/romfs/bin中,gcc –o server server.c,cd ..,cd ..,退回到目录usr/local/src/uclinux-dist中,make image,生成镜像文件zImage在f/cygwin/usr/local/src/uclinux-dist/image中。     

  下面我们要做的就是将这个生成的镜像文件烧写到开发板的flash中,步骤如下:
  打开英倍特软件进行配置,方法同上。最后点击按钮programm进行烧写。烧写需要一段时间,烧写完成后,打开开始/程序/附件/通信/超级终端,重新启动开发板。
ifconfig eth0 192.168.1.200,修改开发板的IP为192.168.1.200,cd bin,进入目录bin
./server ,运行server。显示server listening...wait for cnnect…开发板进入查询等待状态。

  在另一PC机上打开tcp&udp测试工具,并进行以下设置 :创建服务器—端口统一设置为8000,本地端口设置为8000,选择TCP方式,目标板IP:192.168.1.200(即服务器地址)设置好后点击连接,连接成功。

  在建立连接的过程中间,会出现各种设置都正确的情况下建立连接失败的问题,这个时候应该点击“开始”按钮,打开“运行”看两台PC机能否PING通,如果互相不能PING通,要看IP设置是否在同一网段,若已经在同一网段,试着取消PC机的防火墙,这样应该可以建立连接了。

  4 总结   

  本文作者创新点是研究了数据采集平台涉及的关键技术,系统运行的硬软件平台,完成了uclinux开发环境的建立及编译运行,在此基础上进行了网络通信的软件设计。通过应用程序的编写与调试,总结了网络通信的调试方法及步骤,具有指导实际开发的意义。

  参考文献

  [1]田泽. ARM7嵌入式开发实验与实践 .北京:北京航空航天大学出版社,2006-9 
  [2]田泽.ARM7 Clinux开发实验与实践.北京:北京航空航天大学出版社,2006-11 
  [3]李铁峰,林白,李鸥. 基于FPGA的网络应用硬件开发平台的实现,微计算机信息,2005,(05) 
  [4]田泽.嵌入式系统开发与应用教程 .北京:北京航空航天大学出版社,2006-10 
  [5]田泽.嵌入式系统开发与应用实验教程.北京:北京航空航天大学出版社,2004,136-143

  作者简介:冷建筑(1974-),男(汉族),四川成都市人,重庆大学通信工程学院, 电路与系统专业,硕士,主要从事嵌入式硬软件开发和网络编程。

  通信地址:(400044 重庆市沙坪坝区 重庆大学通信工程学院A区主楼2311室) 冷建筑 

Logo

更多推荐