前言

无论现在或将来,网络都是一个热门的主题。目前几乎所有的电子产品都具备不同程度的网络功能。网络功能的强弱和灵活度与其使用的操作系统对网络的支持程度有直接的关系。Linux操作系统从开发之初就是在Internet环境下实现的,网络子系统是Linux系统中最重要、最具特色的子系统之一,Linux内核中网络子系统在体系结构设计上的合理与灵活,使其可以任意地在现有Linux内核协议栈的基础上实现新的网络协议、网络功能特色、对新网络适配器硬件的支持。

Linux是开放源代码的系统,随着它的技术越来越完善,Linux的应用也越来越普及,现在更多的产品都选择把Linux作为其嵌入的操作系统。在全世界有无以计数的计算机研发人员和爱好者在使用、测试Linux操作系统,为Linux系统开发新的应用,使Linux的技术日趋完美。

使用Linux作为研发平台,与使用别的操作系统不一样,只能通过其提供的应用编程接口(API)函数来完成,无法清楚地了解其内部的实现原理,也就无法更好地在研究过程中对性能、效率等实施控制,有时为了满足应用的需求,需要费很大的周折。特别是做嵌入式开发时,更需要依据手上的资源和成本要求对开发过程实施控制。

Linux是开放源码的系统,可以通过学习和研究掌握其内部的实现,这无论对科研、学习还是系统开发都能带来巨大的好处,这样才能根据需要量体裁衣,定制自己所需的操作系统,去掉多余的功能,只保留最有效、最适用的部分。Linux内核的网络功能更是如此,网络子系统具有大量的可选功能,如防火墙功能、路由功能等,不是每个设备都需要配备所有的这些功能,特别是在嵌入式系统,配置Linux内核组件就显得尤其重要。

Linux网络体系结构比Linux内核中其他组件理解起来更困难,原因在于网络任务的实现被划分为好几个阶段,在不同的时间由不同的代码和进程来实现。如何将这些片段连在一起,各阶段之间的接口是什么,是研究Linux网络体系结构的一个难点。

笔者多年从事嵌入式Linux网络系统产品开发,在这个过程中了解到嵌入式系统的开发涉及硬件驱动、操作系统内核和系统应用3个层次。最终的嵌入式产品需要将以上3个部分集成,形成一个完整的可执行文件,下载至嵌入式芯片中。本书的目的就是以Linux内核的网络子系统为纵向线索,以Linux内核TCP/IP协议在网络子系统中的实现为实例,把与嵌入式网络应用开发相关的技术知识组织在一起,来讲解嵌入式Linux系统的应用开发技术、内核支持和硬件驱动程序开发的完整过程,以形成相关知识领域的完整体系结构,这样读者在研发过程中应用起来更得心应手。无论在做哪个部分的研发和学习:应用、内核、驱动程序,都能清楚地知道自己在做什么,上下之间如何联系。

Linux内核网络子系统的功能特色多,代码分散,所以本书的一个重要目的就是清楚地解释Linux内核中网络子系统的主要功能特色、设计原理和实现流程,并告诉读者如何跟踪分析其内部C源代码,如何将不同的代码实现片段串连在一起,并展示其函数功能和数据结构的相互关系,从而对具体的研究过程起到指导和帮助作用。Linux内核TCP/IP协议栈的实现技术是学习和研究操作系统中网络子系统的一个很好的样本和实例。

全书共分12章,按照TCP/IP协议栈分层结构,从如何驱动硬件、网络数据在TCP/IP协议栈中如何发送/接收,到网络应用程序开发技术,最后如何形成嵌入式集成系统的思路来安排各章节的内容。本书由电子科技大学教授、博士生导师罗蕾担任主审,罗蕾教授对本书的编写予以积极支持和认真指导,她仔细地审阅了书稿,提出许多宝贵意见,在此谨向罗蕾教授表达衷心的感谢。在本书编写过程中,还得到了电子工业出版社张春雨老师等的支持和帮助,谨向他们表示诚挚的谢意。

本书主要由单立平编著,其他参与编写的人员有姜云舟、单根全、单宏伟、王雪梅等。

由于本人水平有限,对书中的错误和不足之处,恳请广大读者批评指正,笔者将不胜感激。

编著者