Linux 2.6 扩展多平台支持的一个主要途径就是把uClinux的大部并入了主流内核(mainstream kernel)。uCLinux(可以发音为"you-see-Linux",但更正确的拼写,首字母应该式希腊字母"mu")是将Linux应用在微控制器平台的项目。很多年来,这个Linux分支为许多嵌入式芯片提供了支持,把它更多的集成到主流内核中是一件非常有意义的事。
Linux 2.6除了对许多新的处理器体系结构外,还包含了一个称为子体系结构(Subarchitecture)的新概念。以前,Linux通常假设处理器和其他硬件是配套的。也就是说,i386系列处理器只会在PC/AT服务器上使用。这条针对i386的假设在Linux 2.4中就被打破,因为i386的额外支持使其可以在SGI的视频工作站(Visual Workstation)中使用。(事实上,在其他非i386体系结构上,这个假设早被打破了。比如,m68k很早就支持Amiga,Michintosh等平台。)Linux 2.6对于此最大的变化就是,让这个特性以及概念成为标准,以便所有的体系结构都可以用相似而健全的方法来处理,以便更清晰地划分模块。
Linux 2.6还解决了一个更为深刻的稳定性问题:内核将不会分配多于系统中RAM(加swap)数量的内存。此前,Linux在一些即使系统内存耗尽的情况下,仍然允许malloc操作分配内存成功。过量分配(overcommitment)逻辑得到修改,使得这种情况现在不再可能出现。(当然,如果你耗尽了系统的RAM,即使没有超越最大可用数量--你需要担心更更严重的问题。)
在无线设备空间,有着类似的主要改进。IrDA(以 Infrared Data Associates group命名的红外线协议)部分自上一主要发布以来有一些改进,比如电源管理、集成进了新的内核驱动模型。真正的改进还在于提供了对蓝牙设备的支持。蓝牙是一种新的无线协议,它设计为短距,功耗很低,也没有 IrDA 中的"视线"的限制。作为一种协议,蓝牙被设计为"到处可用"。它已被应用于多种设备,如 PDA,移动电话,打印机,以及更为怪异(bizarre)的设备如车载设备。协议本身由两种不同的数据连接类型组成:用于有损音频应用的SCO(Synchronous Connection Oriented,面向同步连接);以及可以支持重传等更为强壮的连接L2CAP(Logical Link Control and Adaptation Protocal,逻辑连接控制和适配协议)。L2CAP 还进一步的支持各种子协议,包括用于点对点网络的 RFCOMM 以及用于类以太网的 BNEP。Linux对采用蓝牙技术的设备的支持在不断提升,我们可以相信,当足够多的采用蓝牙技术的设备被使用时,这种支持将会非常成熟。值得一提的是,对蓝牙最初的支持已经集成到了2.4系列内核后几个版本中。
块设备支持
存储总线
在2.6的开发中,IDE/ATA、SCSI等存储总线也都得到了主要的更新。最主要的改变集中于被重写(再一次被重写)的 IDE 子系统,解决了许多可扩展性问题以及其他限制。比如,现在 IDE CD/RW 设备可以直接通过IDE磁盘驱动程序进行写操作,这种实现方法比过去的方法要简洁的多。(在以前,需要再使用一个特别的SCSI模拟的驱动程序。这样显得很混乱,而且实现起来有困难。) 现在,遇到一个不能识别的控制器时,IDE 层可以查询机器的 BIOS 信息,从而获取时序操作所需数据或其他数据。SCSI部分有不少散布于系统中的小的改进,使之能支持更多的设备,同时提升了可扩展性。一个针对旧式系统的特别改进是,现在的 Linux能够支持 SCSI-2多通道设备(这种设备在单个设备上有多于2个的 LUN)。另一个重要的改进则是现在 Linux 能够默像 MS Windows那样检测介质的变动,以更好地兼容那些并不完全遵照标准规范的设备。既然这些技术历经时间的考验稳定下来,那么 Linux 也提供对它们的支持。
Linux现在也包含对新一些的机器的EDD(Enhanced Disk Device) BIOS进行直接访问的支持,这样便可以获得服务器中的磁盘设备视图。EDD BIOS包含所有连接到系统的、BIOS识别的存储总线(包括IDE以及SCSI)的信息。除了获得连接设备的配置以及其他信息之外,它还有另外几个优点。比如,这种新的接口使 Linux 能够知道系统是从哪一个磁盘设备上启动的。这在新一些的系统上非常有用,因为这样的系统中到底是从哪一个设备启动的常常不明显。智能安装程序也可以考虑使用这些信息,比如在决定把GRUB(一种Linux启动装载器)安装在哪里时。
人机接口设备 Linux 2.6中一个主要的内部改动是人机接口层的大量重写。人机接口层是一个Linux系统中用户体验的中心,包括视频输出、鼠标、键盘等。内核的新版本中,这一层的重写以及模块化工作超出了以前的任何一个版本。使用新内核构建一个不包含对显示器等的支持的完全"headless"的Linux系统是可能的。嵌入式系统开发人员或许会是这一模块化工作的主要受益者,可以制造出只能通过网络或串行线管理的设备;另一方面,对普通用户也是有好处的,因为许多关于设备及体系结构的内在假设被模块化了。比方说,之前总是假定如果你拥有一台PC,那么你一定需要对标准AT(i8042)键盘控制器的支持。在 Linux 的新版本中移除了这一要求,因而可以在不那么遵照传统的系统中抛开不必要的代码。
Linux对广播卡的支持(通常是通过用户空间实现历经了好几个开发周期,而对电视调谐器和视频摄像机的支持只是在最近的1、2个主要版本中才有。此系统通常称为V4L(Vedio4Linux 译者注: "4" for "for"),在新版本的内核开发中得到了重大更新,包括API的清理工作以及对设备更多功能的支持。新的API与旧版本不兼容,支持它的应用程序需要随内核的升级而升级。
作为一个全新的领域,Linux 2.6首次包含对DVB(Digital Video Broadcasting,数字视频广播)硬件的支持。这种硬件常见于机顶盒,它可以使得Linux服务器通过适当的软件变为一台tivo(类似机顶盒的设备)。
软件方面的改进
Linux的改进并不只关注于硬件及其它基础设施。没有支撑软件(如文件系统及网络协议),硬件支持将毫无意义(just so much a dead wood)。
Linux 2.6也提供了一个分离的LLC栈。LLC,即逻辑链路控制协议(IEEE 802.2),是一个底层协议,在若干个常用的高层网络协议之下使用,如Microsoft的NetBeui,IPX,以及AppleTalk。作为修改的一部分,IPX,AppleTalk,以及令牌环驱动程序都已被重写,以利用这个新的公用子系统。此外,一个外部源(an outside source)整合了可以工作的NetBEUI协议栈,它是否要被加到的标准内核中还有待研究。
Linux 2.6中,NFS文件系统得到了很大的更新和改进。最大的改进就是实验性地支持新的并且还没有被广泛接受的NFSv4协议(以前的linux版本支持NFS2和NFS3两种协议)在客户端和服务器端的实现。新的版本有更强、更安全的身份认证(采用加密技术),支持更智能化的锁管理,支持伪文件系统等。Linux还没有实现所有NFS4的新特征,但是目前的版本已经比较稳定并且能够支持一些产品级的应用。并且,基于Linux的NFS服务端的实现已得到改进,从而具有了更好的扩展性,更好的完整性(支持UDP还支持TCP),更健壮(文件系统在输出文件的时候能够进行调整以维持它们自有的一些特征),更简便的管理(通过新的nfsd文件系统,而不再是系统调用)。还有其他方面的一些改进,比如分离lockd和nfsd,支持零拷贝传输等。NFS客户端也因为底层RPC协议在缓存机制、UDP连接控制以及其他在TCP协议上的改进而受益。Linux支持NFS共享卷作为根文件系统的功能也因为核心对TCP协议上的NFS的改进而改进。
除了改进对UNIX风格的网络文件系统的支持,Linux 2.6对于Windows类型的网络文件系统的支持也进行了改进。Windows服务器(也包括OS/2和其他一些操作系统)的标准共享文件系统是遵循SMB(server message block)协议的,Linux核心在SMB协议的客户端对该协议的很多版本都已经有了非常优秀的支持。然而,Windows2000将SMB协议的一个超集的升级版标准化了,即熟知的CIFS("common internet filesystem")。CIFS修改的主要目的是简化与精炼SMB协议中一些比较混乱的部分。(注:协议之前的定义很松散,甚至会出现Win95/98/ME版与WinNT/Win2k版不兼容的情况。)CIFS达到了修改的目的,并且增加了UNICODE支持,改善了文件锁,支持硬链接,彻底消除了对NetBIOS的依赖,并给Windows用户增加了一些新的特征。既然Linux用户不打算始终呆在被遗忘的角落(译者注:CIFS是Windows系统提出的标准,之前仅在Windows系统之上有实现),Linux 2.6核心对本地安装CIFS文件系统的部分彻底进行了重写。Linux 2.6现在也支持SMB和CIFS的扩展--SMB-UNIX,该扩展使得Linux可以访问SMB服务器(比如Samba)上的可能存在的非Windows的文件类型(比如设备节点和符号链接)。
Linux 2.6也加入了相对新的一些分布式网络文件系统(即在一个逻辑卷上的文件可以分布在多个节点中)的支持。除了Linux 2.4中引入的CODA文件系统,Linux现在也包含对另两个分布式文件系统:AFS和InterMezzo的支持。AFS,即the Andrew filesystem(如此命名是因为它最初是CMU开发的),特性非常有限,目前只支持读操作。另一个新支持的文件系统InterMezzo(也是CMU开发的)也在Linux2.6中得到支持;它具有一些更为先进的特性,如:无连接操作(工作在客户端的缓存中),适合要求高可用性的应用,在那些应用环境中,需要保证存储区永远可用。同时它也支持保持数据在多个计算机之间(比如笔记本电脑、PDA和桌面电脑)同步的应用。很多对这些新的文件系统提供支持的项目都是在Linux平台上实现的,这也使得Linux能够走在对这些新特性支持的最前面。
Linux 2.6一个很有趣的特点是自包含了一个"用户态(user-mode)"的体系结构。它本质上是一种移植--将Linux移植到它自身(正如移植到不同的硬件体系那样),从而允许一个完全虚拟的Linux-on-Linux运行环境。新的Linux实例像普通应用程序一样运行。在这个新的Linux内部,你可以配置伪网络、文件系统或者其他一些设备,整个过程通过专用的驱动程序与宿主Linux进行安全交互。这被证明不仅是在开发方面(进行分析、统计等),而且在安全分析和密罐(honeypots)技术中都是非常有用的。当然大多数用户还不需要这样的支持,它只是被当作了一个可以运行在你的机器上的很酷的特性而已。(给你的朋友留下深刻的印象!)
写在最后
这篇文档主要出自BitKeeper changelogs的长时间的阅读,对源代码的"赏玩"(looking at and playing with),对邮件列表的阅读,以及很多很多为完成本文所进行的Google和Lycos或这或那的搜索。尽管如此,文中可能有遗漏或者理解有误的地方。我也尽量地小心地不过分使用那些被合并入内核的项目网页,因为它们相对官方的内核版本支持要"大大超前"。如果您发现这篇文档中的任何错误,或者希望email给我询问我的情况,您可以email给jpranevich@kniggit.net。