全部博文(92)
分类: 嵌入式
2010-04-07 14:39:13
Linux 内核简介
在内核文件的顶层Makefile,可以看到内核版本号:2.6.31
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 31
EXTRAVERSION =
NAME = Man-Eating Seals of Antiquity
内核源码目录结构分析
Ø arch
与体系结构相关的代码。对应于每个支持的体系结构,有一个相应的子目录如x86、arm等,每个体系结构子目录下包含几个主要子目录:
.boot 启动内核所需的平台特有代码
.kernel 体系结构特有特征(如SMP)的实现
.mm 与体系结构相关的内存管理代码
.lib 与体系结构相关的通用函数的实现
Ø drivers
所有设备驱动程序代码,它占整个内核代码量一半以上,每一个子目录对应一类驱动程序。
Ø fs
文件系统代码,每个支持的文件系统有相应的子目录,如cramfs,yaffs,jffs2等
Ø include
包括编译内核所需的大部分头文件,与平台无关的头文件放在include/linux子目录下,平台相关的头文件如include/asm-arm
Ø init 内核初始化代码(有一个main.c文件,boot-loader第二阶段的起始代码)
Ø kernel 内核管理核心代码
Ø lib 库函数代码
Ø Mm 内存管理代码
Ø net 网络支持代码
Ø sound 音频设备驱动代码
Ø scripts 用于配置内核的脚本文件
Ø documentation 内核相关文档
内核配置系统的基本结构
Makefile:分布在Linux内核源码中的Makefile定义了Linux内核编译的规则;
Ø 配置工具:
make config 字符界面
make menuconfig Ncurses图形界面
make xconfig Xwindows图形界面
Ø 配置文件:
.config:在配置内核时生成,根据.config来决定使用哪些Makefile
Kconfig文件分析
menuconfig: 用于生成菜单
config: 生成配置选项
depend on 依赖关系
default 默认值
select 自动选择(自动选择子选项)
source 读入另一个Kconfig文件
help 帮助信息
Linux的启动过程
第一阶段:(由ARM架构的系统文件完成)
arch/arm/kernel/head.S
arch/arm/kernel/head-common.S
arch/arm/mm/proc-arm920.S
检查内核是否支持当前处理器架构和开发板,禁止Cache,使能MMU,设置栈指针,调用
start_kernel
第二阶段:
init/main.c start_kernel
完成内核初始化全部工作,最后调用rest_init函数启动init进程