当前位置:Linux教程 - Linux文化 - 运行在网络处理器上的嵌入式Linux系统

运行在网络处理器上的嵌入式Linux系统


摘要:网络处理器已经可能的未来的多核处理器会将越来越多的应用在从家庭,企业到核心网络设备中,Linux OS正在替代传统的RTOS运行在这些处理器的控制平面,定义和处理好数据平面和控制平面的接口,丰富的开源和商业应用软件和电信级别的高可能性要求是目前需要解决的重要问题。

关键字:网络处理器,嵌入式Linux,多核处理器

引言:

在最近的24个月中,由于供应商组织面临经济状况不景气,加上Intel IXP 和 IBM Power NP,Raza,Cavium,Xilinx等公司的网络处理器(多核处理器)的出现,使得Linux在基于这些处理器设备的控制和管理层面上有了更多的用武之地。

控制层面包括逻辑和物理接口,它们本身并不传输网络数据,而是启动,监视和控制芯片的传输数据活动。在现有的网络处理器设计当中,像Linux这样的嵌入式操作系统通常运行在控制层面的处理器上,代表包引擎进行控制操作和事务性处理,实际的网际协议包(IP包)由专门的芯片进行处理。控制层面的处理器和数据/转发层面的包处理引擎之间的连接,可以通过连接协处理器的本地总线方式,或者直接使用标准的PCI总线,也可以采用以太网或者特殊应用的网络结构那样的连接方式。

在本地总线或者PCI总线的情况下,主控处理器将可将转发/数据层面的处理器视为专用外设,它具有简单内存映射接口。在采用网络方式来连接各层面的情况下,主控处理器必须使用分离的设备驱动设计。首先,结构接口需要一个通用的驱动(以太,异步传输等),通过它发送专门的命令包来控制包处理器。嵌入式Linux具有丰富的网络功能(以太网和ATM在开源社区都很容易获得),与非开源操作系统相比具有显著的优点:无须定制,有现成的内核。这些对于开发专门的网络系统,即使是以太网驱动都是重要的附加投资。

现成的网络处理器一直努力地将高性能网络紧密地与主控处理器捆绑,并与本地连接集成到一起。第一代设计在控制节点和数据层仍然遇到了带宽限制的难题-数据包在进出控制层时遇到瓶颈,在网络处理器内部的并行包引擎也有同样的问题。此外,实践证明在功能强大的网络处理器和复杂的包引擎集上编程非常困难。网络处理器开发商在他们的芯片开发计划上标明了解决这些问题和推出新一代的库和工具箱的时间表。 运行Linux的网络处理器应用

主要的设备制造商将Linux和网络处理器一起发布,同时不断增加应用的数量,特别是网络基础件和客户端设备。

Linux在网络处理器平台上的一个重要应用领域是小型办公,家庭办公(SOHO)设计,比如接入点,家庭网关和数字媒体服务。这些消费电子领域的设备通常要求高性能和低成本。

许多这样的设计包括先前遗留下来的实时操作系统平台。人们对嵌入式Linux能否满足这些实时性能有些疑问。很多控制层面的应用,更多地关注吞吐量,而并没有硬实时的需求(抛开先前的实时操作选择)。较新的,基于网络处理器的设计很少对控制处理器有及时响应的需求,网络处理器包含专门的芯片来完成要求及时响应的操作。当控制层面必须满足严格临界时间要求时,比如在消费电子应用中所使用的路由和桥接到特定的同步接口的技术,在Linux中有多种途径来达到实时响应的要求,其中包括现在Linux2.6内核里所使用的MontaVista软件公司的可抢占技术。

在较大型系统,比如更复杂的基于IP的系统,包括办公中心和涉及IP技术的基础设备应用系统,高速接入和交换,网络处理器都采用了有两层或者更多层控制来进行刀片式设计,并在其上来进行硬件和软件的管理。大约60%的这种系统要求在数据和控制层面有高级别的冗余。在这种系统中,基于网络处理器的刀片和基于Linux的控制器被当成低层的,几乎是‘原子’性的接口,这些接口从属于故障恢复(fail-over),它们堆叠在一起来获得高可用性和容错管理。

这些较高层次的管理层面处理器越来越多地在运行Linux ,比如开放源码开发实验室公司(OSDL, Beaverton, Ore.)、MontaVista软件公司、英特公司(Santa Clara, Calif.)等定义和实现的电信级Linux 。这些管理层面的CPU管理可用的资源(比如启动刀片和给他们分配负载)、响应硬件和软件异常,提供应用桥接到专门的系统(常常运行Linux)-比如帐单系统和客户数据库。 网络处理器开发的技术挑战和对策

对于多核微处理器来说,网络处理器面临着多种开发和调试的挑战。这些挑战包括以下三个层次:

· 开发和部署运行在网络处理器上的代码和包处理算法;

· 定义网络处理器和控制 处理器之间的接口;

· 开发控制层面的应用

对于运行嵌入式Linux的控制层面处理器来说,网络处理器初看起来就像一个巨大、复杂且未被支持的外设。在最简单的情况下,内核启动代码或者驱动程序初始化代码中会对共享内存和寄存器的组合进行映射,这些寄存器代表了网络处理器在内核或用户内存的接口。这样驱动程序和应用程序就可以同网络处理器进行交互操作。这种映射关系能够通过调用用户层的API、或者直接调用驱动有关的API来终止它,或者也可以终止包含一个分离协议栈的底部,或者中止建立套接字或者基于流的抽象。。

主要设备制造商指望Linux平台提供商和构建不断增长的生态链的独立软件提供商,能够付出努力来建立网络处理器为基础的网络应用。这些由独立软件提供商提供的应用模块有以下几类:

·包处理算法,桥接口和特定的网络处理器针对运行在数据层面的网络引擎开发工具(包引擎代码汇编器,仿真器和性能分析器);

·控制和管理层应用单元-简单网络管理协议(SNMP)代理和管理信息(MIBs),Web控制接口等,协议栈,路由守护进程,控制和数据层接口库;

·用于类似于家庭网关和安全应用这样特定应用的大协议栈;

·用于Linux的其他系统和应用开发工具。

使用网络处理器接口和为嵌入式Linux 提供IP的公司包括:Ashley Laurent, Hughes, IP Infusion, LVL7 Systems, NextHop Technologies 和 Motorola 的 Netplane Systems,他们提供栈和库。像Intel和IBM这样的芯片提供商,还有Teja技术公司这样的独立软件提供商,他们所提供开发工具填补了用于特殊网络处理器芯片、特定体系结构的开发工具的空白。

这些大栈支持和实现了多达90%的网络处理器应用,它们可能是平台供应商的附加产品,也可能是小型软件供应商集成产品。这些栈引起了第二级和第三级设备制造商(OEM)和设计制造商(ODM)的兴趣,ODM和OEM的唯一差异是他们的商标或者是价格的不同;这就使网络设备制造商在可以预计未来的情况下,继续进行投资并使得它们自己网络处理器上的应用不断升级。

因为许多网络处理器也将JTAG接口集成到控制处理器和包引擎当中,在某些情况下,开发者可以使用像Abatron AG,Embedded Performace、Wind River以及其它公司提供的通用硬件调试器来调试控制层面的有关操作,也可以把程序下载到网络处理器的包引擎,并和它直接进行交互。

网络处理器和嵌入式 Linux联姻后,硕果最多的要数Intel的IXP425家族与基于Linux的接入和网络存储应用栈。比较好的例子是D-Link媒体存储中心家用设备。D-Link和其他主要设备制造商(OEM)充分发挥了Xscale控制/应用处理器和高性能网络处理器集成的功能。在D-Link的产品中,台湾的OEM制造商以这种硬件为基础进行了开发,使用集成的包处理器能很容易地提供快速和安全的以太和无线连接。D-Link将这种硬件平台,与Linux自带的路由,多种协议、多种存储格式能力结合起来,给消费者提供了即插即用的网络存储解决方案。其他最近发布的基于Linux的网络处理器应用还包括ThingMagic 的RFID系统。

结束语:

将来由于互连网络的发展将会有很多针对家庭,SOHO,企业和基础设施的应用和网络处理器+LINUX OS 密切相关,它们包括接入点,有线/无线存储解决方案,虚拟网络,安全应用,数字用户线路接入多路复用器和xDSL线卡,网络打印机,驻留网关,IP/PBXs, SOHO 路由器, 还有其他一些支持从OC-3 到 OC-192高速网络的核心/边缘应用 。

本文参考了Bill Weinberg的文章 ,他现是OSDL的开源架构专家,在OSDL之前是MontaVista 市场策略总监,曾经在Microtec Reseach,Lynuxworks等嵌入式软件公司任职,有近20年的嵌入式软件的经验。