(2)增加ARM-Linux内核的PPP支持。内核中与PPP协议相关的配置选项都包含在“Network device support”选项下,需要选中的选项包括PPP协议支持、PPP异步/同步串口通信以及PPP压缩等。
(3)移植IPTables和PPP应用程序。IPTables是Linux系统上用来创建NAT规则的一个开源的工具程序,从网络上可以下载其源码。PPPD是PPP的一个应用程序,为PPP提供一种在点对点串行线路上传输数据流的方法,而Chat则是PPPD一个配套程序,它用来拨号并等待提示,然后根据提示输入用户名和密码等登陆信息。可以从网络上下载IPTables和PPP源码,然后根据源代码版本使用相应版本的ARM-Linux交叉编译器进行编译,便可以得到相应二进制程序。
(4)编写联网拨号脚本文件,调试GPRS/CDMA联网, 完成系统利用成熟GPRS/CDMA技术的网络连接。
3.系统实现
通过对完善增加ARM-Linux内核的功能后,ARM-Linux内核已经具有了PPP和NAT功能,同时通过编写联网拨号脚本,完成与GPRS/CDMA网络连接之后,需要根据设备的具体应用需求开发相关的应用程序。
3.1 NAT配置
嵌入式Linux是一种开发源代码、软实时、多任务的嵌入式操作系统,通常它是在标准的Linux的基础上针对嵌入式系统进行裁减和优化后形成的,而且裁减和优化后的Linux体积更小,性能更加稳定,因此在许多实际应用中都使用网络地址转化技术(NAT)这种最为简单、常用的方式。
NAT技术本质上是通过修改IP包的源地址或目的地址来实现。如果一个节点执行了NAT,它会修改通过它转发的IP包的源地址或者目的地址,并且节点会记住它是怎样修改了这个包,因此当相应的应答包从另一个方向到达时,它就知道如何反向修改应答包。其中,修改IP包的源地址常被称为IP伪装技术,当内部网络节点作为客户端,需要发起对Internet的访问时,就可以采用这种方式。而修改IP包的目的地址中最常用的就是端口转发技术,它可以让内部网络上运行的服务器,如Web、FTP等,能够被外部网络的机器访问。
根据应用需求,制定相应的NAT规则。对于各种NAT应用,需要使用IPTables程序来设定相应的控制规则。例如,实现应用中的IP伪装功能,在控制台中运行下列命令:
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
第一行指令是用来开启操作系统的IP转发功能,如为方便开机自动执行也可以将命令编辑为文件firewall,然后编辑/etc/rc.d/rc.local文件,,在末尾加上/etc/rc.d/firewall以确保开机时能自动执行该脚本。第二条命令则是设置所有通过ppp0设备(拨号后生成的网络设备)发出的数据报的源地址都使用ppp0的IP地址。这样,与GPRS/CDMA数据相连的局域网内的计算机只需要将网络连接的默认网关和DNS服务器设置成GPRS数据终端的IP地址就可以访问Internet。
而对于NAT的端口转发功能,如假定GPRS数据终端的内部IP为192.168.0.1,通过拨号上网得到的IP为202.96.128.168,运行Web服务器的计算机节点的IP为192.168.0.100,监听常用的80端口。那么需要在GPRS/CDMA数据终端上进行端口注册,假定将该服务注册为GPRS数据终端上的TCP 8080端口。则运行命令:
$ iptables -A PREROUTING -t nat -p tcp -i ppp0 --dport 8080 -j DNAT --to 192.168.0.100:80
完成端口注册并开启IP转发功能后,外部用户通过访问http://202.96.128.168:8080就可以访问到内部的Web服务器了,但在一般的实际应用中都是将上述Shell命令和NAT规则编写为一个可执行的脚本文件,由系统启动后自动调用执行。
3.2 转换网关程序
在传统的工业控制领域,有成千上万的感应器,PLC,控制器,监测器,读卡器等RS-232/485/422串口设备,都是通过RS-232串口通信或者RS-485/42总线通信与PC进行数据通信,随着社会需求的发展,从而要求更大的系统,更加稳定的系统,更大的数据流量的系统。使得现有的RS-232串口通信,RS-485/422总线通信不能满足社会的需求。需要一种简单、经济的方式,能将这些传统设备接入主流网络,同时不需要对这些设备的结构进行改变。当将GPRS/CDMA无线数据终端应用于这种需求时,就必须在它上面实现串行通信转网络(TCP/IP)通信功能。
转换网关程序实际上就是在GPRS/CDMA无线数据终端完成串行通信转网络(TCP/IP)通信功能模块,能够将串行通信数据以TCP/IP包的形式发出,而将收到的TCP/IP数据包用串行通信的方式传输,完成相互间的透明转换。在许多应用中,需要通过无线终端与Internet网络上服务器进行网络通信。转换的实现方法如下:
⑴ 通过配置文件或者命令行参数的方式得到所需的各种配置参数,包括串口设置参数,如波特率、数据位、停止位、奇偶校验、流控等,以及网络通信的设置参数,如网络通信协议、服务端口等等;
⑵ 根据串口设置参数进行相应的系统串口设置;
⑶ 根据网络通信设置,建立Socket,如果网络通信采用的是TCP协议,还需要预先建立网络连接。
⑷ 使用Linux的select机制,不断检查Socket和串口是否可以发送和接收。程序必须同时维持两个缓存区,一个是Socket数据缓存,另一个是串口数据缓存。如果Socket有数据获得就放入串口数据缓存中,串口有数据获得就放入Socket数据缓存。如果Socket或串口可以发送,就将相应的缓存数据发送出去。
编写完成上述程序运行后,无线数据终端便充当了串行通信设备与以太网之间的通信转换器的角色,实现了两者间的信息交互。
4.结束语
本文在ARM9的嵌入式Linux平台上,详细介绍了基于AT91RM9200的无线数据终端的实现,利用嵌入式Linux系统下的网络通信设计, 通过对Linux的内核进行了修改和重新编译后,增加了相应的PPP和NAT功能,凭借ARM9的良好性能,以及Linux在嵌入式系统和网络通信上的优势,编写实现串行通信转网络的转换网关程序。本系统的设计在其他嵌入式设备上的无线应用方面有一定的应用价值和指导意义。
本文创新点充分利用了ARM丰富的硬件资源简化了系统结构,并通过对嵌入式Linux系统核心编译增加对NAT和PPP的支持,同时移植成熟的IPTables和PPP应用程序,实现应用系统的结构简化,实现简单,功能实用。