嵌入式Linux的内核

上传人:沈*** 文档编号:247335799 上传时间:2024-10-18 格式:PPT 页数:86 大小:1.05MB
返回 下载 相关 举报
嵌入式Linux的内核_第1页
第1页 / 共86页
嵌入式Linux的内核_第2页
第2页 / 共86页
嵌入式Linux的内核_第3页
第3页 / 共86页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1,第五章,Linux,的内核,5.1 Linux,内核概述,5.2 Linux,内核模块简介,5.3 Linux,的编译和定制,5.4 Linux,系统调用举例,2,5,.1 Linux,内核概述,5,.1.1 Linux,内核和功能结构,5,.1.2 Linux,内核源代码布局,5,.1.3,内核的移植,3,5.1.1 Linux,内核和功能结构,内核(,kernel,)是操作系统的内部核心程序,它向外部提供了对计算机系统资源进行请求和管理的调用接口和服务,4,内核,可以将操作系统的代码分成两部分:,内核所在的地址空间称为内核空间;,而在内核以外,剩下的程序统称为外部管理程序,它们大部分是对外围设备的管理和界面操作,外部管理程序与用户进程所占据的地址空间称为外部空间。,通常,一个程序会跨越两个空间。,当执行到内核空间的一段代码时,称程序处于内核态,当程序执行到外部空间代码时,称程序处于用户态。,5,5.1.1 Linux,内核和功能结构,常见的,OS,内核有两个模式,:,微内核(,micro-kernel,),单一内核(,Monolithic kernel,),6,微内核,在微内核结构中,操作系统的内核只需要提供最基本,最核心的一部分操作(比如创建和删除任务,内存管理,中断管理等),其他的管理程序(如文件系统,网络协议栈等)则尽可能地放在内核以外。这些外部程序可以独立运行,并对应用程序提供操作系统服务,服务之间使用进程间通信机制(,IPC,)进行交互。只在需要内核的协助时,才通过一套接口对内核发出调用请求。,7,微内核优点,使操作系统具有良好的灵活性。使得操作系统内部结构变得简单清晰。,在内核以外的外部程序分别独立运行,其间并不互相关联。这样,可以对这些程序分别进行维护和拆装,只要遵循已经规定好的界面,就不会对其他程序有任何干扰。这使得程序代码在维护上十分方便,体现了面向对象软件的结构特征。,8,微内核的不足,首先,程序代码之间的相互隔离,使得整个系统丧失了许多优化的机会;,其次,部分资源浪费在外部进程之间的通信上(进程间通信的开销要比直接的函数调用大),这样,微内核结构在效率上必然低于传统的单一内核结构,这些效率损失将作为结构精简的代价。,总体上说,在当前的硬件条件下,微内核在效率上的损失小于其在结构上获得的效益,故而选取微内核成为操作系统的一大潮流。,9,5.1.1 Linux,内核和功能结构,Linux,内核属于,单一内核,参与,Linux,系统开发的程序员大多数为世界各地的黑客们。比起结构的清晰,他们更加注重功能的强大和高效率的代码。,他们将大量的精力花在优化代码上,而这样的全局性优化必然以损失结构精炼作为代价,导致,Linux,中的每个部件都不能被轻易拆出,否则必然破坏整体效率。,10,Linux,内核,虽然,Linux,是一个单一内核操作系统,但它与传统的单一内核,UNIX,操作系统不同。,在普通单一内核系统中,所有内核代码都是被静态编译和链接的。,而在,Linux,中,可以动态装入和卸载内核中的部分代码。,Linux,中将这样的代码段称做模块(,module,),并对模块给予了强有力的支持。在,Linux,中,可以在需要时自动装入和卸载模块。,11,5.1.1 Linux,内核和功能结构,Linux,内核的结构,12,5.1.1 Linux,内核和功能结构,Linux,内核主要由,5,个模块构成,它们分别是:,进程调度模块:控制进程对,CPU,资源的使用,内存管理模块:确保所有进程能够安全地共享机器主内存区;虚拟内存管理,文件系统模块:支持对外部设备的驱动和存储,进程间通信模块:支持多种进程间的信息交换方式,网络接口模块:提供对多种网络通信标准的访问并支持许多网络硬件,13,内核模块之间的依赖关系,14,内核模块之间的依赖关系,所有的模块都与进程调度模块存在依赖关系。因为它们都需要依靠进程调度程序来挂起(暂停)或重新运行它们的进程。通常,一个模块会在等待硬件操作期间被挂起,而在操作完成后才可继续运行。,15,内核模块之间的依赖关系,进程调度子系统需要使用内存管理器来调整一特定进程所使用的物理内存空间。,进程间通信子系统则需要依靠内存管理器来支持共享内存通信机制。,虚拟文件系统也会使用网络接口来支持网络文件系统(,NFS,),同样也能使用内存管理子系统来提供内存虚拟盘(,ramdisk,)设备。,而内存管理子系统也会使用文件系统来支持内存数据块的交换操作。,16,5.1.2 Linux,内核源代码布局,安装的时候,如果选择了,Kernel Develop,,则会在,/usr/scr/linux,下找到源代码,根据各个目录的名字,可以容易猜出各个目录里面的文件的功能,17,5.1.2 Linux,内核源代码布局,Documentation,arch,drivers,fs,include,init,ipc,lib,mm,net,18,5.1.2 Linux,内核源代码布局,19,5.1.2 Linux,内核源代码布局,20,5.1.2 Linux,内核源代码布局,21,补充:,Linux,操作系统的启动,Boot Loader,把操作系统的代码调入内存,后,会把控制权交给操作系统,由操作系统的启动程序来完成剩下的工作。,22,Linux,操作系统启动的步骤,(,1,)把控制权交给,Setup.S,这段程序,(,2,)进入保护模式,同时把控制权交给,Head.S,(,3,),Head.S,调用,/init/main.C,中的,start_kernel,函数,启动程序从,start_kernel(),函数继续执行,(,4,)建立,init,进程,23,进入操作系统,(,1,),Setup.S,首先,,Setup.S,对已经调入内存的操作系统代码进行检查,如果没错,它会通过,BIOS,中断获取内存容量,硬盘等信息(实模式),准备让,CPU,进入保护模式,a.,先屏蔽中断信号,b.,调用指令,lidt,和,lgdt,,对中断向量表寄存器,IDTR,进行初始化,c.,对,8259,中断控制器进行编程,d.,协处理器重新定位,完成这几件事后,,Setup.S,设置保护模式的标志,重取指令,再用一条跳转指令,jmpi 0 x100000,KERNEL_CS,。进入保护模式下的启动阶段,控制权交给,Head.S.,24,进入操作系统,(,2,),Head.S,也要先做屏蔽中断一类的工作,然后对中断向量表做一定的处理,Boot Loader,读入内存的启动参数和命令行参数,,Head.S,把它们保存在,empty_zero_page,页中,检查,CPU,类型,对协处理器进行检查,页初始化,调用,setup_paging,这个子函数,因为已进入保护模式,段机制的多任务属性体现,25,进入操作系统,(,3,),main.c,中的初始化,Head.S,调用,/init/main.c,中的,start_kernel,函数,把控制权交给它,这个函数是整个操作系统初始化的最重要的函数,一旦它执行完,整个操作系统的初始化也就完成了。,26,进入操作系统,(,3,),main.c,中的初始化,计算机在执行,start_kernel,前以进入了保护模式,使处理器完全进入了全面执行操作系统代码的状态。,但直到目前为止,这都是针对处理器的。而一旦,start_kernel,开始执行,,Linux,内核就一步步展现。,Start_kernel,执行后,就可以以一个用户的身份登陆和使用,Linux,了,27,进入操作系统,(,3,),main.c,中的初始化,main.c,中其他较为重要的函数如下:,Setup_arch(),最基本硬件的初始化,Paging_init(),线性地址空间映射,Trap_init(),中断向量表初始化,Int_IRQ,与中断有关的初始化,Sched_init(),进程调度初始化,Console_init(),对中断的初始化,对文件系统的初始化,Inode_initI()i,节点管理机制初始化,Name_cache_init(),目录缓存机制初始化,Buffer_init(),块缓存机制初始化,28,进入操作系统,(,3,),main.c,中的初始化,启动到了目前这种状态,只剩下运行,/etc,下的启动配置文件。,这时初始化程序并没有完成操作系统各个部分的初始化,更关键的文件系统的安装还没有涉及,这是在,init,进程建立后完成的。就是,start_kernel(),最后部分内容。,29,进入操作系统,(,4,)建立,init,进程,Linux,要建立的第一个进程是,init,进程,启动所需的,Shell,脚本文件,a.Linux,系统启动所必须的,b.,用户登陆后自己设定的,系统启动所必须的脚本存放在系统默认的配置文件目录,/etc,下。首先调用的是,/etc/inittab.,30,5.1.3,内核的移植,Linux,移植:,就是把,Linux,操作系统针对具体的目标平台做必要改写之后,安装到该目标平台,使其正确地运行起来,即把内核从一种硬件平台转移到另外一种硬件平台上运行。这个概念目前在嵌入式开发领域讲的比较多。,对于嵌入式,Linux,系统来说,有各种体系结构的处理器和硬件平台,并且用户需要根据需求自己定制硬件板。,只要硬件平台有些变化,即使非常小,可能也需要做一些移植工作。,31,5.1.3,内核的移植,内核移植工作主要是修改跟硬件平台相关的代码,一般不涉及,Linux,内核通用的程序。移植的难度也取决于两种硬件平台的差异。,Linux,针对于特定的硬件平台的软件包叫做,BSP,(,Board Support Package,)。,目前,Linux,内核的社区已经对常见的硬件平台做了很多工作,移植工作已经简单了,通常都可以找到相同处理器的参考板,并且可以获取到,Linux,内核源代码。,32,移植的准备工作,选择参考板,获取到,Linux,内核源代码:四点原则,分析内核代码,弄清楚哪些设备有驱动程序,哪些还没有。,确信,Linux,对参考板的支持情况,配置编译,Linux,内核,在目标板上运行测试。,可能最新的,Linux,内核版本支持的最好,但是也可能需要在老内核版本上打补丁。,分析平台相关的部分代码实现;分析内核编译组织方式;分析内核启动的初始化程序;分析驱动程序的实现。,33,移植过程的基本内容,获取某一版本的,Linux,内核源码,根据具体目标平台对源码进行必要的改写(主要是修改体系结构相关部分),然后添加一些外设的驱动,打造一款适合需要的目标平台(可以是嵌入式便携设备也可以是其它体系结构的,PC,机)的新操作系统,对该系统进行针对具体目标平台的交叉编译,生成一个内核映象文件,最后通过一些手段把该映象文件烧写(安装)到目标平台中。,通常,对,Linux,源码的改写工作难度较大,它要求不仅对,Linux,内核结构要非常熟悉,还要求对目标平台的硬件结构要非常熟悉,同时还要求对相关版本的汇编语言较熟悉,因为与体系结构相关的部分源码往往是用汇编写的。所以这部分工作一般由目标平台提供商来完成。开发者所要做的就是从目标平台提供商的网站上下载相关版本,Linux,内核的补丁(,Patch,)。把它打到,Linux,内核上,再进行交叉编译就行。,34,第五章,Linux,内核,5.1 Linux,内核概述,5.2 Linux,内核模块简介,5.3 Linux,的编译和定制,5.4 Linux,系统调用举例,35,5.2 Linux,内核模块简介,5.2.1,进程管理模块,5.2.2,存储管理模块,36,5.2.1,进程管理模块,多进程是一个简单的思想(如下图):,一个进程一直运行,直到它必须等待,通常是等待一些系统资源,等拥有了资源,它才
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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