基于linux的嵌入式软交换soho级别路由器的实现(一)
前言
一套通信协议的实现除了硬件编/解码与信号传输之外,其余的部分均可以有所选择的由软件或者硬件实现。好比最普通的RS232协议,如果你的硬件系统集成了相关模块,CPU直接从缓冲区读写数据即可,否则就要自己模拟时序,深入到协议细节里去。TCP/IP协议也一样,一般的通信芯片都会集成两层和三层的转发控制,MAC表和路由表都存在通信芯片的寄存器里,用户只要将关键信息写入寄存器即可实现转发。
至于如何平衡软件控制与硬件控制,由项目的实际需求与工程师的具体经验决定。在通信行业,一个庞大的项目会面临巨大的均衡负载的问题。此时,一个好的架构/解决方案也许卖得比一套产品还贵。而对于一个相对较小的项目,比如SOHO级别的家用路由器,压缩单个产品的成本就显得至关重要。动辄几十美刀的通信芯片显然太贵,于是主芯片只集成wifi模块,其余大部分协议用软交换实现的路由器芯片就有了用武之地。
主要架构分析
路由器可以简单得抽象成一个图灵机,即在输入给定封包的情况下,输出处理过后的封包。但同时要实现一定的用户接口,一旦用户通过用户接口输入命令后,图灵机的内部算法就应该有所改变。大致的模型如下图:
用户接口可以由网页和命令行来提供,而因为linux内核里实现了tcp/ip协议,并有相当丰富的文档和开源代码,所以把软交换交给linux内核来处理。
具体工作
一般来说,芯片供应商会提供该芯片的linux版SDK,不同的厂商会对SDK进行不同层次的移植。
用户接口层
有些公司将SDK上的网页改上自己的logo就立马上市,这样产品的研发周期的确很快。缺点是不能对路由器的功能进行定制,而且很难让不同的产品形成统一的界面风格,产品也更加难以迭代。假如使用风格统一的界面,再重写web接口,实际上这样做会使每个产品都需要再验证每个功能的稳定性,工作量非常大。
APP层
这些公司有一套已验证的APP,在这些APP之上是风格统一的web界面。他们可以对相应的产品定制不同的功能,主要的工作量集中在硬件相关的代码移植上,特别是wifi模块的驱动。
驱动层
厂商提供的SDK驱动一般不会修改,除非板卡使用了非标准配件。
内核层
很遗憾,linux内核是有崩溃的可能的,而且内核级别的BUG极难重现和解决。凡是在这一层进行了大量工作的公司,路由器的稳定性一定会提升很多,但相应的边际成本也会很高。
编译器级别 有些极变态的公司,为了优化部分核心算法,会直接查看编译后的汇编代码,然后一条一条得优化。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。