Linux内核分析.ppt

上传人:豆**** 文档编号:33506152 上传时间:2022-08-11 格式:PPT 页数:59 大小:1.56MB
返回 下载 相关 举报
Linux内核分析.ppt_第1页
第1页 / 共59页
Linux内核分析.ppt_第2页
第2页 / 共59页
点击查看更多>>
资源描述

《Linux内核分析.ppt》由会员分享,可在线阅读,更多相关《Linux内核分析.ppt(59页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、预习检查预习检查 简单介绍下Linux版本和特点? Makefile的作用? Kconfig的作用? 简述Linux内核的启动流程?Page 3/40本章目标本章目标 了解Linux内核源码的组织结构 掌握Linux内核的编译及启动本章结构本章结构Linux内核配置内核配置 Linux内核分析内核分析内核源码结构及内核源码结构及Makefile分析分析Linux内核配置选项内核配置选项内核的内核的Kconfig分析分析Linux版本及特点版本及特点Linux内核启动流程分析内核启动流程分析 Linux内核启动过程概述内核启动过程概述编译、烧写、启动内核编译、烧写、启动内核修改内核以支持修改内核

2、以支持S3C2440开发板开发板获取内核源获取内核源Unix有多遥远?有多遥远? Unix诞生于失败的项目:Multics 1969年,Ken Thomspon在PDP-7上实现 1973年,Dennis Ritche实现了C语言版的Unix 1983年,AT&T推出System V 19791993年,3BSD,到最后一个4.4BSD 商业的Unix版本: HP UX Sun solaris IBM AIXUnix的优势的优势 简洁,系统调用仅百余个 在Unix,所有的东西被当作文件看待 Unix的内核和相关的系统工具软件都是C开发的 惊人的移植能力 fork()迅速 简单而又稳定的通信原语

3、追寻追寻Linus的足迹的足迹 1991年,linus为intel 80386开发的unix操作系统 Linux内核遵循GPL,是Free software Linux 是unix-like的操作系统内核 Linux系统的基础 内核 C库 GCC 系统的基本工具Linux的发行版的发行版 Debian GNU/Linux Fedora Gentoo Linux Mandriva Linux Redhat Enterprise Linux(RHEL) Slackware Linux OpenSuSE SuSE Linux Enterprise Server Ubuntu操作系统操作系统VS内核内

4、核 一般理解的操作系统 完成最基本功能,和系统管理的那些部分 内核,驱动,启动引导程序,命令行shell以及其他的一些界面 现在理解的操作系统,指内核 内核才是操作系统的核心 负责响应中断服务程序 负责管理多个进程从而分享处理器时间的调度程序 负责管理进程地址空间的内存管理程序 网络,和进程间通信 运行于系统态,以及受保护的内存空间,称之为内核空间处理器的上下文环境处理器的上下文环境 运行于内核空间,处于进程上下文,代表某个进程执行 运行于内核空间,处于中断上下文,与进程无关 运行于用户空间,执行用户进程 CPU空闲时。内核运行一个空进程,处于进程上下文,运行于内核空间Linux内核内核 VS

5、 传统传统UNIX的内核的内核 都是单体内核,Linux支持动态加载模块 Linux内核支持preemptive Linux提供了面向对象的设备模型,hotplug等 虚拟文件系统 内核线程安装内核源码安装内核源码 两种形式的压缩 GNU zip#tar xzvf linux-x.y.z.tar.gz Bzip2#tar xvjf linux-x.y.z.tar.bz2Linux的源代码结构的源代码结构目录描述目录描述Linux内核源码层次结构内核源码层次结构arch/arm/的目录的目录include/asm的头文件目录的头文件目录 1asm是一个是一个symbolic link, 因为众多

6、的文件都需要包含因为众多的文件都需要包含asm-XXX/目录下的某目录下的某个头文件,使用个头文件,使用asm的链接之后,在不同的平台下指向不同的目录,这样,的链接之后,在不同的平台下指向不同的目录,这样,增加了软件的可移植性。增加了软件的可移植性。include/linux/头文件目录头文件目录 与平台无关的头文件一般放在linux这个目录下 如linux/mtd/Linux Makefile分析分析 Makefile的作用: 决定编译哪些文件。 怎样编译这些文件? 怎样连接这些文件,最重要的是它们的顺序如何?Linux内核内核Makefile文件分类文件分类 Makefile的作用的作用

7、决定编译哪些文件决定编译哪些文件 怎样编译这些文件怎样编译这些文件 怎样连接这些文件,它们的顺序如何怎样连接这些文件,它们的顺序如何Makefile的作用(的作用(1) 决定编译哪些文件决定编译哪些文件 1) 顶层Makefile决定内核根目录下哪些子目录将被编迸内核。 2) arch/$(ARCH)/Makefile决定arch/$(ARCH)目录下哪些文件、哪些目录将被编进内核。 3) 各级子目录下的Makefile决定所在目录下哪些文件将被编进内核,哪些文件将被编成模块(即驱动程序),进入哪些子目录继续调用它们的Makefile。Makefile的变量的变量 在在include/conf

8、ig/auto.conf文件中,变量的值主要有两文件中,变量的值主要有两类类:“y ”和和“m”)。各级子目录的。各级子目录的 Makefile使用这些变量来使用这些变量来决定哪些文件被编进内核中,哪些文件被编成模块决定哪些文件被编进内核中,哪些文件被编成模块(即驱即驱动程序动程序), 要进入哪些下一级子目录继续编译要进入哪些下一级子目录继续编译 objy用来定义哪些文件被编进用来定义哪些文件被编进( built-in)内核内核 obj-m用来定义哪些文件被编译成可加载模块用来定义哪些文件被编译成可加载模块( Loadable module ) lib-y用来定义哪些文件被编成库文件用来定义哪

9、些文件被编成库文件 obj-y、obj-m还可以用来指定要进入的下一层子目录还可以用来指定要进入的下一层子目录Makefile的作用(的作用(2) 怎样编译这些文件怎样编译这些文件 即编译选项、连接选项是什么 选项分3类: 全局的,适用于整个内核代码树; 局部的,仅适用于某个Makefile中的所有文件; 个体的,仅适用于某个文件Makefile的作用(的作用(3) 怎样连接这些文件,它们的顺序如何怎样连接这些文件,它们的顺序如何 arch/arm/Makefile: 顶层Makefile:Makefile的作用(的作用(3) 顶层Makefile中,再往下看: 顶层Makefile按照一定的

10、顺序组织文件,根据连接脚本arc/$(ARCH)/ kernel/ vmlinux.lds生成内核映象文件vmlinux对对Makefile的总结的总结 (1)配置文件.config中定义了一系列的变量,Makefile将结合它们釆决定哪些文件被编 进内核、哪些文件被编成模块、涉及哪些子目录。 (2)顶层Makefile和arch/$(ARCH)/Makefile决定根目录下哪些子目录,arc/$(ARCH) 目录下哪些文件和目录将被编迸内核。 (3)最后,各级子目录下的Makefile决定所在目录下哪些文件将被编进内核,哪些文件 将被编成模块(即驱动程序),进入哪些目录继续调用它们的Make

11、file 。 ( 4)顶层Makefile和arch/$(ARCH)/Makefile设置了可以影响所有文件的编译、连接选 项:CFLAGS、MLAGS、LDFLAGS、ARFLAGS。 (5)各级子目录下的Makefile中可以设置能够影响当前目录下所有文件的编译、连接选 项:EXTRA_CFLAGS、EXTRA_AFLAGS、EXTRA_LDFLAGS、EXTRA_ARFLAGS;还可以设置可以影响某个文件的编译选项:CFLAGS_$,AFLAGS_$ 。 ( 6)顶层Makefile按照一定的顺序组织文件,根据连接脚本arc/$(ARCH)/ kernel/ vmlinux.lds生成内

12、核映象文件vmlinux。内核的内核的Kconfig分析分析 所有配置工具都是通过读取所有配置工具都是通过读取arc/$(ARCH)/Kconfig文件来文件来生成配置界面生成配置界面 这个文件是所有配置文件的总入口,它会包含其他目录这个文件是所有配置文件的总入口,它会包含其他目录的的Kconfig文件。文件。 make menuconfig,得到配置界面如下图所示:得到配置界面如下图所示:内核的内核的Kconfig分析分析 内核源码每个子目录中,都有一个内核源码每个子目录中,都有一个Makefile文件和文件和Kconfig文件文件 Kconfig用于配置内核,它就是各种配置界面的源文件。用

13、于配置内核,它就是各种配置界面的源文件。 内核的配置工具读取各内核的配置工具读取各 个个Kconfig文件,生成配置界面文件,生成配置界面供开发人员配置内核,最后生成配置文件供开发人员配置内核,最后生成配置文件.config。 内核的配置界面以树状的菜单形式组织,主菜单下有若内核的配置界面以树状的菜单形式组织,主菜单下有若干个子菜单,子菜单下又有子菜干个子菜单,子菜单下又有子菜 单或配置选项。每个子单或配置选项。每个子菜单或选项可以有依赖关系,这些依赖关系用来确定它菜单或选项可以有依赖关系,这些依赖关系用来确定它们是否显示。们是否显示。 只有被依赖项的父项已经被选中,子项才只有被依赖项的父项已

14、经被选中,子项才会显示。会显示。Kconfig文件基本要素:文件基本要素:config条目条目 config条目用来配置一个选项,它用于生成一个变量,条目用来配置一个选项,它用于生成一个变量,这个变量会连同它的这个变量会连同它的 值一起被写入配置文件值一起被写入配置文件.config中。中。 config出现的三种配置结果:出现的三种配置结果:CONFIG_LEDS_S3C24XX=y #对应的文件被编进内核CONFIG_LEDS_S3C24XX=m #对应的文件被编成模块CONFIG_LEDS_S3C24XX #对应的文件没有被使用config条目格式条目格式 config关键字,表示一个配

15、置选项的开始。关键字,表示一个配置选项的开始。 config变量类型:变量类型: bool tristate string hex int注意:注意:prompt关键字可以关键字可以省略省略 条件判断条件判断“if expr”“prompt” “if” 注意:省略了前缀注意:省略了前缀“CONFIG_”config条目格式条目格式 依赖关系:依赖关系: 缺省值定义:缺省值定义: 选择选项:选择选项: 帮助信息:帮助信息:“depends on”/ “requires” “default” “if” “select” “if” “help” or “-help-”config条目实例分析条目实例

16、分析Kconfig文件基本要素:文件基本要素:menu条目条目 menu条目用于生成菜单,格式如下:条目用于生成菜单,格式如下:“menu” “endmenu”menu “Floating point emulation”config FPE_NWFPEconfig FPE_NWFPE_XPendmenuKconfig文件基本要素:文件基本要素:choice条目条目 choice条目将多个类似的配置选项组合在一起,供用户条目将多个类似的配置选项组合在一起,供用户单选或多选,格式如下:单选或多选,格式如下:“choice”“endchoice”choice prompt “ARM system

17、type” default ARCH_VERSATILEconfig ARCH_AAEC2000config ARCH_INTEGRATORendchoiceKconfig文件基本要素:文件基本要素:comment条目条目 comment条目用于定义一些帮助信息,它在配置过程中条目用于定义一些帮助信息,它在配置过程中出现在界面的第一行出现在界面的第一行.并且这些并且这些 帮助信息会出现在配置文帮助信息会出现在配置文件中件中(作为注释作为注释),格式如下:,格式如下:“comment” menu “Floating point emulation”comment “At least one em

18、ulation must be selected”Kconfig文件基本要素:文件基本要素:source条目条目 source条目用于读入另一个条目用于读入另一个Kconfig文件,文件, 格式如下:格式如下: 配置界面操作方法配置界面操作方法 配置界面中,以*、或开头的选项表示相应功能的文件被编译进内核中、被编译 成一个模块,或者没有使用。尖括号表示相应功能的文件可以被编译成模块。 按Y键选择将它编译进内核,按M键选择 将它编译成模块,按键将不使用它。也可以按空格键进行循环选择,例如:YNMY。 上/下方向键 空格键“source” source “net/Kconfig”编译内核的步骤编译

19、内核的步骤 Step1: 拷贝config_n35为文件.config #cp config_n35 .config Step2: 修改内核目录下的Makefile,修改CROSS_COMPILE ?= arm-linux- Step3: 执行make menuconfig,并保存,如果有问题,以root权限执行 #make menuconfig Step4: 编译内核 #make zImage 编译完成后,zImage放在/arch/arm/boot/zImageLinux内核配置选项内核配置选项 make menuconfig 配置界面主菜单的类别配置界面主菜单的类别配置界面主菜单的类别配

20、置界面主菜单的类别“system Type”菜单菜单:系统类型系统类型“Device Drivers”菜单:设备驱动程序菜单:设备驱动程序阶段总结阶段总结 Makefile作用 Kconfig作用 内核配置编译Linux内核启动过程概述内核启动过程概述 Linux的启动过程可以分为两部分;的启动过程可以分为两部分; 架构/开发板相关的引导过程 后续的通用启动过程Linux内核启动过程概述内核启动过程概述 第一阶段:引导阶段第一阶段:引导阶段 引导阶段通常使用汇编语言编写,它首先检查内核是否支引导阶段通常使用汇编语言编写,它首先检查内核是否支持当前架构的处理器,然后检持当前架构的处理器,然后检

21、查是否支持当前开发板。查是否支持当前开发板。通过检查后,就为调用下一阶段的通过检查后,就为调用下一阶段的start_kernel函数作准函数作准备了。这主要分如下两个步骤。备了。这主要分如下两个步骤。 (1)连接内核时使用的虚拟地址,所以要设置页表、使能MMU。 (2)调用C函数start_kernel之前的常规工作,包括复制数据段、清除BSS段、调用start_kernel函数Linux内核启动过程概述内核启动过程概述编译内核的步骤编译内核的步骤 Step1: 拷贝config_n35为文件.config #cp config_n35 .config Step2: 修改内核目录下的Makef

22、ile,修改CROSS_COMPILE ?= arm-linux- ARM ?= arm Step3: 执行make menuconfig,并保存,如果有问题,以root权限执行 #make menuconfig Step4: 编译内核 #make zImage 编译完成后,zImage放在/arch/arm/boot/zImage引导阶段代码分析引导阶段代码分析 arch/arm/kernel/head.S是内核执行的第一个文件78 ENTRY(stext)79msrcpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC ensure svc mode80 and

23、 irqs disabled81bl_lookup_processor_type r5=procinfo r9=cpuid82movsr10, r5 invalid processor (r5=0)?83beq_error_p yes, error p84bl_lookup_machine_type r5=machinfo85movsr8, r5 invalid machine (r5=0)?86beq_error_a yes, error aCPU类型类型ID arch/arm/kernel/head.S中执行的两个重要工作: 校验CPU ID 校验机器类型ID CPU ID 调用_look

24、up_processor_type函数,确定内核是否支持当前cpu 位于arch/arm/kernel/head-common.S 机器类型机器类型ID _lookup_ machine_type函数 machine_ desc结构中的nr成员 校验CPU ID 校验机器类型ID arch/arm/mach-s3c2440/mach-smdk2440.c 192 MACHINE_START(S3C2440, SMDK2440)/* Maintainer: Ben Dooks */.phys_io= S3C2440_PA_UART,.io_pg_offst= (u32)S3C24XX_VA_UA

25、RT) 18) & 0 xfffc,.boot_params= S3C2440_SDRAM_PA + 0 x100,.init_irq = s3c24xx_init_irq,.map_io= smdk2440_map_io,.init_machine= smdk2440_machine_init,.timer= &s3c24xx_timer,202 MACHINE_END机器类型机器类型ID 宏MACHINE_ START、MACHINE_ END在include/asm-arm/mach/arch.h文件中定义 上一段代码扩展开#define MACHINE_START(_type,_nam

26、e)const struct machine_desc _mach_desc_#_type _attribute_(_section_(.arch.info) = .nr= MACH_TYPE_#_type,.name= _name,#define MACHINE_END;static const struct machine_desc _mach_desc_S3C2440_used _attribute_(_section_(.arch.info.init) = .nr= MACH_TYPE_S3C2440,.name= “SMDK2440”,start_kernel函数部分代码分析函数部分

27、代码分析 第二阶段第一个C函数:start_kernel函数 定义在init/main.c中 U-Boot传给内核的参数有两类: 预先存在某个地址的tag列表 调用内 核时在r1寄存器中指定的机器类型ID 其中setup_arch函数 是重要初始化函数setup_arch函数分析函数分析 在arch/arm/kernel/setup.c中定义内核第二阶段启动过程分析内核第二阶段启动过程分析编译内核编译内核 解压内核 配置、编译内核cd /home/studenttar xvzf linux-2.6.29.tgzcp config_mini2440_n35 .configmake menucon

28、figmake zImage烧写、启动内核烧写、启动内核 烧写内核 启动内核tftp 0 x32000000 uImagenand erase 0 x50000 0 x200000nand write.jffs2 0 x32000000 0 x50000 0 x200000bootm 0 x32000000本章结构本章结构Linux内核配置内核配置 Linux内核分析内核分析内核源码结构及内核源码结构及Makefile分析分析Linux内核配置选项内核配置选项内核的内核的Kconfig分析分析Linux版本及特点版本及特点Linux内核启动流程分析内核启动流程分析 Linux内核启动过程概述内核启动过程概述编译、烧写、启动内核编译、烧写、启动内核修改内核以支持修改内核以支持S3C2440开发板开发板获取内核源获取内核源如何配置、编译如何配置、编译内核内核分析内核的启动分析内核的启动流程流程实验实验 任务一、任务一、Linux内核的编译与下载内核的编译与下载

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

当前位置:首页 > 教育专区 > 教案示例

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

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