1、相关常识
①VERSION = 2 PATCHLEVEL=6
主版本号,稳定版本用偶数来表示,每隔2~~3年出现一个稳定版
②SUBLEVEL=22
次版本号,每隔1~~2个月一更新
③EXTRAVERSION = .6
扩展版本号
④获取内核网址:http://www.kernel.org/
⑤打补丁:
tar xjf linux-2.6.22.6.tar.bz2
tar xjf patch-2.6.22.6.bz.2
cd linux-2.6.22
patch -p1 < ../patch-2.6.22.6
2、内核源码结构及Makefile分析
1)内核子目录结构
2)Makefile分析
①Makefile决定了文件文件编译的顺序、连接规则
②Linux内核中Makefile文件分类:
③内核文档Documenttation/kbuild/mahefiles.txt对Makefile用法进行讲解
④obj-y、obj-m、lib-y分别用来定义哪些文件被编译进内核、编译成加载模块(驱动)、编译成库文件
⑤选项:
A、全局选项(适用于整个内核代码树)
CFLAGS:编译C文件的选项
AFLAGS:编译成汇编文件的选项
LDFLAGS:连接文件选项
ARFLAGS:制作库文件选项
B、局部选项(仅适用于某个Makefile中的所有文件)
EXTRA_CFLAGS
EXTRA_AFLAGS
EXTRA_LDFLAGS
EXTRA_ARFLAGS
C、个体文件选项(仅适用于某个文件)
CFLAGS_$@ EXTRA_AFLAGS
⑥ $(patsubst pattern, replacement, text)
patsubst为字符串处理函数
用法:在text中寻找pattern,并用replacement替代patsubst
eg:
$(patsubst %/, %/build-in.o, init/)
-----> init/build-in.o
3)内核的Kconfig分析(用于配置内核)
①Kconfig文件的基本要素:config条目
②menu条目
menu 在menu和endmenu之间有很多config条目
config x
config y
config z
enfmenu
③choice条目
④comment条目:用于定义一些帮助信息
⑤source条目:用于读入另一个Kconfig文件
4)Linux内核配置选项
1、配置界面主菜单类别
2、“System Type”菜单:系统类别
3、“Device Drivers”菜单:设备驱动程序
3、Linux内核移植
1)Linux的启动过程可以分为两部分:架构/开发板相关的引导过程、后续的通用启动过程
A、第一阶段通常使用汇编编写,首先检查内核是否支持当前架构的处理器,然后检查是否支持当前开发板
①连接内核时使用虚拟地址,使用要摄者页表,使能MMU
②调用C函数start_kernel之前的常规工作,包括复制数据段、清除BSS段
B、第二阶段的代码主要用C语言编写,它进行内核初始化的全部工作,最后调用rest_init函数启动init过程,创建系统第一个进 程:init进程