2 Linux内核
Linux
的源代码组织非常复杂,幸好我们不用将它们完全弄懂,现在我们需要的是知道各个部分的大致功能,然后再在以后开发过程中,针对不同的系统需求,修改内核中特定的某个部分就可以了。下面首先来看看是linux源码文件的组织结构:
kernel/ linux
内核(非常小)
lib/
各种内核需要使用的库文件
MAINTAINERS
内核各部分的维护者
mm/
内存管理单元
net/
网络系统
README readme
文件
REPORTING_BUGS
报告bug的指导
scripts/
一些脚本
security/
安全模式的实现
sound/
声卡支持和驱动
usr/
工具
arch/
硬件相关代码
COPYING linux
拷贝条件(GNU GPL)
CREDITS l inux
的主要贡献者
crypto/
密码库
Documentation/
内核文档
drivers/
驱动程序
fs/
文件系统
include/
内核头文件
include/asm-<arch>
硬件相关的头文件
include/linux
内核核心的头文件
init linux
初始化代码
ipc/
进程间通讯
Linux
社区正积极地为新硬件添加功能部件和支持、在内核中修正错误并且及时地进行常规改进
,
这
也是
导致
目前内核源代码越来越庞大的原因。
大约每
6
个月(或
6
个月不到)就有一个稳定的
l
inux
树的新发行版。不同的维护者维护针对特定体系结构的不同内核树和补丁。当为一个项目选择了一个内核时,您需要评估最新发行版的稳定性如何、它是否符合项目要求和硬件平台、从编程角度来看它的舒适程度以及其它难以确定的方面。还有一点也非常重要:找到需要应用于基本内核的所有补丁,以便为特定的体系结构调整内核。
内核布局分为特定于体系结构的部分和与体系结构无关的部分。内核中特定于体系结构的部分首先执行,设置硬件寄存器、配置内存映射、执行特定于体系结构的初始化,然后将控制转给内核中与体系结构无关的部分。系统的其余部分在这第二个阶段期间进行初始化。内核树下的目录
arch/
由不同的子目录组成,每个子目录用于一个不同的体系结构(
MIPS
、
ARM
、
i386
、
SPARC
、
PPC
等)。每一个这样的子目录都包含
kernel/
和
mm/
子目录,它们包含特定于体系结构的代码来完成象初始化内存、设置
IRQ
、启用高速缓存、设置内核页面表等操作。一旦装入内核并给予其控制,就首先调用这些函数,然后初始化系统的其余部分。
根据可用的系统资源和引导装载程序的功能,内核可以编译成 vmlinux 、 Image 或 zImage 。 vmlinux 和 zImage 之间的主要区别在于 vmlinux 是实际的(未压缩的)可执行文件,而 zImage 是或多或少包含相同信息的自解压压缩文件— -- 只是压缩它以处理(通常是 Intel 强制的) 640 KB 引导时间的限制。有关所有这些的权威性解释,请参阅 Linux Magazine 的文章“ Kernel Configuration: dealing with the unexpected ” 。
根据可用的系统资源和引导装载程序的功能,内核可以编译成 vmlinux 、 Image 或 zImage 。 vmlinux 和 zImage 之间的主要区别在于 vmlinux 是实际的(未压缩的)可执行文件,而 zImage 是或多或少包含相同信息的自解压压缩文件— -- 只是压缩它以处理(通常是 Intel 强制的) 640 KB 引导时间的限制。有关所有这些的权威性解释,请参阅 Linux Magazine 的文章“ Kernel Configuration: dealing with the unexpected ” 。