1.4 内核模块(module)

Linux内核是一个庞大、完整的操作系统,它包括了操作系统功能所有需要的组件。这样的好处是功能强大、运行效率高。但其缺点就是不够灵活,不容易扩展。当我们要为内核扩展一个新的功能时,特别是某些组件需要不断更新(如设备驱动程序,随着新设备的不断推出,要不断增加新驱动程序)时,每次小的改动,都需要编译整个操作系统,这是一个非常耗时的过程。

Linux解决这个问题的方式是内核模块(module)。在需要的时候这些内核模块可以在运行时动态地加入到系统中。当不再需要的时候,可以将其从系统中移走。

图1-1 给出的内核组件示例中,可以使用模块方式来扩展功能的组件有:设备驱动程序、文件系统、网络协议和网络设备驱动程序。模块的使用实际上并不仅仅局限于这些组件,它可以作为一个独立功能加入到内核中。向内核加入新功能时,内核中也需要相应的接口去通知内核的其他部件关于新功能的信息。Linux网络体系结构中的接口和在其中扩展新功能的实现方式是本书要讨论的一个主要问题。

在本节的以下部分,我们会较详细地讨论Linux内核模块的结构和管理,因为模块是增强Linux网络体系结构最好,也是最灵活的方式。在网络子系统中大量使用了模块技术来扩展网络功能。