嵌入式Linux内核裁减移植课件.pptx

上传人:莉*** 文档编号:73014594 上传时间:2023-02-15 格式:PPTX 页数:38 大小:1.37MB
返回 下载 相关 举报
嵌入式Linux内核裁减移植课件.pptx_第1页
第1页 / 共38页
嵌入式Linux内核裁减移植课件.pptx_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《嵌入式Linux内核裁减移植课件.pptx》由会员分享,可在线阅读,更多相关《嵌入式Linux内核裁减移植课件.pptx(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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个不同的级别:Ring0Ring3。Ring0下,可

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

3、置文件 .make cleanmake clean:remove most generated remove most generated files but keep the configfiles but keep the configmake mrpropermake mrproper:remove all generated remove all generated files+config filesfiles+config filesmake distcleanmake distclean:mrproper+remove mrproper+remove editor backup

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

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

6、上层选单。第10页/共38页内核配置与编译Y:编译出目标文件,并直接链接到内核映像imageM:编译出目标文件,但不链接N:不编译 Y、M、N的区别?第11页/共38页内核配置与编译 配置菜单中的项该怎么选择呢?参考内核配置手册文档内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件,Linux,Linux内核提供了一系列可供参考的内核配置文件,位于arch/$cpu/configsarch/$cpu/configsmake xxx_defconfig,make xxx_defconfig,生成.config.config更便捷的方法是使用厂家提供的配置文件cp config_mi

7、ni6410_n43.configcp config_mini6410_n43.config第12页/共38页内核配置与编译4 4、编译内核:编译内核映像make zImagemake zImagemake bzImage make bzImage 区别:在X86X86平台,zImagezImage只能用于小于 512K512K的内 生成带UbootUboot文件头的的内核:make uImagemake uImage 注意需要ubootuboot的mkimagemkimage工具支持,但本开发板ubootuboot支持直接引导zImagezImage参见:cmd_bootm.c:cmd_bo

8、otm.c:#ifdef CONFIG_ZIMAGE_BOOT如需获取详细编译过程信息,可使用:make zImage V=1make zImage V=1make bzImage V=1make bzImage V=1编译出错时,可以通过查看编译过程信息定位错误,例如缺少某些编译选项时可以到相应目录下的MakefileMakefile去修改 编译好的内核位于arch/boot/arch/boot/目录下 第13页/共38页内核映像构成 第14页/共38页内核映像构成 第15页/共38页内核映像构成 启动代码功能代码符号链接第16页/共38页Linux内核启动流程 第17页/共38页演示:编译

9、使用开发板内核1、使用厂商提供的配置文件配置内核2、编译内核映像zImage3、下载到开发板通过uboot启动内核第18页/共38页课程安排nLinux内核配置与编译nLinux内核MakefilenLinux内核启动流程第19页/共38页内核Makefile组成第20页/共38页内核Makefile作用1、决定编译哪些文件?2、决定怎样编译这些文件?3、决定怎样链接这些文件,最重要是它们的连接顺序如何?第21页/共38页编译哪些文件1 1、顶层MakefileMakefile决定根目录下哪些子目录将被编译(1 1)、将子目录分为以下几类:init-yinit-y、drivers-ydrive

10、rs-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时配置或者makemake时传入make ARCH=arm CROSS_COMPILE=arm-linux-make ARCH=arm CROSS_COMPILE=arm-linux-

11、在顶层目录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、编译时,依次进入init-yinit-y、drivers-ydrivers-y、net-ynet-y、libs-ylibs-y、和core-ycore-y所列出的目录中执行它们的Ma

12、kefile Makefile 第23页/共38页怎样编译文件1 1、各级子目录下的MakefileMakefile决定所在目录下哪些文件将被编译进内核,哪些文件将被编译成模块,进入哪些子目录继续调用它们的MakefileMakefile(1)(1)、配置内核时生成.config.config,转化为include/config/auto.confinclude/config/auto.conf文件(去掉了.config.config中的注释)顶层MakefileMakefile引用该文件include include/config/auto.confinclude include/confi

13、g/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-in.o一起链接成当前目录下的build-in.obuild-in.o文件,被上一层MakefileMakefile使用第24页/共38页怎样编译文件(4 4)obj-mobj-m,定义文件

14、编译成可加载模块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.o,d.o组合生成a.oa.o,a.oa.o最后制作成a.koa.ko模块(5 5)、obj-mobj-m、obj-yobj-y变量中增加子目录名则进入该子目录执行Makefile Makefile(6 6)、li

15、b-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/$(ARCH)/lib/这两个目录下第25页/共38页怎样链接文件1 1、除了head-yhead-y外,init-yinit-y、drivers-ydrivers-y等都是目录名,顶层MakefileMakefile中

16、,这些目录名直接加上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-in.o”/build-in.o”2 2、内核映像链接顺序vmlinux-init:=vmlinux-init:=$(head-y)$(head-y)$(init-y)$(init-y)vmlinux-main:=$(core-y)$(li

17、bs-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、内核映像链接脚本vmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.ldsvmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.lds 第26页/共38页怎样链接文件5 5、顶层目录MakefileMakefil

18、e和arch/$(ARCH)/Makefilearch/$(ARCH)/Makefile设置了影响所有文件的编译链接选项:CFLAGSCFLAGS、AFLAGSAFLAGS、LDFLAGSLDFLAGS、ARFLAGSARFLAGS6 6、各级子目录下的MakefileMakefile中可以设置能影响当前目录下所有文件的编译链界选项:EXTRA_CFLAGSEXTRA_CFLAGS、EXTRA_AFLAGSEXTRA_AFLAGS、EXTRA_LDFLAGSEXTRA_LDFLAGS、EXTRA_ARFLAGSEXTRA_ARFLAGS7 7、还可以设置只影响某个文件的编译选项:CFLAGS_

19、$CFLAGS_$、AFLAGS_$AFLAGS_$,$目标表示文件名 第27页/共38页课程安排nLinux内核配置与编译nLinux内核MakefilenLinux内核启动流程第28页/共38页内核启动过程1 1、LinuxLinux内核启动过程也可分为两个阶段(1 1)、架构/开发板相关的引导过程第29页/共38页机器ID使用检查是否支持传入的机器类型(1 1)head.shead.s中调用head-common.Shead-common.S实现的_lookup_machine_type_lookup_machine_type检测机器IDID 第30页/共38页机器ID使用(2 2)、_

20、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中定

21、义了如下结构如果内核配置了mini6410mini6410开发板,则 struct machine_desc _mach_desc_mini6410结构被定义在段,在该段中包含了mini6410开发板的机器ID:MACH_TYPE_MINI6410各种开发板机器IDID由arch/arm/tools/mach-typesarch/arm/tools/mach-types在编译中生成 第32页/共38页启动参数使用2 2、汇编实现的引导过程实现后,跳转到C C实现的start_kernelstart_kernel函数,进入通用启动过程 UbootUboot传入的启动参数在start_kernel

22、start_kernel过程中处理 第33页/共38页内核启动过程(2 2)、后续通用启动过程第34页/共38页启动参数使用1 1、start_kernelstart_kernel实现在init/main.cinit/main.c中调用setup_arch、setup_comand_line函数处理启动参数 第35页/共38页启动参数使用2 2、启动参数使用:利用_setup_setup宏定义在.init.setup段中的结构体struct obs_kernel_param设置启动参数供后续使用从prepare_namespace中的saved_root_name找到root分区参数使用3 3、启动参数处理完毕后rest_initrest_init -kernel_init -kernel_init -prepare_namespace -prepare_namespace -mount_root:mount_root:挂接根文件系统 -init_post-run_init_process(“/sbin/init”)/执行应用程序 第36页/共38页NAND分区表 s3c_nand.c第37页/共38页感谢您的观看。第38页/共38页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁