Embedded data acquisition platform and the software design of network part
Abstract: This paper researches a new data acquisition system which is based on an 32 bit higher-end microprocessor of ARM9 and embedded operating system kernel. This program is imbursed by innovation base of Chongqing University. The exploitation software is operated under uclinux operating system. This paper introduces in detail the establish of uclinux development and translation environment, RS-232 serial module and software design of Ethernet module. Key Words: embedded system; ARM9 S3C2410; uClinux operating system ; data acquisition
摘 要:本文研究的是基于ARM9的32位高端嵌入式微处理器和嵌入式操作系统内核,设计新型数据采集系统平台,是得到重庆大学创新实验室资助的研发项目。开发软件在uclinux操作系统下进行,本文详细介绍了uclinux开发环境的建立及编译运行、RS232串口模块和以太网模块的软件设计。
关键词:嵌入式; ARM9 S3C2410; uClinux操作系统; 数据采集平台
本文是基于嵌入式系统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室) 冷建筑
基于ARM9的32位高端嵌入式微处理器和嵌入式操作系统内核研究
更新时间: 2008-09-02 14:44:26来源: 粤嵌教育浏览量:1208