嵌入式Linux体系结构_第1页
嵌入式Linux体系结构_第2页
嵌入式Linux体系结构_第3页
嵌入式Linux体系结构_第4页
嵌入式Linux体系结构_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式操作系统第十五章嵌入式Linux体系结构戚隆宁longn_qi@主要内容什么是嵌入式Linux嵌入式Linux的特点嵌入式Linux系统结构什么是嵌入式Linux嵌入式Linux一般是指对标准Linux进行裁剪、定制乃至改造处理之后,适合于特定嵌入式应用场合的专用Linux操作系统。uCLinuxRTLinuxRTAIMontaVistaLinux(HardHatLinux)MobiLinuxEmbedixBlueCatLinuxAndroidLinux什么是嵌入式Linux:Linux简介Linux还是GNU/Linux?Linux:开源的类UNIX操作系统内核GNU/Linux:集成GNU(GNU‘sNotUnix)软件(窗口系统、编译器、各种shell、应用程序和开发工具等)和Linux内核的操作系统。GPL(GNUGeneralPublicLicense)许可证协议下,GNU软件可以自由地“运用、复制、修改和发布”(CopyLeft)LGPL(GNULesserGeneralPublicLicense)什么是嵌入式Linux:Linux简介1991年,Linux之父,芬兰赫尔辛基高校的学生:LinusTorvalds,发布第一个Linux版本什么是嵌入式Linux:Linux简介Linux内核版本2.6.34什么是嵌入式Linux:Linux简介0.00(1991年2~4月):两个进程分别显示AAABBB。0.01(1991年9月):第一个正式向外公布的Linux内核版本。0.11(1991年12月):基本可以正常运行的内核版本。0.13/0.95(1992年3月):加入虚拟文件系统思想的内核版本。1.0(1993年3月):在一批高水平黑客的参与下,诞生第一个正式版本。2.0(1996年6月):可支持多个处理器SMP。2.2(1999年1月):增加了对进程的POSIX实力的支持。2.4(2001年1月):进一步提升SMP系统的扩展性,集成了很多用于支持桌面系统的特性,如对USB、PCMCIA的支持,内置的即插即用等功能。2.6(2003年12月):更好地支持大型多处理服务器;更好地支持嵌入式设备,如手机、网络路由器或者视频录像机等;对鼠标和键盘指令等用户行为反应更加快速;块设备驱动程序做了彻底更新,如与硬盘和CD光驱通信的软件模块。什么是嵌入式Linux:Linux简介Linux内核版本是由LinusTorvalds作为总体协调人的Linux开发小组(分布在各个国家的近百位高手)开发出的系统内核的版本号Linux内核接受的是双树系统稳定树(stableLinuxkerneltree,简称stabletree),主要用于发行非稳定树(unstableLinuxkerneltree,简称unstabletree)或开发树(developmenttree),用于产品开发和改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树Linux内核版本号由3位数字组成,形式为x.y.zx:主版本号。y:次版本号。对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大1,即为奇数。z:修改号。表示小的修订次数。什么是嵌入式Linux:Linux简介GNU/Linux发行套件什么是嵌入式Linux:嵌入式Linux内核的定制:嵌入式Linux内核为特殊的硬件配置、或为了支持特殊的应用而经过特殊的裁剪的修改过的Linux内核系统的定制:嵌入式Linux系统为了在嵌入式系统中运用而剪裁过的Linux系统软件发行套件的定制:嵌入式Linux发行套件为了在嵌入式系统中运用而剪裁过的Linux应用软件什么是嵌入式Linux:嵌入式应用什么是嵌入式Linux:嵌入式应用实时性硬实时软实时宽松时限硬件规模小型(CPU<100MHz,内存<32MB)中型(CPU<500MHz,内存<1GMB)大型(CPU>1GHz,内存>1GMB)什么是嵌入式LinuxuClinux(Micro-Control-Linux):特地针对无MMU的微限制器领域而设计的嵌入式Linux系统ARMLinux:特地针对无ARM处理器(有MMU)的嵌入式Linux系统RTLinux:硬实时微内核的实时操作系统,将一般Linux系统作为一个低优先级的任务来运行,其他的实时任务优先级比一般Linux系统要高。RATI(RealTimeApplicationInterface):嵌入式Linux系统的硬实时补丁,类同RTLinux,但通过实时硬件抽象层实现实时任务和Linux的交互。嵌入式Linux的特点标准Linux的特点(1)单体内核(monolithic)借鉴了微内核的特性,具有动态调入模块的观念,比传统的单体内核操作系统可移植性更强。多任务接受时间片轮转优先级抢占的算法,实现多任务并行。多用户多个用户可以在同一时间内运用系统,同一用户可以同时并行执行多个任务。操作系统可以同时管理多个用户的恳求和多个任务。嵌入式Linux的特点标准Linux的特点(2)支持多种处理器体系结构X86、ARM、MIPS、M68K、PowerPC、SH、SPARC…支持MMU和non-MMU的处理器支持32位和64位的处理器支持多处理器(SMP)支持32个CPU并行工作支持多种总线接口和外部设备嵌入式Linux的特点标准Linux的特点(3)支持虚拟内存4GB虚拟地址空间,用户空间3GB。支持多种文件系统通过虚拟文件系统(VFS)屏蔽了各种不同文件系统的内在差别,使得用户可以运用同样的方式访问各种不同格式的文件系统:EXT、FAT、YAFFS。通过逻辑卷管理(LVM)可以在运行时动态伸缩文件系统的大小,或增加文件系统。支持网络文件系统(NFS)支持内核虚拟机(KVM)允许在宿主Linux内核的用户空间中运行其他客户操作系统。嵌入式Linux的特点标准Linux的特点规范性和可移植性支持POSIX(PortableOperatingSystemInterface)标准GNU工具的支持:GCC、GDB、GNUmake、GNUld实时性支持内核线程(守护进程),2.6版本以后内核线程可抢占。有效的延迟机制:下半部分,软中断,tasklet和工作列队等。可以针对任务的轻重缓急,更细粒度的选择执行时机。保证了系统运行时尽量在平安时间(不关中断)。嵌入式Linux的特点标准Linux的特点开放性遵循GPL许可证协议,开放源代码,全世界的开发者共同运用和维护无授权费用开源社区的支持,快速的技术更新嵌入式Linux的特点Linux没有的病毒后门强迫性的软件升级私有的文件格式产品注册登记昂扬的软件价格嵌入式Linux的特点Linux2.6内核针对嵌入式系统的改进实时性显著提高允许抢占以内核态运行的任务(包括通过系统调用进入内核模式的用户任务)。更加有效的调度算法。算法困难度为O(1)。同步性的提高。增加对嵌入式处理器的支持增加了对无MMU系统的支持。面对嵌入式应用子系统架构将功能模块化,可以定制而对其他部分影响最小,便于裁剪和移植。改善了I/O子系统,供应了更多嵌入式外设的支持以实现各种应用开发。可以配置成无输入和显示的纯粹无用户接口系统。嵌入式Linux的特点嵌入式Linux的特点须要交叉编译开发具有更强的实时性依据硬件资源限制和应用需求进行裁剪嵌入式Linux系统结构引导系统(Bootloader)系统内核(Kernel)文件系统(FileSystem)嵌入式Linux系统结构:BootloaderBootLoader回顾BootLoader是在操作系统内核运行之前首先运行的第一段小程序:初始化硬件设备;建立内存空间的映射图;加载操作系统内核镜像到RAM中,并将系统的限制权传递给它。BootLoader依靠于CPU体系结构和板级硬件配置BootLoader通常预先划分好固态存储设备的空间,用于存放镜像。BootLoader通常支持启动加载和下载两种模式。BootLoader的操作通常分为两个阶段。嵌入式Linux系统结构:Bootloader第一阶段操作1.屏蔽全部的中断2.设置CPU的速度和时钟频率3.RAM初始化4.初始化硬件调试端口(LED/UART)。5.关闭CPU内部指令/数据cache6.为其次阶段准备RAM空间7.拷贝其次阶段代码到RAM中8.设置堆栈指针sp9.跳转到其次阶段的入口点嵌入式Linux系统结构:Bootloader其次阶段操作1.初始化本阶段要运用到的硬件设备2.检测系统内存映射(memorymap)3.将kernel映像和根文件系统映像从flash上读到RAM空间中4.为内核设置启动参数5.调用内核嵌入式Linux系统结构:Bootloader在嵌入式Linux系统中,须要由BootLoader设置的参数有:内核参数,如页面大小、根设备内存映射状况叮嘱行参数initrd映像参数起始地址,大小Ramdisk参数解压后的大小嵌入式Linux系统结构:Bootloader嵌入式Linux系统常用BootLoader:UBootRedBootBlob嵌入式Linux系统结构GNU/Linux系统构成应用程序库系统内核嵌入式Linux系统结构嵌入式Linux应用程序程序文件接受ELF格式或AOUT格式运行在用户空间,必需通过Linux内核访问资源支持图形用户界面,须要第三方GUI软件X11WindowQTMicroWindowMiniGUI库:通常为共享库(.so),须要链接到应用程序运行。嵌入式Linux系统结构:Kernel内核:事实上仅仅是一个资源管理器。不管被管理的资源是进程、内存还是硬件设备,内核负责管理并裁定多个竞争用户对资源的访问(既包括内核空间也包括用户空间)。内核构成体系结构层设备驱动内存管理进程管理虚拟文件系统网络协议系统调用接口嵌入式Linux系统结构:Kernel嵌入式Linux系统结构:Kernel进程管理重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和CPU寄存器)。在用户空间,通常运用进程这个术语,不过Linux实现并没有区分这两个概念(进程和线程)。应用程序通过内核供应的系统调用接口来创建一个新进程,停止进程,并在它们之间进行通信和同步(信号、管道、共享内存、信号量和套接字)。进程管理还包括处理活动进程之间共享CPU的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争CPU,这种算法都可以在固定时间内进行操作。嵌入式Linux系统结构:Kernel进程管理Linux中每一个进程由一个task_struct数据结构来描述(进程限制块PCB)进程描述符放在动态内存中而且和内核态的进程栈放在一个独立的8KB的内存区中进程描述符进程标识进程状态(State)进程调度信息和策略标识号(Identifiers)进程通信有关的信息(IPC)进程链接信息(Links)时间和定时器信息(TimesandTimers)文件系统信息(FilesSystem)处理器相关的上下文信息嵌入式Linux系统结构:Kernel进程管理:状态机进程管理基本操作fork:通过复制调用进程来建立新的进程,是最基本的进程建立过程exec:包括一系列系统调用,它们都是通过用一个新的程序覆盖原来的内存空间,实现进程的转变wait:供应初级的进程同步措施,能使一个进程等待,直到另外一个进程结束为止。exit:该系统调用用来终止一个进程的运行嵌入式Linux系统结构:Kernel嵌入式Linux系统结构:Kernel进程管理新的进程通过克隆旧的进程来建立,当前进程是通过fork()系统调用来建立新的进程。当系统调用结束时,内核在系统的物理内存中为新进程支配新的task_struct结构,并为新进程要运用的堆栈支配物理页和进程标记符exec并不创建新进程,前后进程ID是不变的。它是用另外一个程序替代了当前进程的正文,数据,堆和栈嵌入式Linux系统结构:Kernel进程管理:进程父子关系嵌入式Linux系统结构:Kernel进程管理Linux中的0号进程,通常称为swapper进程,是全部进程的祖先。由它执行cpu_idle()函数,当没有其他进程处于TASK_RUNNING的时候,调度程序会选择0号进程运行0号进程创建1号进程,通常称为init进程。它创建和监控其他进程的活动嵌入式Linux系统结构:Kernel进程管理进程调度一般进程动态优先调度周期性地修改进程的优先级(避开饥饿)依据进程的counter值实时进程静态优先级调度嵌入式Linux系统结构:Kernel内存管理Linux接受了“虚拟内存”方式管理内存。Linux将内存划分为很多大小相同的内存页。在系统运行过程中,若某个应用程序对内存的需求大于物理内存时,Linux可将短暂不用的内存页交换到硬盘上。这样,空闲的内存页可以满足应用程序的内存需求,而应用程序却不会留意到内存交换的发生。一般Linux通过MMU疼惜内存访问,但对于无MMU的处理器则没有。嵌入式Linux系统结构:Kernel内存管理与体系结构无关的三级页表模型pgd,页书目pmd,页中级书目pte,页表项嵌入式Linux系统结构:Kernel内存管理各进程拥有自己的3G用户空间内核占用最高的1G作为系统空间,系统空间由全部进程共享嵌入式Linux系统结构:Kernel内存管理1G内核空间==物理内存空间1G的后128MB用作实现非连续内存支配和固定映射的线性地址嵌入式Linux系统结构:Kernel内存管理实现了基于区的伙伴系统(BuddySystem)能够快速的满足各种大小的支配要求,同时削减碎片。实现了slab支配器,把存储器区看作对象,对象依据类型分组成不同的高速缓存。解决恳求内存小于一页的问题,改进伙伴系统的效率。非连续存储器区的管理,允许将连续的线性地址映射到非连续的物理页。嵌入式Linux系统结构:Kernel设备驱动设备驱动程序实际限制操作系统和硬件设备之间的交互。设备驱动程序供应一组操作系统可理解的抽象接口,并利用该接口完成和操作系统之间的交互。而与硬件相关的具体操作微小环节由设备驱动程序完成。设备驱动程序运行在高特权级的处理器环境中,从而可以干脆对硬件进行限制。但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。可接受内核模块(LoadableKernelModule,LKM)的实现方式嵌入式Linux系统结构:Kernel内核模块在系统启动任何时候都可以动态链入内核的代码块。该机制使我们可以随意地、动态地加载与卸载操作系统部件。当我们不再须要某个功能部件时,可以将它对应的模块从内核中卸载并删除。Linux模块多指设备驱动程序、伪设备驱动程序,如文件系统的驱动程序等。在内核空间运行。事实上是一种目标对象文件,没有链接,不能独立运行。嵌入式Linux系统结构:Kernel内核模块的优点将来修改内核时,节约编译时间;若须要安装新的模块,只要插入(通过insmod叮嘱)对应的模块即可;削减内核对系统资源的占用,内核可以集中精力做最基本的事情,把一些扩展功能都交由模块实现。模块也可以用来尝试新的内核代码,而不须要每次都创建和重激活内核。嵌入式Linux系统结构:Kernel内核模块潜在的问题:对系统性能和内存利用有负面影响;装入的内核模块和其他内核部分一样,具有相同的访问权限,因此,差的内核模块会导致系统崩溃;有些模块要求利用其他模块的功能,因此,内核要维护模块之间的依靠性。内核必需能够在卸载模块时通知模块,并且要释放支配给模块的内存和中断等资源;内核版本和模块版本的不兼容也可能导致系统崩溃。嵌入式Linux系统结构:Kernel设备驱动(中断处理)当执行中断处理程序或下半部时,内核处于中断上下文中断上下文不同于进程上下文,中断或异样处理程序执行的代码不是一个进程。它是一个内核限制路径,代表了中断发生时正在运行的进程执行,作为一个进程的内核限制路径,中断处理程序比一个进程要“轻”(中断上下文只包含了很有限的几个寄存器,建立和终止这个上下文所须要的时间很少)中断上下文不行以睡眠,也不能调用某些函数,具有较为严格的时间限制嵌入式Linux系统结构:Kernel设备驱动下半部可以通过多种机制实现,分别由不同的接口和子系统组成BH接口静态创建由32个Bottomhalf组成的链表Taskqueue任务队列机制软中断Tasklet工作队列嵌入式Linux系统结构:Kernel嵌入式Linux内核源代码组织嵌入式Linux系统结构:FileSystem嵌入式Linux文件系统在Linux中没有盘符的概念,每个文件都以唯一的名称存储在系统的书目中。我们可以把整个书目系统看成一个树形结构,其中有很多书目分枝。全部的书目都会连接到“根”书目,用单斜线(/)表示。Linux继承了Unix的资源访问方式,全部的资源访问限制都是基于文件的。在Linux中各种硬件设备、端口设备甚至内存都是以文件形式存在的。通过虚拟文件系统(VFS)在内核中供应一个文件系统框架(接口函数集、管理用的数据结构、各种缓存机制)为各种文件系统供应通用接口,即通用文件模型。嵌入式Linux系统结构:FileSystem嵌入式Linux文件系统构成嵌入式Linux系统结构:FileSystem嵌入式Linux文件系统VFS由以下对象类型组成超级块对象:存放已安装文件系统信息

温馨提示

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

评论

0/150

提交评论