嵌入式Linux开发——(十四)移植Linux内核

    基于Linux2.6.22.6

1、相关常识

①VERSION = 2 PATCHLEVEL=6

主版本号,稳定版本用偶数来表示,每隔2~~3年出现一个稳定版

②SUBLEVEL=22

次版本号,每隔1~~2个月一更新

③EXTRAVERSION = .6

扩展版本号

④获取内核网址:

⑤打补丁:

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进程

经验分享 程序员 微信小程序 职场和发展