扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
3.5 设计和实现的关系
接下来的部分将介绍一些内核设计和实现之间的关系。本部分最重要的内容是对于内核源程序目录结构的概述,这一点随后就会提到。本章最后以实现中体系结构无关代码和体系结构相关代码的相对大小的估算作为总结。
3.5.1 内核源程序目录结构
按照惯例,内核源程序代码安装在/usr/src/linux目录下。在该目录下还有几个其他目录,每一个都代表一个特定的内核功能性子集(或者非常粗略地说是高层代码模块)。
1. Documentation
这个目录下面没有内核代码,只有一套有用的文档。但是这些文档的质量不一。有一部分内核文档,例如文件系统,在该目录下有相当优秀而且相当完整的文档;而另外一部分内核,例如进程调度,则根本就没有文档。但是在这里你可以不时地发现自己所最需要的东西。
2. arch
arch目录下的所有子目录中都是体系结构相关的代码。每个体系结构特有的子目录下都又至少包含三个子目录:kernel,存放支持体系结构特有的诸如信号处理和SMP之类特征的实现;lib,存放高速的体系结构特有的诸如strlen和memcpy之类的通用函数的实现;mm,存放体系结构特有的内存管理程序的实现。
除了这三个子目录以外,大多数体系结构在必要的情况下还都有一个boot子目录,该目录中包含有在这种平台上启动内核所使用的部分或全部平台特有代码。这些启动代码中的部分或全部也可以在平台特有的内核目录下找到。
最后,大部分体系结构所特有的目录还可以根据需要包含了供附加特性或改进组织使用的其他子目录。例如,i386目录包含一个math-emu子目录,其中包括了在缺少数学协处理器(FPU)的CPU上运行模拟FPU的代码。作为另外一个例子,m68k移植版本中为每一个该移植版本所支持的基于680x0的机器建立了一个子目录,从而这些机器所特有的代码都有一个自然的根目录。
下面几个是arch目录下的子目录:
* arch/alpha/—Linux内核到基于DEC Alpha CPU工作站的移植。
* arch/arm/—Linux到ARM系列CPU 的移植,该类CPU主要用于诸如Corel的NetWinder和Acorn RiscPC之类的机器。
* arch/i386/—最接近于Linux内核原始平台或标准平台。这是为Intel的80386结构使用的,当然包括对同一系列后来的CPU(80486,Pentium等等)的支持。它还包括了对AMD、Cyrix和IDT等公司的一些兼容产品的支持。
本书基本上将这种体系结构称为“x86”。即使这样,严格说来“x86”对于我们的目标来说还是要求得过于宽泛。早期的Intel CPU,例如80286,并没有包括Linux运行所需的所有特性。对于这些机器,Linux也没有正式的支持版本(顺便提一下,Linux对这种CPU的独立移植版本是存在的,不过它在功能上有部分损失)。当本书中提到“x86平台”时,通常是指80386或更新的CPU。
* arch/m68k/—到Motorola的680x0 CPU系列的移植。该版本可以提供对基于从68020(只要它同内存管理单元(MMU)68851一起使用)到68060的一切机器的支持。很多公司在他们的产品中使用680x0系列芯片,例如Commodore(现在是Gateway)的Amiga、Apple的Macintosh、Atari ST等等。这些老机器中的很多现在正充当可靠的Linux工作站。另外,到NeXT工作站和SUN 3工作站的移植也正在进行中。
* arch/mips/—到MIPS的CPU系列的移植。虽然有其他几个厂商也使用MIPS开发了一些系统,但是基于这种CPU的最出名的机器是Silicon Graphics(SGI)工作站。
* arch/ppc/—到Motorola/IBM的PowerPC系列CPU的移植。这包括对基于PowerPC的Macintosh和Amiga以及BeBox、IBM的RS/6000等其他一些机器的支持。
* arch/sparc/—到32位SPARC CPU的移植。这包括对从Sun SPARC 1到SPARC 20的全部支持。
* arch/sparc64/—到基于64位SPARC CPU(UltraSPARC系列)系统的移植。这里所能够支持的机器包括Sun的Ultra 1、Ultra 2和更高配置的机器,直到Sun的最新产品Enterprise 10000。注意32位和64位的SPARC的移植版本正在合并中。
不幸的是,本书必须将注意力集中在x86上,因此只应用到了arch/i386/目录下的代码,而其他体系结构所特有的代码将不再涉及了。
3. drivers
这个目录是内核中非常大的一块。实际上,drivers目录下包含的代码占整个内核发行版本代码的一半以上。它包括显卡、网卡、SCSI适配器、软盘驱动器、PCI设备和其他任何你可以说出的Linux支持的外围设备的软件驱动程序。
drivers目录下的一些子目录是平台特有的,例如,zorro子目录中包含有和Zorro总线通讯的代码。而Zorro总线只在Amiga中使用过,因此这些代码必然是Amiga特有的。而其他一些子目录,例如pci子目录,则至少是部分平台无关的。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者