描述了一种无内部互锁的信息平推流式的32位嵌入式微处理器下,嵌入式Linux操作系统环境的家庭网关的体系结构。通过这种构架的实现和二次开发相应的驱动程序、应用程序和管理接口并结合无线通信技术实现家庭网关,使家庭网关具备支持非对称数字用户环路、无源光网络、以太网数据通过同轴电缆传输等接入方式的上行接口,并提供网络电话、互联网协议电视、个人计算机、通用串行总线接口、通用异步接收/发送装置等下行接口和无线相容性认证的无线信号。家庭网关可以通过万维网浏览器、基于简单网络管理协议的管理方式和命令行界面等多种方式灵活的进行信息交互、配置、更新及远程控制管理。
随着以高速、融合、精品为特征的大宽带时代的全面到来,高宽带传输、全方位融合、多业务综合将是家庭网络及业务应用的发展趋势。预计未来的10年中,国内家庭网关的市场容量将在200亿元以上。尽管国内已有少数文献[5]描述了以无内部互锁的信息平推流式的微处理(Microprocessorwithoutinter-lockedpipedstages,缩写为MIPS)核的32位嵌入式微处理器作为硬件平台,开发家庭网关,并取得了较好的研究成就,但距离工业应用还有一定时差。结合无线通信技术,通过移植嵌入式Linux操作系统,在此基础上开发相应的驱动程序、应用程序和管理接口来实现家庭网关。家庭网关具备上行接口,支持非对称数字用户环路(AsymmetricDigitalSubscriberLine,缩写为ADSL)、无源光网络(PassiveOpticalNetwork,缩写为PON,)、以太网数据通过同轴电缆传输(EthernetoverCoax,缩写为EOC)等接入方式,提供网络电话(VoiceoverInternetProtocol,缩写为VOIP)、互联网协议电视(InternetProtocolTelevision,缩写为IPTV)、个人计算机(PersonalComputer,缩写为PC)、通用串行总线接口(UniversalSerialBUS,缩写为USB)、通用异步接收/发送装置(UniversalAsynchronousReceiver/Transmitter,缩写为UART)等下行接口,通过高速外围元件接口(PeripheralComponentInterfaceExpress,缩写为PCIE)与无线相容性认证(WirelessFidelity,缩写为WiFi)模块相连提供WiFi无线信号。家庭网关能够灵活添加应用程序、接口模块,远程管理家庭网络的智能终端设备实现业务的分发和配置管理控制。
1 硬件系统
1.1系统结构
家庭网关的硬件系统结构如图1所示,以32位的嵌入式MIPS微处理器芯片为核心,由外存储器闪存(FLASH)、双倍速率同步动态随机存储器(DoubleDateRate,缩写为DDR,)、WiFi模块、VOIP模块、网络交换模块、USB存储模块、发光二极管(LightE-mittingDiode,缩写为LED)模块、串口模块、电源模块等构成。
1.2系统功能与实现
家庭网关可以采用多种控制方式灵活方便地与用户进行交流[6]。外存储器暂存数据,再传递到微控制单元(MicroControlU-nit,缩写为MCU)中。闪存通过串行外设接口(SerialPeripheralInterface,缩写为SPI)总线与MCU 相连,DDR通过介质无关接口(MediumIndependentInterface,缩写为MII)与MCU 相连。WiFi模块通过PCIE接口与MCU 相连,提供2.4GHz的无线信号。VOIP模块通过MII接口与MCU 相连,其下端口联接普通电话机,可以通过电话机查询、设置家庭网关中VOIP口的网络状态。网络交换模块包括上联接口和下联接口。微处理器内部集成了一个交换引擎,提供五个符合802.3协议的10/100Mbps快速以太网MAC/PHY接口,可作为系统的上联端口和下联端口。上联端口为下行提供数据信号,下联端口可以连接IPTV、PC等设备,并能够自由组网配置成VLAN。USB 存储模块用于存储家庭网关的配置信息。
LED模块显示系统状态,由MCU 的通用输入/输出(GeneralPurposeInputOutput,缩写为GPIO)口控制,LED的不同状态表示系统的不同状态。串口模块结合超级终端实现实时打印家庭网关的运行状态信息,并可以设置家庭网关的配置信息,如环境变量、内存信息、相关版本信息等,也可以更新嵌入式家庭网关的文件系统、镜像文件等。电源模块为整个系统提供电源。
2 软件系统
家庭网关的软件系统结构如图2所示,主要分为3个层次:Linux内核包括进程管理、文件管理、内存管理、中断和中断处理、系统初始化等;硬件驱动层包括WiFi、VOIP模块、串口、以太网、LED 等的驱动;应用程序层通过内核的调用,实现相应的应用服务,如串口通信程序、Web方式访问等。
硬件驱动层主要是提供操作系统和应用程序所需的驱动[7]。该层主要由板级初始化程序、与系统软件相关的驱动、与应用软件相关的驱动等3种类型的程序组成。板级初始化程序即引导加载程BootLoader,用来完成整个系统的加载启动任务。在该系统中选择U-Boot作为引导加载程序。系统上电后,U-Boot程序初始化系统的硬件环境,如:嵌入式微处理器、中断控制器、存储器、直接内存存取(DirectMemoryAccess,缩写为DMA)和定时器的初始化。将系统的软硬件环境带到一个合适的状态,以便为后续调用操作系统做好准备。与系统软件相关的驱动是操作系统和中间件等系统软件必备的驱动程序,具体开发按照系统软件的不同需求进行。操作系统内核所需的硬件支持一般都已集成到嵌入式微处理器里了,因此开发人员只需在操作系统厂商提供的内核驱动的基础上编写相关驱动程序如:以太网驱动、串口驱动、外存驱动等驱动程序。与应用软件相关的驱动不一定需要与操作系统连接,这些驱动的设计和开发由实际应用决定。
Linux操作系统移植主要包括BootLoader的编写和移植、Linux内核移植与配置以及Linux文件系统移植与配置[8]。
2.1U-Boot移植
该家庭网关系统的BootLoader采用U-Boot。在U-Boot/Board目录下添加家庭网关开发板的配置文件,修改U-Boot目录下的Makefile文件,包括设置编译环境和建立编译配置项。确认默认的交叉编译器与本机的交叉编译器是否一致,若不一致则需要对编译环境进行重新设置,宿主机的交叉编译器为gcc。建立编译配置项,在Makefile文件中添加编译语句,如:
gw_config:unconfig
@ >include/config.h
@echo"#defineCONFIG_mipgw1"烅include/config.h
@./mkconfig-agw mipsmipsgw mipgw mipgw
在U-boot/Board/gw目录下添加Makefile文件,建立文件之间的依赖关系。如:
OBJS=$(BOARD).oflash.o../common/mipgw_pci.o ../common/mipgw_flash.o ../common/
mipgw_s26_phy.o
通过引用变量来指定目标文件,以便于适用于该模块的不同版本的开发,也是该系统的一个特点。在U-Boot/CPU/MIPS的目录下添加存放内存控制器的配置文件。
在U-Boot/Board路径里添加初始化MCU的USB配置、GPIO 口的配置、寄存器、数据段的文件和初始化WiFi模块主芯片GPIO 口的文件。
2.2Linux内核移植
操作系统层包括嵌入式内核、TCP/IP(TCP-TransferControlProtocol,传输控制协议,IP-Internet Protocol,网际协议)网络系统、文件系统、图形用户接口(GraphicalUserInterface,缩写为GUI)系统和电源管理等部分。其中嵌入式内核是必备的基础部分,其他部分可根据嵌入式系统的不同需要进行取舍[9]。在家庭网关系统中,嵌入式操作系统环境为Linux操作系统,嵌入式内核为MIPS内核,文件系统为jffs2。
在系统软件包的根目录下创建Linux目录,在其目录下添加Kernels文件夹,存放Linux内核源码。修改内核源码文件夹下的Makefile文件,使其编译环境与宿主机的编译环境一致,具体代码如下所示:
SUBARCH := mips
ARCH ? = $(SUBARCH)
CROSS_COMPILE ? =
UTS_MACHINE := $(ARCH)
CONFIG_SHELL := $(shellif[-x"$$BASH"];thenecho$$BASH;\
elseif[-x/bin/bash];thenecho/bin/bash;\
elseechosh;fi;fi)
HOSTCC= gcc
HOSTCXX= g++
HOSTCFLAGS=-Wall-Wstrict-prototypes-O2-fomit-frame-pointer
HOSTCXXFLAGS=-O2
2.3文件系统移植
嵌入式文件系统包括Ramdisk、Jffs2、Yaffs、Cramfs、Romfs和Ramfs/Tmpfs[10]。该系统的文件系统选择Jffs2。在文件系统的文件夹Rootfs里添加rcS文件,指定需要挂载的文件系统、挂载点、配置初始化进程及解压后存放的位置,通过环境变量来传递接口。rcS文件的具体内容如下所示:
#! /bin/sh
mount-a
mount-oremount+w/
mount-tramfs-nnone/tmp
exportPATH=$PATH:/etc/ath
insmod/lib/modules/2.6.15/net/ag7240_mod.ko
exportETH0=eth0
exportETH1=eth1
ifconfig$ETH0up
ifconfig$ETH1up
2.4内存管理
操作系统中的内存管理单元负责管理整个系统的物理地址空间和虚拟地址空间,它是这个系统得以存在和运行的基础[11]。该家庭网关系统中,数据均存放在4M 的闪存里,当系统启动后再将数据通过DDR 映射到MCU 的RAM 中,从地址0x81000000开始。
3 管理接口
3.1Web接口
Web功能是家庭网关系统提供给用户的面向对象的操作接口。用户通过WEB浏览器访问,可以对家庭网关的各功能模块进行设置,即对连接在家庭网关上的设备的管理控制。如:对以太网口进行VLAN 配置,自由组织虚拟网络;对VOIP口的网络状态进行配置,自行设置IP、VOIP业务等信息;对WiFi模块进行设置,选择虚拟信道、设置无线网络的参数等。家庭网关的软件系统通过常见的应用程序接口模块CGI,连接CGI接口和处理HTML静态文本文件实现Web功能。
Web服务器选择Httpd服务器,通过移植Httpd源码并融合在Busybox里实现。在cgiMain()函数中描述了Httpd服务器建立服务、接收请求、处理请求、日志文件及断开连接的过程。在Httpd.c文件中添加函数来设置Web服务器的配置,使Web服务器启动时就能根据当前环境完成Web服务器的配置。指定的HTML页面文件放到/usr/www 目录下,cgi外部扩展程序放到/usr/www/cgi-bin目录下,把链接融合在cgiMain里。通过在cgiMain()函数里调用环境变量建立服务器与CGI程序之间的信息交互,从而实现各个网页文件之间的链接。
如果家庭网关的IP地址为192.168.100.12,把家庭网关与PC机连接在同一个网络里,在Web浏览器地址栏输入192.168.100.12即可显示家庭网关的配置页面。可以实现各个页面之间的动态连接,修改家庭网关的配置参数。
3.2CLI接口
加载简单远程登录服务器Telnetd,通过命令行界面(CommandLineInterface,缩写为CLI)方式,使Telnetclient就可以登录到家庭网关系统,结合CLI提供的各种命令接口,实现对家庭网关的配置、测试和升级等操作。在家庭网关的软件系统中,Telnetd工作时连接一个伪终端设备,然后创建一个登陆进程,在伪终端侧有标准的输入、输出、错误。Telnet操纵的伪终端主方执行telnet协议并传递远程客户端和登录过程中的字符。
在命令行窗口输入“telnet192.168.100.12暠出现用户名、密码提示窗口。输入正确的用户名和密码,即可访问家庭网关,查看系统的文件。打开TFTP服务器,通过命令tftp可以更新页面文件等。
3.3UART接口
初始化MCU内置的UART接口,设置串口属性如:波特率为115200、8位数据位、无奇偶校验、1位停止位、无流控。通过超级终端人机交互界面可以和家庭网关进行信息交互,实时监控家庭网关系统的运行状态、修改控制各类配置信息、更新U-boot、Linux内核、文件系统、映像文件等。
打开超级终端、TFTP服务器,设置串口属性,启动家庭网关后,即可打印输出家庭网关的运行状态。进入更新文件状态,设置环境变量,如输入:
tftp0x80060000u-boot.bin//将u-boot.bin文件放在缓存区
erase0x9f000000+0x40000//擦除存放U-Boot文件区域的内容
cp.b$fileaddr0x9f000000$filesize//把缓存区的文件复制到存放U-Boot文件的区域
即可更新U-Boot文件。按此命令格式,输入对应的文件名和地址,文件系统、映像文件也同样可更新。
4 结语
该文描述了一个以MIPS微处理器为核心、以嵌入Linux操作系统为开发环境的家庭网关。该家庭网关通过移植U-Boot、Linux内核、文件系统定制软件系统,添加Web、CLI、UATR 等接口功能,实现通过Web、CLI和SNMP等多种方式灵活的与家庭网关进行信息交互、配置、更新。经测试[13]该家庭网关系统实现了多业务功能,上联接口支持多种接入方式能够为网络交换模块提供数据信号,下联接口能提供VOIP功能、2.4GHz的无线信号,以太网口之间能自由配置VLAN。
试验测试的结果表明,该家庭网关适合高宽带传输、全方位融合、多业务综合的家庭网络及业务应用的发展需求。