嵌入式linux系统开发概述之二----内核(Kernel)

2019-07-13 02:36发布

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-   硬件相关的头文件 include/linux               内核核心的头文件 init                              linux初始化代码 ipc/                             进程间通讯     Linux 社区正积极地为新硬件添加功能部件和支持、在内核中修正错误并且及时地进行常规改进也是导致目前内核源代码越来越庞大的原因。大约每 6 个月(或 6 个月不到)就有一个稳定的 linux 树的新发行版。不同的维护者维护针对特定体系结构的不同内核树和补丁。当为一个项目选择了一个内核时,您需要评估最新发行版的稳定性如何、它是否符合项目要求和硬件平台、从编程角度来看它的舒适程度以及其它难以确定的方面。还有一点也非常重要:找到需要应用于基本内核的所有补丁,以便为特定的体系结构调整内核。 内核布局分为特定于体系结构的部分和与体系结构无关的部分。内核中特定于体系结构的部分首先执行,设置硬件寄存器、配置内存映射、执行特定于体系结构的初始化,然后将控制转给内核中与体系结构无关的部分。系统的其余部分在这第二个阶段期间进行初始化。内核树下的目录 arch/ 由不同的子目录组成,每个子目录用于一个不同的体系结构(MIPSARMi386SPARCPPC 等)。每一个这样的子目录都包含 kernel/  mm/ 子目录,它们包含特定于体系结构的代码来完成象初始化内存、设置 IRQ、启用高速缓存、设置内核页面表等操作。一旦装入内核并给予其控制,就首先调用这些函数,然后初始化系统的其余部分。
    根据可用的系统资源和引导装载程序的功能,内核可以编译成vmlinuxImage zImagevmlinuxzImage之间的主要区别在于vmlinux是实际的(未压缩的)可执行文件,而zImage是或多或少包含相同信息的自解压压缩文件—--只是压缩它以处理(通常是 Intel 强制的)640 KB 引导时间的限制。有关所有这些的权威性解释,请参阅 Linux Magazine 的文章“Kernel Configuration: dealing with the unexpected