随着网路和通讯技术的发展,嵌入式系统现已步入高速发展阶段。并在社会各个领域得到了广泛的应用。本文介绍了一种采用ARM+uCLinux"target="_blank">uCLinux作为开发平台。实现基于TCP/IP的远程系统监控.因而代替传统单片机来实现数据采集、预处理和通讯功能;并借助互联网将数据向下位机传送,同时支持远端顾客对设备进行远程控制,进而实现远程监控功能的具体方式。
1系统平台的建立
本系统由嵌入式平台服务器、前端控制器、前端传感、客户端和配置PC组成。开发时可通过配置PC来下载系统和应用软件。嵌入式系统平台就能搜集现场数据。并传送到远端顾客机,然后由远端顾客机对数据进行处理,接着发送控制讯号给系统服务器,便于通过后端控制器对设备进行远程控制。其系统结构如图1所示。
1.1硬件开发平台
该系统的硬件开发平台可选择SmartARM2200。该嵌入式设备的核心是ARM7TDMI的LPC2210.开发板自身具有A/D转换器和多个GPIO(通用I/O)口,可对工业现场的各类设备、仪表进行数据采集和监控。使用时,只要将相应的传感讯号接入控制器的端口即可。其开发板系统的硬件配置如图2所示。
1.2uCLinux操作系统
操作系统是嵌入式设备软件的核心部份。本系统采用uCLinux系统平台来完成对硬件系统的管理和维护。uCLinux是广泛应用于微控制领域的一种嵌入式Linux操作系统。它通过对标准Linux内核的裁减,可消除虚拟显存管理部份代码,以对显存分配进行优化。进而达到提升系统运行效率的目的。uCLinux则可经过各方面的大型化改建产生一个高度优化、代码紧凑的嵌入式Linux,它保留了Linux的大多数优点,包括稳定、良好的移植性、优秀的网路功能、完备的文件系统支持、丰富的API等。
1.3uCLinux在ARM平台上的移植
若将uCLinux移植到SmartARM2200上,须要进行以下四个步骤:
(1)下载源码,构建交叉编译环境
uCLinux是自由软件(完全开放代码)。用户可以直接从http://www.uclinux.org/pub/uclinux处下载源代码并安装到RedHat9.0系统下arm linux内核中arm中断实现详解,便于正常在RedHat9.0构建起交叉编译环境。
(2)配置和编译内核
步入到安装好的uCLinux目录,依次执行下边的命令:
makemenuconfig;步入配置菜单后,选择Vendor/Product(厂商/产品)下的PHILIPS/lpc2200;用KernelVersion(内核版本)选择Linux-2.4.x,LibcVersion(函数库版本)选择uClibc:其余内核和应用程序选项可依据情况选择。
makedep
makeclean
makelib_only
makeuser_only
makeromfs
makeimage
make
编译结束后会在uCLinux安装目录下生成romfs.img文件,借助它可以制做RAMDisk,之后在linux-2.4.X目录下生成elf格式的Linux内核文件,并以下述形式将其转换成bin格式:
#arm-elf-objcopy-Obinarylinuxlinux.bin因而生成下载用的uCLinux内核镜像文件linux.bin。
(3)制做RamDisk挂栽根文件系统
首先创建一个512kB的虚拟c盘arm linux内核中arm中断实现详解,并将虚拟c盘文件格式转化成ext2格式:
ddif/dev/zeroof=initrd.imgbs=1024count=512
mkfs.ext2-cinit.img
之后将init.img和romfs.img加载到主机文件系统上,并在RAM中构建须要的目录:/bin,/dev,/etc,/var,因而拷贝ROM中的文件到ram目录中。
出来在RAM盘dev目录下创建设备节点:
#mknodram/dev/ttyS0c464
#mknodram/dev/consolec51
后卸载init.img和romfs.img,并应确保init.img更改已保存,至此,RAMDISK便创建完成。
(4)下载内核和文件系统
正确设置显卡启动选择尾纤。显卡加电后,在超级终端上便可以看见BootLoader引导信息,可选择默认的FTP联接linux定时关机命令,并使用BootLoader默认的IP进行下载,之后启动gftp,输入显卡默认的IP和端标语。这样,linux主机就可以和主机联接,最后选择须要下载的Linux内核文件和RAM盘及相关的配置文件即可。
2监控系统功能的实现
监控系统主要由3个部份组成:数据采集部份,设备控制部份,数据传输部份。数据采集部份可对传感讯号进行A/D转换,并对采集到的数据进行简单的处理,同时提供调整运行参数的插口。数据传输部份可将采集的数据传送到远端的主机,并接收远端主机的控制信息。远端主机则对传输过来的远程数据进行处理、存储和显示linux软件,并可以更改数据采集部份的参数以控制数据采集,同时根据采集到的数据对设备发出操作指令,或对远端的设备进行控制,因而实现远程监控功能。
2.1数据采集
使用A/D转换设备前,首先要创建设备节点,并加载ADC驱动,之后通过open()和close()将其打开和关掉.主要的数据采集程序如下:
……
ioctl(fd,ADC_SET_CLKDIV,(Fpclk+fadc1)/fadc-1);//设置A/D转换速率;
ioctl(fd,ADC_SET_BITS,10);//设置A/D转换精度;
while(1){
ad_data=0;
read(fd,&ad_data,sizeof(ad_data));//读取A/D转换的值;
……
2.2GPIO设备控制
同A/D转换设备类似,使用GPIO也需先创建设备节点并加载驱动。对GPIO操作前,应通过open()打开,使用后应通过close()关掉。
首先。选取开发板上没有使用过的GPIO端口,设定其输入/输入状态,之后按照顾客端返回的信息对端口进行操作,输出0/1的电平,以使其外部联接的熔断器动作。因而控制设备的运转。程序主要通过函数ioctl来实现。ioctl是设备驱动程序中对设备的I/O通道进行管理的函数,通过它可对设备的一些特点进行控制.其函数原形为:
intioctl(intfd,indcmd,…);
其中,fd是用程序打开设备时,使用open函数返回的文件标识符;cmd是用户程序对设备的控制命令;至于旁边的省略号,则是一些补充参数(通常最多一个,有或没有是和cmd的意义相关的)。在这儿,可通过如下一组函数来实现:
ioctl(fd1,GPIO_SET_PIN_IN,devicel);
//设置管角为输出状态;
ioctl(fd2,GPIO_SET_PIN_OUT,devicel_state);
//设置管角为输入状态;
ioctl(fd2,GPIO_READ_PIN,&devicel_state);
//读取设备状态管角;
ioctl(fd1,GPIO_CLR_PIN,device);
//消除设备管角控制讯号;
2.3网路通讯程序
网路通讯程序可使用TCP/IP合同下标准的socket套接字编撰。套接字(socket)是网路通讯的基本操作单元。它提供了不同主机间进程单向通讯的端点。这种进程在通讯前应各自构建一个socket,并通过对socket的读/写操作实现网路通讯功能。常用的套接字有两种:流式套接字(StreamSocket)和数据报套接字(DatagramSocket)。其中,流式套接字是可靠的面向联接的通讯数据流,是无错误的传输;而数据报套接字则使用UDP来传送数据包,数据包的次序是没有保障的。本系统采用流式套接字进行程序设计。
流式套接字的服务进程和顾客进程构建联接及通讯的程序流程如图3所示。现具体说明如下:
(1)服务进程首先调用socket()创建一个流式套接字,并调用bind()将服务器地址捆扎在该套接字上,接着调用listen()窃听联接恳求,此后调用accept()做好与顾客进程构建联接的打算。无联接恳求时,服务进程被阻塞;
(2)顾客进程先调用socket()创建流式套接字,之后调用connect()向服务进程发出联接恳求;
(3)当联接恳求到来后,服务进程被唤起,并生成一个新的流式套接字。同时用新套接字同顾客进程的套接字构建联接,而服务进程最早生成的套接字则继续用于窃听网路上的服务恳求;
(4)服务进程和顾客进程通过调用send()和recv()来交换数据,服务器可向顾客端传送所搜集的数据。顾客端则向服务器反馈控制信息和参数调整信息;
(5)服务进程或顾客进程可通过调用close()来撤销套接字并中断联接。
服务器端的程序通过交叉编译环境编译后。可通过NFS(网路文件系统)下载到开发板中,之后自动加入到rc引导文件中。即可实现开机手动运行。
结束语
基于ARM和uCLinux嵌入式系统代表了目前嵌入式系统的发展方向。嵌入式系统与网路技术和控制技术相结合.是嵌入式系统发展的必然趋势。本文讨论了基于ARM+uCLinux平台的网路控制系统设计与实现方式。并对该平台下应用TCP/IP合同进行网路通讯进行了阐述。该方式对于手动化楼宇、工业控制、智能家饰等方面都有一定的借鉴意义。