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

2019-07-12 14:23发布

  • 基于Linux2.6.22.6
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进程