嵌入式Linux内核裁减移植PPT课件_第1页
嵌入式Linux内核裁减移植PPT课件_第2页
嵌入式Linux内核裁减移植PPT课件_第3页
嵌入式Linux内核裁减移植PPT课件_第4页
嵌入式Linux内核裁减移植PPT课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程安排nLinux内核配置与编译nLinux内核MakefilenLinux内核启动流程第1页/共38页Linux系统结构第2页/共38页用户与内核空间 从上图得 知, Linux由 用户空间和内核空间两部分组 成。 为什么 Linux系统会被划分为 用户空间与内核空间?第3页/共38页CPU工作模式 现代 CPU通常实现了不同 的工作模 式,以ARM为例 , 实现了 7种工作模式: 用 户模式 ( usr)、 快速中断 (fiq)、 外部中断(irq)、 管理模 式( svc) 、 数据访问中(abt)、 系统模 式 (sys)、 未 定义指令异常 (und) X86也实现了 4个不同的级

2、别 : Ring0Ring3。Ring0下 , 可以执行特权 指令,可以访问 IO设备等,在 Ring3则有 很多限 制。 第4页/共38页体系结构 Linux系统利用了 CPU的 这一特性,使用了其中的两级来分别运行 Linux内核与应用程序,这样使操作系统本身得到充分的保护。 例如:如果使用 X86,用 户代码运行在 Ring3,内核代码运行在Ring0。 第5页/共38页体系结构 内核空间与用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。 什么是Linux内核? 第6页/共38页内核架构第7页/共38页内核配置与编译LinuxLinux内核具有

3、可定制的优点 , ,具体步骤如下:1. 1. 清除临时文件、中间文件和配置文件 . . make cleanmake clean:remove most generated remove most generated files but keep the configfiles but keep the config make mrpropermake mrproper:remove all generated remove all generated files + config filesfiles + config files make distcleanmake distclean:m

4、rproper + remove mrproper + remove editor backup and patch fileseditor backup and patch files第8页/共38页内核配置与编译2 2、确定目标系统的 软硬件配置情况,比如 CPUCPU的类型、网卡的型号,所需支持的网络协议等3 3、使用如下命令之一配置内核: make configmake config:基于文本模式的交互式配置。 make menuconfigmake menuconfig:基于文本模式的菜单型配置。(推荐使用) make oldconfigmake oldconfig:使用已有的配置

5、文 件( .config.config) , 但 是会询 问新增 的配置 选项。 make xconfigmake xconfig:图 形 化的 配置(需 安装图 形化系统 )。4 4、配置信息保存为.config.config文件第9页/共38页内核配置与编译make menuconfig 是 最为常用的内核配置方式, 按功能分层次来组织配置选项 使用方法如下:1、使用方向键在各选项间移动;2、使用 “Enter”键进入下一层 选单;每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项;3、在括号中按 “y”将这个项目编译进内核中,按“m”编译为 模块,按 “n”为不选择

6、(按空格键也可在编译进内核、编译为模块和不编译三者间进行切换),按“h”将 显示这个选项的帮助信息,按 “Esc”键将返回到上层选单。第10页/共38页内核配置与编译 Y:编译出目标文件,并直接链接到内核映像image M:编译出目标文件,但不链接 N:不编译 Y、M、N的区别? 第11页/共38页内核配置与编译 配置菜单中的项该怎么选择呢? 参考内核配置手册文档 内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件,Linux,Linux内核提供了一系列可供参考的内核配置文件,位于arch/$cpu/configsarch/$cpu/configs make xxx_defcon

7、fig,make xxx_defconfig,生成.config.config 更便捷的方法是使用厂家提供的配置文件 cp config_mini6410_n43 .configcp config_mini6410_n43 .config第12页/共38页内核配置与编译4 4、编译内核: 编译内核映像 make zImagemake zImage make bzImage make bzImage 区别:在X86X86平台, zImagezImage只能用于小于 512K512K的内 生成带UbootUboot文件头的的内核: :make uImagemake uImage 注意需要uboot

8、uboot的mkimagemkimage工具支持, ,但本开发板ubootuboot支持直接引导zImagezImage参见:cmd_bootm.c:cmd_bootm.c: :#ifdef CONFIG_ZIMAGE_BOOT 如需获取详细编译过程信息, ,可使用: make zImage V=1make zImage V=1 make bzImage V=1make bzImage V=1编译出错时,可以通过查看编译过程信息定位错误,例如缺少某些编译选项时可以到相应目录下的MakefileMakefile去修改 编译好的内核位于arch/boot/arch/boot/目录下 第13页/共3

9、8页内核映像构成 第14页/共38页内核映像构成 第15页/共38页内核映像构成 启动代码功能代码符号链接第16页/共38页Linux内核启动流程 第17页/共38页演示:编译使用开发板内核1、使用厂商提供的配置文件配置内核2、编译内核映像zImage3、下载到开发板通过uboot启动内核第18页/共38页课程安排nLinux内核配置与编译nLinux内核MakefilenLinux内核启动流程第19页/共38页内核Makefile组成第20页/共38页内核Makefile作用1、决定编译哪些文件?2、决定怎样编译这些文件?3、决定怎样链接这些文件,最重要是它们的连接顺序如何?第21页/共38

10、页编译哪些文件1 1、顶层MakefileMakefile决定根目录下哪些子目录将被编译(1 1)、将子目录分为以下几类:init-yinit-y、drivers-ydrivers-y、net-ynet-y、libs-ylibs-y、和core-ycore-y(2 2)、archarch目录内的MakefileMakefile直接包含进来 include $(srctree)/arch/$(ARCH)/Makefileinclude $(srctree)/arch/$(ARCH)/Makefile(3 3)、ARCHARCH变量在make menuconfigmake menuconfig时配

11、置或者makemake时传入make ARCH=arm CROSS_COMPILE=arm-linux-make ARCH=arm CROSS_COMPILE=arm-linux- 在顶层目录MakefileMakefile可查看这两个体系结构相关变量第22页/共38页编译哪些文件2 2、arch/$(ARCH)/Makefilearch/$(ARCH)/Makefile决定arch/$(ARCH)arch/$(ARCH)目录下哪些文件、哪些目录被编译(1 1)、增加head-yhead-y类: (2 2)、并且扩展libs-ylibs-y、core-ycore-y类中体系结构相关内容3 3、

12、编译时,依次进入init-yinit-y、drivers-ydrivers-y、net-ynet-y、libs-ylibs-y、和core-ycore-y所列出的目录中执行它们的Makefile Makefile 第23页/共38页怎样编译文件1 1、各级子目录下的MakefileMakefile决定所在目录下哪些文件将被编译进内核,哪些文件将被编译成模块,进入哪些子目录继续调用它们的MakefileMakefile(1)(1)、配置内核时生成.config.config,转化为include/config/auto.confinclude/config/auto.conf文件(去掉了.con

13、fig.config中的注释)顶层MakefileMakefile引用该文件include include/config/auto.confinclude include/config/auto.conf(2)(2)、auto.confauto.conf中的变量值有两类:“y”y”和“m”m”, ,子目录MakefileMakefile使用这些变量来决定哪些文件被编译进内核中,哪些文件被编译成模块(3)(3)、obj-yobj-y,定义文件编译进内核: : obj-y obj-y中定义的.o.o文件由当前目录下的.c.c或.S.S文件编译生成,它们连同下级子目录的build-in.obuild

14、-in.o一起链接成当前目录下的build-in.obuild-in.o文件,被上一层MakefileMakefile使用第24页/共38页怎样编译文件(4 4)obj-mobj-m,定义文件编译成可加载模块obj-mobj-m中定义的.o.o文件由当前目录下的.c.c或.S.S文件编译生成,但不会编进 build-in.o build-in.o中,而是编译成可加载模块.ko.ko当某个模块(m)(m)需要多个文件编译制作而成: :obj-m = a.oobj-m = a.oa-objs:= b.o, c.o, d.oa-objs:= b.o, c.o, d.o由b.ob.o,c.o,d.oc

15、.o,d.o组合生成a.oa.o,a.oa.o最后制作成a.koa.ko模块(5 5)、obj-mobj-m、obj-yobj-y变量中增加子目录名则进入该子目录执行Makefile Makefile (6 6)、 lib-ylib-y,定义文件被编译成库文件lib-ylib-y中定义的.o.o文件由当前目录下的.c.c或.S.S文件编译生成,并且被打包成当前目录下的一个库文件lib.alib.a要把lib.alib.a编译进内核,需要在顶层MakefileMakefile中libs-ylibs-y中列出该目录要编译成库的代码一般在lib/lib/、arch/$(ARCH)/lib/arch/

16、$(ARCH)/lib/这两个目录下第25页/共38页怎样链接文件1 1、除了head-yhead-y外,init-yinit-y、drivers-ydrivers-y等都是目录名,顶层MakefileMakefile中,这些目录名直接加上build-in.obuild-in.o或lib.a,lib.a,表示要链接进内核的文件init-y := $(patsubst %/, %/build-in.o, $(init-y)init-y := $(patsubst %/, %/build-in.o, $(init-y)将在$(init-y)$(init-y)变量中将“/”/”替换成“/build-

17、in.o”/build-in.o”2 2、内核映像链接顺序vmlinux-init:=vmlinux-init:=$(head-y) $(head-y) $(init-y)$(init-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)3 3、内核映像链

18、接脚本vmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.ldsvmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.lds第26页/共38页怎样链接文件5 5、顶层目录MakefileMakefile和arch/$(ARCH)/Makefilearch/$(ARCH)/Makefile设置了影响所有文件的编译链接选项:CFLAGSCFLAGS、AFLAGSAFLAGS、LDFLAGSLDFLAGS、ARFLAGSARFLAGS6 6、各级子目录下的MakefileMakefile中可以设置能影响当前目录下所有文件的编译链界选项:EXT

19、RA_CFLAGSEXTRA_CFLAGS、EXTRA_AFLAGSEXTRA_AFLAGS、EXTRA_LDFLAGSEXTRA_LDFLAGS、EXTRA_ARFLAGSEXTRA_ARFLAGS7 7、还可以设置只影响某个文件的编译选项:CFLAGS_$CFLAGS_$、AFLAGS_$AFLAGS_$, , $目标表示文件名第27页/共38页课程安排nLinux内核配置与编译nLinux内核MakefilenLinux内核启动流程第28页/共38页内核启动过程1 1、LinuxLinux内核启动过程也可分为两个阶段(1 1)、架构/ /开发板相关的引导过程第29页/共38页机器ID使用

20、检查是否支持传入的机器类型(1 1)head.shead.s中调用head-common.Shead-common.S实现的_lookup_machine_type_lookup_machine_type检测机器IDID第30页/共38页机器ID使用(2 2)、_arch_info_begin_arch_info_begin、_arch_info_end_arch_info_end在链接脚本arch/arm/kernel/vmlinux.ldsarch/arm/kernel/vmlinux.lds中定义(3 3)、include/arm/include/asm/mach/arch.hinclude/arm/include/asm/mach/arch.h中定义了如下结构第31页/共38页机器ID使用(4 4)、arch/arm/mach-s3c64xx/mach-mini6410arch/arm/mach-s3c64xx/mach-mini6410中定义了如下结构如果内核配置了mini6410mini6410开发板,则 struct machine_desc _mach_desc_mini6410结构被定义在段,在该段中包含了mini6410开发板的机器ID:MACH_TYPE_MINI6410各种开发

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论