收藏 分销(赏)

Linux内核分析.pptx

上传人:精*** 文档编号:4606832 上传时间:2024-10-05 格式:PPTX 页数:58 大小:1.99MB 下载积分:16 金币
下载 相关 举报
Linux内核分析.pptx_第1页
第1页 / 共58页
Linux内核分析.pptx_第2页
第2页 / 共58页


点击查看更多>>
资源描述
LinuxLinuxLinuxLinux内核分析内核分析内核分析内核分析第6章预习检查预习检查简单介绍下Linux版本和特点?Makefile的作用?Kconfig的作用?简述Linux内核的启动流程?Page 3/40本章目标本章目标了解Linux内核源码的组织结构掌握Linux内核的编译及启动本章结构本章结构Linux内核配置内核配置 Linux内核分析内核分析内核源码结构及内核源码结构及Makefile分析分析Linux内核配置选项内核配置选项内核的内核的Kconfig分析分析Linux版本及特点版本及特点Linux内核启动流程分析内核启动流程分析 Linux内核启动过程概述内核启动过程概述编译、烧写、启动内核编译、烧写、启动内核修改内核以支持修改内核以支持S3C2440开发板开发板获取内核源获取内核源Unix有多遥远?有多遥远?Unix诞生于失败的项目:Multics1969年,Ken Thomspon在PDP-7上实现1973年,Dennis Ritche实现了C语言版的Unix1983年,AT&T推出System V19791993年,3BSD,到最后一个4.4BSD商业的Unix版本:HP UXSun solarisIBM AIXUnix的优势的优势简洁,系统调用仅百余个在Unix,所有的东西被当作文件看待Unix的内核和相关的系统工具软件都是C开发的惊人的移植能力fork()迅速简单而又稳定的通信原语追寻追寻Linus的足迹的足迹1991年,linus为intel 80386开发的unix操作系统Linux内核遵循GPL,是Free softwareLinux 是unix-like的操作系统内核Linux系统的基础内核C库GCC系统的基本工具Linux的发行版的发行版Debian GNU/LinuxFedoraGentoo LinuxMandriva LinuxRedhat Enterprise Linux(RHEL)Slackware LinuxOpenSuSESuSE Linux Enterprise ServerUbuntu操作系统操作系统VS内核内核一般理解的操作系统完成最基本功能,和系统管理的那些部分内核,驱动,启动引导程序,命令行shell以及其他的一些界面现在理解的操作系统,指内核内核才是操作系统的核心负责响应中断服务程序负责管理多个进程从而分享处理器时间的调度程序负责管理进程地址空间的内存管理程序网络,和进程间通信运行于系统态,以及受保护的内存空间,称之为内核空间处理器的上下文环境处理器的上下文环境运行于内核空间,处于进程上下文,代表某个进程执行运行于内核空间,处于中断上下文,与进程无关运行于用户空间,执行用户进程CPU空闲时。内核运行一个空进程,处于进程上下文,运行于内核空间Linux内核内核 VS 传统传统UNIX的内核的内核都是单体内核,Linux支持动态加载模块Linux内核支持preemptiveLinux提供了面向对象的设备模型,hotplug等虚拟文件系统内核线程安装内核源码安装内核源码两种形式的压缩GNU zip#tar xzvf linux-x.y.z.tar.gzBzip2#tar xvjf linux-x.y.z.tar.bz2Linux的源代码结构的源代码结构目录描述目录描述目录目录描述描述arch特定体系结构的源码crytoCryto APIDocumentation内核源码文档Drivers设备驱动程序fsVFS和各种文件系统include内核头文件init内核引导和初始化ipc进程间通信代码kernel调度子系统这样的核心子系统lib通用内核函数mm内存管理子系统与虚拟内存net网络子系统scripts编译内核所用的脚本securityLinux的安全模块sound语音子系统usr早期用户代码(initramfs)Linux内核源码层次结构内核源码层次结构arch/arm/的目录的目录目录目录说明说明boot平台相关的启动代码,一般包含head.Sconfigs预定义了此体系结构平台下的配置文件kernel与体系结构相关的内核代码lib与体系结构相关的内核函数库mm与体系结构相关的内存管理部分代码mach-xxx与某款特定CPU的平台代码include/asm的头文件目录的头文件目录1asm是一个是一个symbolic link,因为众多的文件都需要包含因为众多的文件都需要包含asm-XXX/目录下的某目录下的某个头文件,使用个头文件,使用asm的链接之后,在不同的平台下指向不同的目录,这样,的链接之后,在不同的平台下指向不同的目录,这样,增加了软件的可移植性。增加了软件的可移植性。include/linux/头文件目录头文件目录与平台无关的头文件一般放在linux这个目录下如linux/mtd/Linux Makefile分析分析 Makefile的作用:决定编译哪些文件。怎样编译这些文件?怎样连接这些文件,最重要的是它们的顺序如何?Linux内核内核Makefile文件分类文件分类 Makefile的作用的作用 决定编译哪些文件决定编译哪些文件怎样编译这些文件怎样编译这些文件怎样连接这些文件,它们的顺序如何怎样连接这些文件,它们的顺序如何Makefile的作用(的作用(1)决定编译哪些文件决定编译哪些文件1)顶层Makefile决定内核根目录下哪些子目录将被编迸内核。2)arch/$(ARCH)/Makefile决定arch/$(ARCH)目录下哪些文件、哪些目录将被编进内核。3)各级子目录下的Makefile决定所在目录下哪些文件将被编进内核,哪些文件将被编成模块(即驱动程序),进入哪些子目录继续调用它们的Makefile。Makefile的变量的变量 在在include/config/auto.conf文件中,变量的值主要有两文件中,变量的值主要有两类类:“y”和和“m”)。各级子目录的。各级子目录的 Makefile使用这些变量使用这些变量来决定哪些文件被编进内核中,哪些文件被编成模块来决定哪些文件被编进内核中,哪些文件被编成模块(即即驱动程序驱动程序),要进入哪些下一级子目录继续编译要进入哪些下一级子目录继续编译objy用来定义哪些文件被编进用来定义哪些文件被编进(built-in)内核内核obj-m用来定义哪些文件被编译成可加载模块用来定义哪些文件被编译成可加载模块(Loadable module)lib-y用来定义哪些文件被编成库文件用来定义哪些文件被编成库文件obj-y、obj-m还可以用来指定要进入的下一层子目录还可以用来指定要进入的下一层子目录Makefile的作用(的作用(2)怎样编译这些文件怎样编译这些文件即编译选项、连接选项是什么选项分3类:全局的,适用于整个内核代码树;局部的,仅适用于某个Makefile中的所有文件;个体的,仅适用于某个文件Makefile的作用(的作用(3)怎样连接这些文件,它们的顺序如何怎样连接这些文件,它们的顺序如何arch/arm/Makefile:顶层Makefile:Makefile的作用(的作用(3)顶层Makefile中,再往下看:顶层Makefile按照一定的顺序组织文件,根据连接脚本arc/$(ARCH)/kernel/vmlinux.lds生成内核映象文件vmlinux对对Makefile的总结的总结(1)配置文件.config中定义了一系列的变量,Makefile将结合它们釆决定哪些文件被编 进内核、哪些文件被编成模块、涉及哪些子目录。(2)顶层Makefile和arch/$(ARCH)/Makefile决定根目录下哪些子目录,arc/$(ARCH)目录下哪些文件和目录将被编迸内核。(3)最后,各级子目录下的Makefile决定所在目录下哪些文件将被编进内核,哪些文件 将被编成模块(即驱动程序),进入哪些目录继续调用它们的Makefile。(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生成内核映象文件vmlinux。内核的内核的Kconfig分析分析 所有配置工具都是通过读取所有配置工具都是通过读取arc/$(ARCH)/Kconfig文件来文件来生成配置界面生成配置界面这个文件是所有配置文件的总入口,它会包含其他目录的这个文件是所有配置文件的总入口,它会包含其他目录的Kconfig文件。文件。make menuconfig,得到配置界面如下图所示:得到配置界面如下图所示:内核的内核的Kconfig分析分析 内核源码每个子目录中,都有一个内核源码每个子目录中,都有一个Makefile文件和文件和Kconfig文件文件Kconfig用于配置内核,它就是各种配置界面的源文件。用于配置内核,它就是各种配置界面的源文件。内核的配置工具读取各内核的配置工具读取各 个个Kconfig文件,生成配置界面供文件,生成配置界面供开发人员配置内核,最后生成配置文件开发人员配置内核,最后生成配置文件.config。内核的配置界面以树状的菜单形式组织,主菜单下有若干内核的配置界面以树状的菜单形式组织,主菜单下有若干个子菜单,子菜单下又有子菜个子菜单,子菜单下又有子菜 单或配置选项。每个子菜单或配置选项。每个子菜单或选项可以有依赖关系,这些依赖关系用来确定它们是单或选项可以有依赖关系,这些依赖关系用来确定它们是否显示。否显示。只有被依赖项的父项已经被选中,子项才会显只有被依赖项的父项已经被选中,子项才会显示。示。Kconfig文件基本要素:文件基本要素:config条目条目 config条目用来配置一个选项,它用于生成一个变量,这条目用来配置一个选项,它用于生成一个变量,这个变量会连同它的个变量会连同它的 值一起被写入配置文件值一起被写入配置文件.config中。中。config出现的三种配置结果:出现的三种配置结果:CONFIG_LEDS_S3C24XX=y#对应的文件被编进内核CONFIG_LEDS_S3C24XX=m#对应的文件被编成模块CONFIG_LEDS_S3C24XX#对应的文件没有被使用config条目格式条目格式config关键字,表示一个配置选项的开始。关键字,表示一个配置选项的开始。config变量类型:变量类型:booltristatestringhexint注意:注意:prompt关键字可以关键字可以省略省略条件判断条件判断“if expr”“prompt”“if”注意:省略了前缀注意:省略了前缀“CONFIG_”config条目格式条目格式依赖关系:依赖关系:缺省值定义:缺省值定义:选择选项:选择选项:帮助信息:帮助信息:“depends on”/“requires”“default”“if”“select”“if”“help”or“-help-”config条目实例分析条目实例分析Kconfig文件基本要素:文件基本要素:menu条目条目 menu条目用于生成菜单,格式如下:条目用于生成菜单,格式如下:“menu”“endmenu”menu“Floating point emulation”config FPE_NWFPEconfig FPE_NWFPE_XPendmenuKconfig文件基本要素:文件基本要素:choice条目条目 choice条目将多个类似的配置选项组合在一起,供用户条目将多个类似的配置选项组合在一起,供用户单选或多选,格式如下:单选或多选,格式如下:“choice”“endchoice”choice prompt“ARM system type”default ARCH_VERSATILEconfig ARCH_AAEC2000config ARCH_INTEGRATORendchoiceKconfig文件基本要素:文件基本要素:comment条目条目 comment条目用于定义一些帮助信息,它在配置过程中条目用于定义一些帮助信息,它在配置过程中出现在界面的第一行出现在界面的第一行.并且这些并且这些 帮助信息会出现在配置文帮助信息会出现在配置文件中件中(作为注释作为注释),格式如下:,格式如下:“comment”menu“Floating point emulation”comment“At least one emulation must be selected”Kconfig文件基本要素:文件基本要素:source条目条目 source条目用于读入另一个条目用于读入另一个Kconfig文件,文件,格式如下:格式如下:配置界面操作方法配置界面操作方法配置界面中,以*、或开头的选项表示相应功能的文件被编译进内核中、被编译 成一个模块,或者没有使用。尖括号表示相应功能的文件可以被编译成模块。按Y键选择将它编译进内核,按M键选择 将它编译成模块,按键将不使用它。也可以按空格键进行循环选择,例如:YNMY。上/下方向键空格键“source”source“net/Kconfig”编译内核的步骤编译内核的步骤Step1:拷贝config_n35为文件.config#cp config_n35.config Step2:修改内核目录下的Makefile,修改CROSS_COMPILE?=arm-linux-Step3:执行make menuconfig,并保存,如果有问题,以root权限执行#make menuconfigStep4:编译内核#make zImage编译完成后,zImage放在/arch/arm/boot/zImageLinux内核配置选项内核配置选项 make menuconfig配置界面主菜单的类别配置界面主菜单的类别配置界面主菜单的类别配置界面主菜单的类别“system Type”菜单菜单:系统类型系统类型“Device Drivers”菜单:设备驱动程序菜单:设备驱动程序阶段总结阶段总结Makefile作用Kconfig作用内核配置编译Linux内核启动过程概述内核启动过程概述Linux的启动过程可以分为两部分;的启动过程可以分为两部分;架构/开发板相关的引导过程后续的通用启动过程Linux内核启动过程概述内核启动过程概述第一阶段:引导阶段第一阶段:引导阶段引导阶段通常使用汇编语言编写,它首先检查内核是否支引导阶段通常使用汇编语言编写,它首先检查内核是否支持当前架构的处理器,然后检持当前架构的处理器,然后检 查是否支持当前开发板。通查是否支持当前开发板。通过检查后,就为调用下一阶段的过检查后,就为调用下一阶段的start_kernel函数作准备函数作准备了。这主要分如下两个步骤。了。这主要分如下两个步骤。(1)连接内核时使用的虚拟地址,所以要设置页表、使能MMU。(2)调用C函数start_kernel之前的常规工作,包括复制数据段、清除BSS段、调用start_kernel函数Linux内核启动过程概述内核启动过程概述编译内核的步骤编译内核的步骤Step1:拷贝config_n35为文件.config#cp config_n35.config Step2:修改内核目录下的Makefile,修改CROSS_COMPILE?=arm-linux-ARM?=armStep3:执行make menuconfig,并保存,如果有问题,以root权限执行#make menuconfigStep4:编译内核#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 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类型类型IDarch/arm/kernel/head.S中执行的两个重要工作:校验CPU ID校验机器类型IDCPU ID调用_lookup_processor_type函数,确定内核是否支持当前cpu位于arch/arm/kernel/head-common.S 机器类型机器类型ID_lookup_ machine_type函数machine_ desc结构中的nr成员校验CPU ID校验机器类型IDarch/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_UART)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,_name)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函数部分代码分析函数部分代码分析第二阶段第一个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 menuconfigmake 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内核的编译与下载内核的编译与下载
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服