内核,即操作系统。它为底层的可编程部件提供服务,为上层应用程序提供执行环境。内核裁剪就是对这些功能进行裁剪,选取满足特定平台和需求的功能。不同的硬件平台对内核要求也不同,因此从一个平台到另一个平台需要对内核进行重新配置和编译。操作系统从一个平台过渡到另一个平台称为移植。Linux是一款平台适应性且容易裁剪的操作系统,因此Linux在嵌入式系统得到了广泛的应用。本章将详细讲解内核裁剪与移植的各项技术。
4.1 Linux内核结构
Linux内核采用模块化设计,并且各个模块源码以文件目录的形式存放,在对内核的裁剪和编译时非常方便。下面介绍内核的主要部分及其文件目录。
4.1.1 内核的主要组成部分
在第1章中已经介绍了Linux内核主要的5个部分:进程调度、内存管理、虚拟文件系统、网络接口、进程通信。在系统移植的时候,它们是内核的基本元素,这5个部分之间的关系,如图4.1所示。
(点击查看大图)图4.1 Linux内核子系统及其之间的关系
进程调度部分负责控制进程对CPU的访问。内存管理允许多个进程安全地共享主内存区域。内存管理从逻辑上分为硬件无关部分和硬件相关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关部分为内存管理硬件提供了虚拟接口。虚拟文件系统隐藏了不同类型硬件的具体细节,为所有的硬件设备提供了一个标准的接口,VFS提供了十多种不同类型的文件系统。网络接口提供了对各种网络标准的存取和各种网络硬件的支持。进程通信部分用于支持进程间各种不同的通信机制。进程调度处于核心位置,内核的其他子系统都要依赖它,因为每个子系统都存在进程挂起或恢复过程。
进程调度与内存管理之间的关系:这两个子系统为互相依赖关系。在多道程序环境下,程序要运行必须为之创建进程,而创建进程首先就是要将程序和数据装入内存。另外,内存管理子系统也存在进程的挂起和恢复过程。
进程间通信与内存管理之间的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,通过对共同的内存区域进行操作来达到通信的目的。
虚拟文件系统与网络接口之间的关系:虚拟文件系统通过依赖网络接口支持网络文件系统(NFS),也通过依赖内存管理支持RAMDISK设备。
内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程定期地由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理将会向文件系统发出请求,同时,挂起当前正在运行的进程。
除了上面5个主要部分,下面将介绍Linux代码的整体分区结构。