《嵌入式Linux内核裁减移植.pptx》由会员分享,可在线阅读,更多相关《嵌入式Linux内核裁减移植.pptx(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、会计学1嵌入式嵌入式Linux内核裁减移植内核裁减移植课程安排n nLinuxLinux内核配置与编译内核配置与编译n nLinuxLinux内核内核MakefileMakefilen nLinuxLinux内核启动流程内核启动流程第1页/共38页Linux系统结构第2页/共38页用户与内核空间n n从上图得从上图得 知,知,Linux由由 用户空间用户空间和和内核空内核空间间两部分组两部分组 成。成。为什么为什么 Linux系统会被划分系统会被划分为为 用户空间用户空间与与内核空间内核空间?第3页/共38页CPU工作模式n n现代现代现代现代 CPUCPU通常实现了不同通常实现了不同通常实现
2、了不同通常实现了不同 的工作模的工作模的工作模的工作模 式,以式,以式,以式,以ARMARM为例为例为例为例 ,实现了实现了实现了实现了 7 7种工作模式:种工作模式:种工作模式:种工作模式:用用用用 户模式户模式户模式户模式 (usrusr)、)、)、)、快速中断快速中断快速中断快速中断 (fiq)(fiq)、外部中断外部中断外部中断外部中断(irq)(irq)、管理模管理模管理模管理模 式(式(式(式(svcsvc)、数据访问中数据访问中数据访问中数据访问中(abt)(abt)、系统模系统模系统模系统模 式式式式 (sys)(sys)、未未未未 定义指令异常定义指令异常定义指令异常定义指令
3、异常 (und)(und)n nX86X86也实现了也实现了也实现了也实现了 4 4个不同的级别个不同的级别个不同的级别个不同的级别 :Ring0Ring3Ring0Ring3。Ring0Ring0下下下下 ,可以执行特权可以执行特权可以执行特权可以执行特权 指指指指令,可以访问令,可以访问令,可以访问令,可以访问 IOIO设备等,在设备等,在设备等,在设备等,在 Ring3Ring3则有则有则有则有 很多限很多限很多限很多限 制。制。制。制。第4页/共38页体系结构n nLinuxLinux系统利用了系统利用了系统利用了系统利用了 CPUCPU的的的的 这一特性,使用了其中的两级来分别运这一
4、特性,使用了其中的两级来分别运这一特性,使用了其中的两级来分别运这一特性,使用了其中的两级来分别运行行行行 LinuxLinux内核与应用程序,这样内核与应用程序,这样内核与应用程序,这样内核与应用程序,这样使操作系统本身得到充分的保护使操作系统本身得到充分的保护使操作系统本身得到充分的保护使操作系统本身得到充分的保护。n n例如:如果使用例如:如果使用例如:如果使用例如:如果使用 X86X86,用,用,用,用 户代码运行在户代码运行在户代码运行在户代码运行在 Ring3Ring3,内核代码运行在,内核代码运行在,内核代码运行在,内核代码运行在Ring0Ring0。第5页/共38页体系结构n
5、n内核空间与用户空间是内核空间与用户空间是程序执行的两种不程序执行的两种不同状态同状态,通过,通过系统调用系统调用和和硬件中断硬件中断能够完能够完成从用户空间到内核空间的转移。成从用户空间到内核空间的转移。什么是什么是Linux内核?内核?第6页/共38页内核架构第7页/共38页内核配置与编译LinuxLinuxLinuxLinux内核具有可定制的优点内核具有可定制的优点内核具有可定制的优点内核具有可定制的优点 ,具体步骤如下:具体步骤如下:具体步骤如下:具体步骤如下:1.1.1.1.清除临时文件、中间文件和配置文件清除临时文件、中间文件和配置文件清除临时文件、中间文件和配置文件清除临时文件、
6、中间文件和配置文件 .n nmake cleanmake cleanmake cleanmake clean:remove most generated files remove most generated files remove most generated files remove most generated files but keep the configbut keep the configbut keep the configbut keep the confign nmake mrpropermake mrpropermake mrpropermake mrproper:r
7、emove all generated remove all generated remove all generated remove all generated files+config filesfiles+config filesfiles+config filesfiles+config filesn nmake distcleanmake distcleanmake distcleanmake distclean:mrproper+remove editor mrproper+remove editor mrproper+remove editor mrproper+remove
8、editor backup and patch filesbackup and patch filesbackup and patch filesbackup and patch files第8页/共38页内核配置与编译2 2 2 2、确定目标系统的、确定目标系统的、确定目标系统的、确定目标系统的 软硬件配置情况,比如软硬件配置情况,比如软硬件配置情况,比如软硬件配置情况,比如 CPUCPUCPUCPU的类型、网的类型、网的类型、网的类型、网卡的型号,所需支持的网络协议等卡的型号,所需支持的网络协议等卡的型号,所需支持的网络协议等卡的型号,所需支持的网络协议等3 3 3 3、使用如下命令、使用
9、如下命令、使用如下命令、使用如下命令之一之一之一之一配置内核:配置内核:配置内核:配置内核:n nmake configmake configmake configmake config:基于文本模式的交互式配置。:基于文本模式的交互式配置。:基于文本模式的交互式配置。:基于文本模式的交互式配置。n nmake menuconfigmake menuconfigmake menuconfigmake menuconfig:基于文本模式的菜单型配置。:基于文本模式的菜单型配置。:基于文本模式的菜单型配置。:基于文本模式的菜单型配置。(推荐(推荐(推荐(推荐使用)使用)使用)使用)n nmake
10、oldconfigmake oldconfigmake oldconfigmake oldconfig:使用已有的配置:使用已有的配置:使用已有的配置:使用已有的配置 文文文文 件(件(件(件(.config.config.config.config),但但但但 是会询是会询是会询是会询 问新增问新增问新增问新增 的配置的配置的配置的配置 选项。选项。选项。选项。n nmake xconfigmake xconfigmake xconfigmake xconfig:图:图:图:图 形形形形 化的化的化的化的 配置(配置(配置(配置(需需需需 安装图安装图安装图安装图 形化系统形化系统形化系统形
11、化系统 )。)。)。)。4 4 4 4、配置信息保存为、配置信息保存为、配置信息保存为、配置信息保存为.config.config.config.config文件文件文件文件第9页/共38页内核配置与编译make menuconfig make menuconfig 是是是是 最为常用的内核配置方式,最为常用的内核配置方式,最为常用的内核配置方式,最为常用的内核配置方式,按功能分层次来组织配置选项按功能分层次来组织配置选项按功能分层次来组织配置选项按功能分层次来组织配置选项 使用方法如下:使用方法如下:使用方法如下:使用方法如下:1 1、使用方向键在各选项间移动;、使用方向键在各选项间移动;、
12、使用方向键在各选项间移动;、使用方向键在各选项间移动;2 2、使用、使用、使用、使用“Enter”Enter”键进入下一层键进入下一层键进入下一层键进入下一层 选单;每个选项上的高亮字母是键盘快捷选单;每个选项上的高亮字母是键盘快捷选单;每个选项上的高亮字母是键盘快捷选单;每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项;方式,使用它可以快速地到达想要设置的选单项;方式,使用它可以快速地到达想要设置的选单项;方式,使用它可以快速地到达想要设置的选单项;3 3、在括号中按、在括号中按、在括号中按、在括号中按 “y”y”将这个项目将这个项目将这个项目将这个项目编译进内核编译
13、进内核编译进内核编译进内核中,按中,按中,按中,按“m”m”编译为编译为编译为编译为 模块模块模块模块,按,按,按,按 “n”n”为为为为不选择不选择不选择不选择(按(按(按(按空格键空格键空格键空格键也可在编译进内核、编译为模块和不编译三也可在编译进内核、编译为模块和不编译三也可在编译进内核、编译为模块和不编译三也可在编译进内核、编译为模块和不编译三者间进行切换),按者间进行切换),按者间进行切换),按者间进行切换),按“h”h”将将将将 显示这个选项的显示这个选项的显示这个选项的显示这个选项的帮助信息帮助信息帮助信息帮助信息,按,按,按,按 “Esc”Esc”键键键键将将将将返回到上层选单
14、返回到上层选单返回到上层选单返回到上层选单。第10页/共38页内核配置与编译n nY Y:编译出目标文件,并直接链接到内核映像:编译出目标文件,并直接链接到内核映像:编译出目标文件,并直接链接到内核映像:编译出目标文件,并直接链接到内核映像imageimagen nMM:编译出目标文件,但不链接:编译出目标文件,但不链接:编译出目标文件,但不链接:编译出目标文件,但不链接n nNN:不编译:不编译:不编译:不编译 Y、M、N的的区别?区别?第11页/共38页内核配置与编译n n 配置菜单中的项该怎么配置菜单中的项该怎么配置菜单中的项该怎么配置菜单中的项该怎么选择选择选择选择呢?呢?呢?呢?参考
15、参考参考参考内核配置手册内核配置手册内核配置手册内核配置手册文档文档文档文档n n内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件,Linux,Linux,Linux,Linux内核提供了一系列可供参考的内核配置文件,位于内核提供了一系列可供参考的内核配置文件,位于内核提供了一系列可供参考的内核配置文件,位于内核提供了一系列可供参考的内核配置文件,位于arch/$cpu/configsar
16、ch/$cpu/configsarch/$cpu/configsarch/$cpu/configsn nmake xxx_defconfig,make xxx_defconfig,make xxx_defconfig,make xxx_defconfig,生成生成生成生成.config.config.config.confign n更便捷的方法是使用厂家提供的配置文件更便捷的方法是使用厂家提供的配置文件更便捷的方法是使用厂家提供的配置文件更便捷的方法是使用厂家提供的配置文件n ncp config_mini6410_n43.configcp config_mini6410_n43.config
17、cp config_mini6410_n43.configcp config_mini6410_n43.config第12页/共38页内核配置与编译4 4 4 4、编译内核:、编译内核:、编译内核:、编译内核:n n编译内核映像编译内核映像编译内核映像编译内核映像n nmake zImagemake zImagemake zImagemake zImagen nmake bzImage make bzImage make bzImage make bzImage 区别:在区别:在区别:在区别:在X86X86X86X86平台,平台,平台,平台,zImagezImagezImagezImage只能
18、用于小于只能用于小于只能用于小于只能用于小于 512K512K512K512K的内的内的内的内 生成带生成带生成带生成带UbootUbootUbootUboot文件头的的内核文件头的的内核文件头的的内核文件头的的内核:make uImagemake uImagemake uImagemake uImage 注意需要注意需要注意需要注意需要ubootubootubootuboot的的的的mkimagemkimagemkimagemkimage工具支持工具支持工具支持工具支持,但本开发板但本开发板但本开发板但本开发板ubootubootubootuboot支持直接引导支持直接引导支持直接引导支持直
19、接引导zImagezImagezImagezImage参见参见参见参见:cmd_bootm.c:cmd_bootm.c:cmd_bootm.c:cmd_bootm.c:#ifdef CONFIG_ZIMAGE_BOOT#ifdef CONFIG_ZIMAGE_BOOTn n如需获取详细编译过程信息如需获取详细编译过程信息如需获取详细编译过程信息如需获取详细编译过程信息,可使用:可使用:可使用:可使用:n nmake zImage V=1make zImage V=1make zImage V=1make zImage V=1n nmake bzImage V=1make bzImage V=1
20、make bzImage V=1make bzImage V=1编译出错时,可以通过查看编译过程信息定位错误,例如缺编译出错时,可以通过查看编译过程信息定位错误,例如缺编译出错时,可以通过查看编译过程信息定位错误,例如缺编译出错时,可以通过查看编译过程信息定位错误,例如缺少某些编译选项时少某些编译选项时少某些编译选项时少某些编译选项时可以到相应目录下的可以到相应目录下的可以到相应目录下的可以到相应目录下的MakefileMakefileMakefileMakefile去修改去修改去修改去修改n n 编译好的内核位于编译好的内核位于编译好的内核位于编译好的内核位于arch/boot/arch/b
21、oot/arch/boot/arch/boot/目录下目录下目录下目录下 第13页/共38页内核映像构成 第14页/共38页内核映像构成 第15页/共38页内核映像构成 启动代码功能代码符号链接第16页/共38页Linux内核启动流程 第17页/共38页演示:编译使用开发板内核1、使用厂商提供的配置文件配置内核、使用厂商提供的配置文件配置内核2、编译内核映像、编译内核映像zImage3、下载到开发板通过、下载到开发板通过uboot启动内核启动内核第18页/共38页课程安排n nLinuxLinux内核配置与编译内核配置与编译n nLinuxLinux内核内核MakefileMakefilen
22、nLinuxLinux内核启动流程内核启动流程第19页/共38页内核Makefile组成第20页/共38页内核Makefile作用1 1、决定、决定、决定、决定编译哪些文件编译哪些文件编译哪些文件编译哪些文件?2 2、决定、决定、决定、决定怎样编译怎样编译怎样编译怎样编译这些文件?这些文件?这些文件?这些文件?3 3、决定、决定、决定、决定怎样链接怎样链接怎样链接怎样链接这些文件,最重要是它们的连接顺序如何?这些文件,最重要是它们的连接顺序如何?这些文件,最重要是它们的连接顺序如何?这些文件,最重要是它们的连接顺序如何?第21页/共38页编译哪些文件1 1 1 1、顶层顶层顶层顶层Makefi
23、leMakefileMakefileMakefile决定根目录下决定根目录下决定根目录下决定根目录下哪些子目录将被编译哪些子目录将被编译哪些子目录将被编译哪些子目录将被编译(1 1 1 1)、将子目录分为以下几类:)、将子目录分为以下几类:)、将子目录分为以下几类:)、将子目录分为以下几类:init-yinit-yinit-yinit-y、drivers-ydrivers-ydrivers-ydrivers-y、net-ynet-ynet-ynet-y、libs-ylibs-ylibs-ylibs-y、和、和、和、和core-ycore-ycore-ycore-y(2 2 2 2)、)、)、)
24、、archarcharcharch目录内的目录内的目录内的目录内的MakefileMakefileMakefileMakefile直接包含进来直接包含进来直接包含进来直接包含进来 include$(srctree)/arch/$(ARCH)/Makefileinclude$(srctree)/arch/$(ARCH)/Makefileinclude$(srctree)/arch/$(ARCH)/Makefileinclude$(srctree)/arch/$(ARCH)/Makefile(3 3 3 3)、)、)、)、ARCHARCHARCHARCH变量在变量在变量在变量在make menuc
25、onfigmake menuconfigmake menuconfigmake menuconfig时配置或者时配置或者时配置或者时配置或者makemakemakemake时传入时传入时传入时传入make ARCH=arm CROSS_COMPILE=arm-linux-make ARCH=arm CROSS_COMPILE=arm-linux-make ARCH=arm CROSS_COMPILE=arm-linux-make ARCH=arm CROSS_COMPILE=arm-linux-在顶层目录在顶层目录在顶层目录在顶层目录MakefileMakefileMakefileMakefi
26、le可查看这两个体系结构相关变量可查看这两个体系结构相关变量可查看这两个体系结构相关变量可查看这两个体系结构相关变量 第22页/共38页编译哪些文件2 2 2 2、arch/$(ARCH)/Makefilearch/$(ARCH)/Makefilearch/$(ARCH)/Makefilearch/$(ARCH)/Makefile决定决定决定决定arch/$(ARCH)arch/$(ARCH)arch/$(ARCH)arch/$(ARCH)目录下哪些文件、哪些目录被编目录下哪些文件、哪些目录被编目录下哪些文件、哪些目录被编目录下哪些文件、哪些目录被编译译译译(1 1 1 1)、增加)、增加)、
27、增加)、增加head-yhead-yhead-yhead-y类:类:类:类:(2 2 2 2)、并且扩展)、并且扩展)、并且扩展)、并且扩展libs-ylibs-ylibs-ylibs-y、core-ycore-ycore-ycore-y类中类中类中类中体系结构相关内容体系结构相关内容体系结构相关内容体系结构相关内容3 3 3 3、编译时,依次进入、编译时,依次进入、编译时,依次进入、编译时,依次进入init-yinit-yinit-yinit-y、drivers-ydrivers-ydrivers-ydrivers-y、net-ynet-ynet-ynet-y、libs-ylibs-ylib
28、s-ylibs-y、和、和、和、和core-ycore-ycore-ycore-y所列出的目录中执行它们的所列出的目录中执行它们的所列出的目录中执行它们的所列出的目录中执行它们的Makefile Makefile Makefile Makefile 第23页/共38页怎样编译文件1 1 1 1、各级子目录下的、各级子目录下的、各级子目录下的、各级子目录下的MakefileMakefileMakefileMakefile决定所在目录下哪些文件将被决定所在目录下哪些文件将被决定所在目录下哪些文件将被决定所在目录下哪些文件将被编译进内核编译进内核编译进内核编译进内核,哪些,哪些,哪些,哪些文件将被文
29、件将被文件将被文件将被编译成模块编译成模块编译成模块编译成模块,进入哪些子目录继续,进入哪些子目录继续,进入哪些子目录继续,进入哪些子目录继续调用它们的调用它们的调用它们的调用它们的MakefileMakefileMakefileMakefile(1)(1)(1)(1)、配置内核时生成、配置内核时生成、配置内核时生成、配置内核时生成.config.config.config.config,转化为,转化为,转化为,转化为include/config/auto.confinclude/config/auto.confinclude/config/auto.confinclude/config/au
30、to.conf文件(去文件(去文件(去文件(去掉了掉了掉了掉了.config.config.config.config中的注释)顶层中的注释)顶层中的注释)顶层中的注释)顶层MakefileMakefileMakefileMakefile引用该文件引用该文件引用该文件引用该文件include include/config/auto.confinclude include/config/auto.confinclude include/config/auto.confinclude include/config/auto.conf(2)(2)(2)(2)、auto.confauto.confau
31、to.confauto.conf中的变中的变中的变中的变量值有两类:量值有两类:量值有两类:量值有两类:“y”y”y”y”和和和和“m”m”m”m”,子目录子目录子目录子目录MakefileMakefileMakefileMakefile使用这些使用这些使用这些使用这些变量来决定哪些文件被编译进内核中,哪些文件被编译成模块变量来决定哪些文件被编译进内核中,哪些文件被编译成模块变量来决定哪些文件被编译进内核中,哪些文件被编译成模块变量来决定哪些文件被编译进内核中,哪些文件被编译成模块(3)(3)(3)(3)、obj-yobj-yobj-yobj-y,定义文件,定义文件,定义文件,定义文件编译进内
32、核编译进内核编译进内核编译进内核:obj-y obj-y obj-y obj-y中定义的中定义的中定义的中定义的.o.o.o.o文件由当前目录下的文件由当前目录下的文件由当前目录下的文件由当前目录下的.c.c.c.c或或或或.S.S.S.S文件编译生成,它们连同下文件编译生成,它们连同下文件编译生成,它们连同下文件编译生成,它们连同下级子目录的级子目录的级子目录的级子目录的build-in.obuild-in.obuild-in.obuild-in.o一起链接成当前目录下的一起链接成当前目录下的一起链接成当前目录下的一起链接成当前目录下的build-in.obuild-in.obuild-in
33、.obuild-in.o文件,被上一文件,被上一文件,被上一文件,被上一层层层层MakefileMakefileMakefileMakefile使用使用使用使用第24页/共38页怎样编译文件(4 4 4 4)obj-mobj-mobj-mobj-m,定义文件编译成,定义文件编译成,定义文件编译成,定义文件编译成可加载模块可加载模块可加载模块可加载模块obj-mobj-mobj-mobj-m中定义的中定义的中定义的中定义的.o.o.o.o文件由当前目录下的文件由当前目录下的文件由当前目录下的文件由当前目录下的.c.c.c.c或或或或.S.S.S.S文件编译生成,但不会编进文件编译生成,但不会编进
34、文件编译生成,但不会编进文件编译生成,但不会编进 build-in.o build-in.o build-in.o build-in.o中,而是编译成可加载模块中,而是编译成可加载模块中,而是编译成可加载模块中,而是编译成可加载模块.ko.ko.ko.ko当某个模块当某个模块当某个模块当某个模块(m)(m)(m)(m)需要多个文件编译制作而成需要多个文件编译制作而成需要多个文件编译制作而成需要多个文件编译制作而成:obj-m=a.oobj-m=a.oobj-m=a.oobj-m=a.oa-objs:=b.o,c.o,d.oa-objs:=b.o,c.o,d.oa-objs:=b.o,c.o,d
35、.oa-objs:=b.o,c.o,d.o由由由由b.ob.ob.ob.o,c.o,d.oc.o,d.oc.o,d.oc.o,d.o组合生成组合生成组合生成组合生成a.oa.oa.oa.o,a.oa.oa.oa.o最后制作成最后制作成最后制作成最后制作成a.koa.koa.koa.ko模块模块模块模块(5 5 5 5)、)、)、)、obj-mobj-mobj-mobj-m、obj-yobj-yobj-yobj-y变量中变量中变量中变量中增加子目录名增加子目录名增加子目录名增加子目录名则进入该子目录执行则进入该子目录执行则进入该子目录执行则进入该子目录执行Makefile Makefile Ma
36、kefile Makefile(6 6 6 6)、)、)、)、lib-ylib-ylib-ylib-y,定义文件被编,定义文件被编,定义文件被编,定义文件被编译成库文件译成库文件译成库文件译成库文件lib-ylib-ylib-ylib-y中定义的中定义的中定义的中定义的.o.o.o.o文件由当前目录下的文件由当前目录下的文件由当前目录下的文件由当前目录下的.c.c.c.c或或或或.S.S.S.S文件编译生成,并且被打包成当前目文件编译生成,并且被打包成当前目文件编译生成,并且被打包成当前目文件编译生成,并且被打包成当前目录下的一个库文件录下的一个库文件录下的一个库文件录下的一个库文件lib.a
37、lib.alib.alib.a要把要把要把要把lib.alib.alib.alib.a编译进内核,需要在顶层编译进内核,需要在顶层编译进内核,需要在顶层编译进内核,需要在顶层MakefileMakefileMakefileMakefile中中中中libs-ylibs-ylibs-ylibs-y中列出该目录中列出该目录中列出该目录中列出该目录要编译成库的代码一般在要编译成库的代码一般在要编译成库的代码一般在要编译成库的代码一般在lib/lib/lib/lib/、arch/$(ARCH)/lib/arch/$(ARCH)/lib/arch/$(ARCH)/lib/arch/$(ARCH)/lib/
38、这两个目录下这两个目录下这两个目录下这两个目录下第25页/共38页怎样链接文件1 1 1 1、除了、除了、除了、除了head-yhead-yhead-yhead-y外,外,外,外,init-yinit-yinit-yinit-y、drivers-ydrivers-ydrivers-ydrivers-y等都是目录名,顶层等都是目录名,顶层等都是目录名,顶层等都是目录名,顶层MakefileMakefileMakefileMakefile中,这中,这中,这中,这些目录名直接加上些目录名直接加上些目录名直接加上些目录名直接加上build-in.obuild-in.obuild-in.obuild-i
39、n.o或或或或lib.a,lib.a,lib.a,lib.a,表示要链接进内核的文件表示要链接进内核的文件表示要链接进内核的文件表示要链接进内核的文件init-y:=$(patsubst%/,%/build-in.o,$(init-y)init-y:=$(patsubst%/,%/build-in.o,$(init-y)init-y:=$(patsubst%/,%/build-in.o,$(init-y)init-y:=$(patsubst%/,%/build-in.o,$(init-y)将在将在将在将在$(init-y)$(init-y)$(init-y)$(init-y)变量中将变量中将变
40、量中将变量中将“/”/”/”/”替换成替换成替换成替换成“/build-in.o”/build-in.o”/build-in.o”/build-in.o”2 2 2 2、内核映像链接顺序、内核映像链接顺序、内核映像链接顺序、内核映像链接顺序vmlinux-init:=vmlinux-init:=vmlinux-init:=vmlinux-init:=$(head-y)$(head-y)$(head-y)$(head-y)$(init-y)$(init-y)$(init-y)$(init-y)vmlinux-main:=$(core-y)$(libs-y)$(drivers-y)$(net-y)
41、vmlinux-main:=$(core-y)$(libs-y)$(drivers-y)$(net-y)vmlinux-main:=$(core-y)$(libs-y)$(drivers-y)$(net-y)vmlinux-main:=$(core-y)$(libs-y)$(drivers-y)$(net-y)vmlinux-all:$(vmlinux-init)$(vmlinux-main)vmlinux-all:$(vmlinux-init)$(vmlinux-main)vmlinux-all:$(vmlinux-init)$(vmlinux-main)vmlinux-all:$(vmli
42、nux-init)$(vmlinux-main)3 3 3 3、内核映像链接脚本、内核映像链接脚本、内核映像链接脚本、内核映像链接脚本vmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.ldsvmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.ldsvmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.ldsvmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.lds 第26页/共38页怎样链接文件5 5 5 5、顶层目录、顶层目录、顶层目录、顶层目录MakefileMakefi
43、leMakefileMakefile和和和和arch/$(ARCH)/Makefilearch/$(ARCH)/Makefilearch/$(ARCH)/Makefilearch/$(ARCH)/Makefile设置了影响所有文件的编译设置了影响所有文件的编译设置了影响所有文件的编译设置了影响所有文件的编译链接选项:链接选项:链接选项:链接选项:CFLAGSCFLAGSCFLAGSCFLAGS、AFLAGSAFLAGSAFLAGSAFLAGS、LDFLAGSLDFLAGSLDFLAGSLDFLAGS、ARFLAGSARFLAGSARFLAGSARFLAGS6 6 6 6、各级子目录下的、各级子
44、目录下的、各级子目录下的、各级子目录下的MakefileMakefileMakefileMakefile中可以设置能影响当前目录下所有文件的编译链中可以设置能影响当前目录下所有文件的编译链中可以设置能影响当前目录下所有文件的编译链中可以设置能影响当前目录下所有文件的编译链界选项:界选项:界选项:界选项:EXTRA_CFLAGSEXTRA_CFLAGSEXTRA_CFLAGSEXTRA_CFLAGS、EXTRA_AFLAGSEXTRA_AFLAGSEXTRA_AFLAGSEXTRA_AFLAGS、EXTRA_LDFLAGSEXTRA_LDFLAGSEXTRA_LDFLAGSEXTRA_LDFLA
45、GS、EXTRA_ARFLAGSEXTRA_ARFLAGSEXTRA_ARFLAGSEXTRA_ARFLAGS7 7 7 7、还可以设置只影响某个文件的编译选项:、还可以设置只影响某个文件的编译选项:、还可以设置只影响某个文件的编译选项:、还可以设置只影响某个文件的编译选项:CFLAGS_$CFLAGS_$CFLAGS_$CFLAGS_$、AFLAGS_$AFLAGS_$AFLAGS_$AFLAGS_$,$,$,$,$目标目标目标目标表示文件名表示文件名表示文件名表示文件名 第27页/共38页课程安排n nLinuxLinux内核配置与编译内核配置与编译n nLinuxLinux内核内核Mak
46、efileMakefilen nLinuxLinux内核启动流程内核启动流程第28页/共38页内核启动过程1 1 1 1、LinuxLinuxLinuxLinux内核启动过程也可分为两个阶段内核启动过程也可分为两个阶段内核启动过程也可分为两个阶段内核启动过程也可分为两个阶段(1 1 1 1)、架构)、架构)、架构)、架构/开发板相关的开发板相关的开发板相关的开发板相关的引导过程引导过程引导过程引导过程第29页/共38页机器ID使用检查是否支持传入的机器类型检查是否支持传入的机器类型检查是否支持传入的机器类型检查是否支持传入的机器类型(1 1 1 1)head.shead.shead.shead
47、.s中调用中调用中调用中调用head-common.Shead-common.Shead-common.Shead-common.S实现的实现的实现的实现的_lookup_machine_type_lookup_machine_type_lookup_machine_type_lookup_machine_type检测机器检测机器检测机器检测机器IDIDIDID 第30页/共38页机器ID使用(2 2 2 2)、)、)、)、_arch_info_begin_arch_info_begin_arch_info_begin_arch_info_begin、_arch_info_end_arch_i
48、nfo_end_arch_info_end_arch_info_end在链接脚本在链接脚本在链接脚本在链接脚本arch/arm/kernel/vmlinux.ldsarch/arm/kernel/vmlinux.ldsarch/arm/kernel/vmlinux.ldsarch/arm/kernel/vmlinux.lds中定义中定义中定义中定义(3 3 3 3)、)、)、)、include/arm/include/asm/mach/arch.hinclude/arm/include/asm/mach/arch.hinclude/arm/include/asm/mach/arch.hincl
49、ude/arm/include/asm/mach/arch.h中定义了如下结构中定义了如下结构中定义了如下结构中定义了如下结构 第31页/共38页机器ID使用(4 4 4 4)、)、)、)、arch/arm/mach-s3c64xx/mach-mini6410arch/arm/mach-s3c64xx/mach-mini6410arch/arm/mach-s3c64xx/mach-mini6410arch/arm/mach-s3c64xx/mach-mini6410中定义了如下结构中定义了如下结构中定义了如下结构中定义了如下结构如果内核配置了如果内核配置了如果内核配置了如果内核配置了mini6
50、410mini6410mini6410mini6410开发板,则开发板,则开发板,则开发板,则 struct machine_desc _mach_desc_mini6410 struct machine_desc _mach_desc_mini6410结构被定义在结构被定义在结构被定义在结构被定义在段段段段,在该段中包,在该段中包,在该段中包,在该段中包含了含了含了含了mini6410mini6410开发板的开发板的开发板的开发板的机器机器机器机器IDID:MACH_TYPE_MINI6410MACH_TYPE_MINI6410各种开发板机器各种开发板机器各种开发板机器各种开发板机器IDID