嵌入式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/ 由不同的子目录组成,每个子目录用于一个不同的体系结构(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”。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮