1、东南大学集成电路学院国家ASIC系统工程技术研究中心国家ASIC系统工程技术研究中心主要内容主要内容n什么是嵌入式什么是嵌入式Linuxn嵌入式嵌入式Linux的特点的特点n嵌入式嵌入式Linux系统结构系统结构国家ASIC系统工程技术研究中心什么是嵌入式Linuxn 嵌入式Linux一般是指对标准Linux进行裁剪、定制乃至改造处理之后,适合于特定嵌入式应用场合的专用Linux操作系统。 uCLinux RTLinux RTAI MontaVista Linux (Hard Hat Linux) MobiLinux Embedix Blue Cat Linux Android Linux国家

2、ASIC系统工程技术研究中心什么是嵌入式Linux:Linux简介nLinux 还是 GNU/Linux? Linux:开源的类UNIX操作系统内核 GNU/Linux:集成GNU (GNUs Not Unix) 软件(窗口系统、编译器、各种 shell、应用程序和开发工具等)和Linux内核的操作系统。 GPL( GNU General Public License )许可证协议下,GNU软件可以自由地“使用、复制、修改和发布”(CopyLeft) LGPL( GNU Lesser General Public License )国家ASIC系统工程技术研究中心什么是嵌入式Linux :Li

3、nux简介n1991年,Linux之父,芬兰赫尔辛基大学的学生:Linus Torvalds,发布第一个Linux版本国家ASIC系统工程技术研究中心什么是嵌入式Linux :Linux简介nLinux内核版本2.6.342.6.34国家ASIC系统工程技术研究中心什么是嵌入式Linux :Linux简介n0.00(1991年24月):两个进程分别显示AAA BBB。n0.01(1991年9月):第一个正式向外公布的Linux 内核版本。n0.11(1991年12月):基本可以正常运行的内核版本。n0.13/0.95(1992年3月):加入虚拟文件系统思想的内核版本。n1.0(1993年3月)

4、:在一批高水平黑客的参与下,诞生第一个正式版本。n2.0(1996年6月):可支持多个处理器SMP 。n2.2(1999年1月):增加了对进程的POSIX能力的支持。n2.4(2001年1月):进一步提升SMP系统的扩展性,集成了很多用于支持桌面系统的特性,如对USB、PCMCIA的支持,内置的即插即用等功能。n2.6(2003年12月):更好地支持大型多处理服务器;更好地支持嵌入式设备,如手机、网络路由器或者视频录像机等;对鼠标和键盘指令等用户行为反应更加迅速;块设备驱动程序做了彻底更新,如与硬盘和CD光驱通信的软件模块。国家ASIC系统工程技术研究中心什么是嵌入式Linux :Linux简

5、介nLinux 内核版本是由Linus Torvalds 作为总体协调人的Linux开发小组(分布在各个国家的近百位高手)开发出的系统内核的版本号nLinux 内核采用的是双树系统 稳定树(stable Linux kernel tree,简称stable tree),主要用于发行 非稳定树(unstable Linux kernel tree,简称unstable tree)或开发树(development tree),用于产品开发和改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树nLinux内核版本号由3 位数字组成,形式为x.y.z x:主版本号。 y:次版本号。对于稳定树来说

6、,y是偶数;对于开发树来说,y比相应的稳定树大1,即为奇数。 z:修改号。表示小的修订次数。国家ASIC系统工程技术研究中心什么是嵌入式Linux :Linux简介nGNU/Linux发行套件国家ASIC系统工程技术研究中心什么是嵌入式Linux :嵌入式Linuxn内核的定制:嵌入式Linux 内核 为特殊的硬件配置、或为了支持特别的应用而经过特别的裁剪的修改过的Linux 内核n系统的定制:嵌入式Linux 系统 为了在嵌入式系统中使用而剪裁过的Linux系统软件n发行套件的定制:嵌入式Linux 发行套件 为了在嵌入式系统中使用而剪裁过的Linux应用软件国家ASIC系统工程技术研究中心

7、什么是嵌入式Linux :嵌入式应用国家ASIC系统工程技术研究中心什么是嵌入式Linux :嵌入式应用n实时性 硬实时 软实时 宽松时限n硬件规模 小型(CPU100MHz,内存32MB) 中型(CPU500MHz,内存1GHz,内存1GMB)国家ASIC系统工程技术研究中心什么是嵌入式Linux nuClinux (Micro-Control-Linux):专门针对无MMU的微控制器领域而设计的嵌入式Linux 系统nARM Linux:专门针对无ARM处理器(有MMU)的嵌入式Linux 系统nRTLinux:硬实时微内核的实时操作系统,将普通Linux系统作为一个低优先级的任务来运行,

8、其他的实时任务优先级比普通Linux 系统要高。nRATI(RealTime Application Interface):嵌入式Linux 系统的硬实时补丁,类同RTLinux,但通过实时硬件抽象层实现实时任务和Linux的交互。国家ASIC系统工程技术研究中心嵌入式Linux的特点n标准Linux的特点(1) 单体内核( monolithic ) 借鉴了微内核的特性,具有动态调入模块的观念,比传统的单体内核操作系统可移植性更强。 多任务 采用时间片轮转优先级抢占的算法,实现多任务并行。 多用户 多个用户可以在同一时间内使用系统,同一用户可以同时并行执行多个任务。操作系统可以同时管理多个用户

9、的请求和多个任务。国家ASIC系统工程技术研究中心嵌入式Linux的特点n标准Linux的特点(2) 支持多种处理器体系结构 X86、ARM、MIPS、M68K、PowerPC、SH、SPARC 支持MMU和non-MMU的处理器 支持32位和64位的处理器 支持多处理器(SMP) 支持32个CPU并行工作 支持多种总线接口和外部设备国家ASIC系统工程技术研究中心嵌入式Linux的特点n标准Linux的特点(3) 支持虚拟内存 4GB虚拟地址空间,用户空间3GB。 支持多种文件系统 通过虚拟文件系统(VFS)屏蔽了各种不同文件系统的内在差别,使得用户可以使用同样的方式访问各种不同格式的文件系

10、统:EXT、FAT、YAFFS。 通过逻辑卷管理(LVM)可以在运行时动态伸缩文件系统的大小,或增加文件系统。 支持网络文件系统(NFS) 支持内核虚拟机(KVM) 允许在宿主 Linux 内核的用户空间中运行其他客户操作系统。国家ASIC系统工程技术研究中心嵌入式Linux的特点n标准Linux的特点 规范性和可移植性 支持POSIX( Portable Operating System Interface )标准 GNU工具的支持:GCC、GDB、GNU make、GNU ld 实时性 支持内核线程(守护进程),2.6版本以后内核线程可抢占。 有效的延迟机制:下半部分,软中断,taskle

11、t和工作列队等。可以针对任务的轻重缓急,更细粒度的选择执行时机。保证了系统运行时尽量在安全时间(不关中断)。国家ASIC系统工程技术研究中心嵌入式Linux的特点n标准Linux的特点 开放性 遵循GPL许可证协议,开放源代码,全世界的开发者共同使用和维护 无授权费用 开源社区的支持,快速的技术更新国家ASIC系统工程技术研究中心嵌入式Linux的特点nLinux没有的 病毒 后门 强迫性的软件升级 私有的文件格式 产品注册登记 高昂的软件价格国家ASIC系统工程技术研究中心嵌入式Linux的特点nLinux 2.6内核针对嵌入式系统的改进 实时性显著提高 允许抢占以内核态运行的任务(包括通过

12、系统调用进入内核模式的用户任务)。 更加有效的调度算法。算法复杂度为O(1)。 同步性的提高。 增加对嵌入式处理器的支持 增加了对无MMU系统的支持。 面向嵌入式应用 子系统架构将功能模块化,可以定制而对其他部分影响最小,便于裁剪和移植。 改善了I/O子系统,提供了更多嵌入式外设的支持以实现各种应用开发。 可以配置成无输入和显示的纯粹无用户接口系统。国家ASIC系统工程技术研究中心嵌入式Linux的特点n嵌入式Linux的特点 需要交叉编译开发 具有更强的实时性 根据硬件资源限制和应用需求进行裁剪国家ASIC系统工程技术研究中心嵌入式Linux系统结构n引导系统(Bootloader)n系统内

13、核(Kernel)n文件系统(File System)国家ASIC系统工程技术研究中心嵌入式Linux系统结构:BootloadernBootLoader回顾 Boot Loader 是在操作系统内核运行之前首先运行的第一段小程序:初始化硬件设备;建立内存空间的映射图;加载操作系统内核镜像到RAM中,并将系统的控制权传递给它。 BootLoader依赖于CPU体系结构和板级硬件配置 BootLoader通常预先划分好固态存储设备的空间,用于存放镜像。 BootLoader通常支持启动加载和下载两种模式。 BootLoader的操作通常分为两个阶段。国家ASIC系统工程技术研究中心嵌入式Linu

14、x系统结构:Bootloadern第一阶段操作1. 屏蔽所有的中断2. 设置CPU 的速度和时钟频率3. RAM 初始化4. 初始化硬件调试端口(LED/UART)。5. 关闭CPU 内部指令数据cache6. 为第二阶段准备RAM 空间7. 拷贝第二阶段代码到RAM 中8. 设置堆栈指针sp9. 跳转到第二阶段的入口点国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Bootloadern第二阶段操作1. 初始化本阶段要使用到的硬件设备2. 检测系统内存映射(memory map)3. 将kernel 映像和根文件系统映像从flash 上读到RAM 空间中4. 为内核设置启动参数5.

15、 调用内核国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Bootloadern在嵌入式Linux系统中,需要由BootLoader设置的参数有: 内核参数,如页面大小、根设备 内存映射情况 命令行参数 initrd映像参数 起始地址,大小 Ramdisk参数 解压后的大小国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Bootloadern嵌入式Linux系统常用BootLoader: UBoot RedBoot Blob国家ASIC系统工程技术研究中心嵌入式Linux系统结构nGNU/Linux系统构成 应用程序 库 系统内核国家ASIC系统工程技术研究中心嵌入式Lin

16、ux系统结构n嵌入式Linux应用程序 程序文件采用ELF格式或AOUT格式 运行在用户空间,必须通过Linux内核访问资源 支持图形用户界面,需要第三方GUI软件 X11 Window QT Micro Window MiniGUIn库:通常为共享库(.so),需要链接到应用程序运行。国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln内核:实际上仅仅是一个资源管理器。不管被管理的资源是进程、内存还是硬件设备,内核负责管理并裁定多个竞争用户对资源的访问(既包括内核空间也包括用户空间)。 n内核构成 体系结构层 设备驱动 内存管理 进程管理 虚拟文件系统 网络协议 系统调用

17、接口国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kernel国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln进程管理 重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间,通常使用进程这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。应用程序通过内核提供的系统调用接口来创建一个新进程,停止进程,并在它们之间进行通信和同步(信号、管道、共享内存、信号量和套接字)。 进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争

18、CPU,这种算法都可以在固定时间内进行操作。国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln进程管理 Linux中每一个进程由一个task_struct数据结构来描述(进程控制块PCB) 进程描述符放在动态内存中而且和内核态的进程栈放在一个独立的8KB的内存区中 进程描述符1.进程标识2.进程状态(State)3.进程调度信息和策略4.标识号(Identifiers)5.进程通信有关的信息(IPC)6.进程链接信息(Links)7.时间和定时器信息(Times and Timers)8.文件系统信息(Files System)9.处理器相关的上下文信息国家ASIC系统工

19、程技术研究中心嵌入式Linux系统结构:Kerneln进程管理:状态机国家ASIC系统工程技术研究中心n进程管理 基本操作 fork: 通过复制调用进程来建立新的进程,是最基本的进程建立过程 exec :包括一系列系统调用,它们都是通过用一个新的程序覆盖原来的内存空间,实现进程的转变 wait:提供初级的进程同步措施,能使一个进程等待,直到另外一个进程结束为止。 exit:该系统调用用来终止一个进程的运行国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kernel国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln进程管理 新的进程通过克隆旧的进程来建立,当前进程

20、是通过fork()系统调用来建立新的进程。当系统调用结束时,内核在系统的物理内存中为新进程分配新的task_struct结构,并为新进程要使用的堆栈分配物理页和进程标志符 exec并不创建新进程,前后进程ID是不变的。它是用另外一个程序替代了当前进程的正文,数据,堆和栈国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln进程管理:进程父子关系国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln进程管理 Linux中的0号进程,通常称为swapper进程,是所有进程的祖先。由它执行cpu_idle()函数,当没有其他进程处于TASK_RUNNING的时候,

21、调度程序会选择0号进程运行 0号进程创建1号进程,通常称为init进程。它创建和监控其他进程的活动国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln进程管理 进程调度 普通进程动态优先调度周期性地修改进程的优先级(避免饥饿)根据进程的counter值 实时进程静态优先级调度国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln内存管理 Linux采用了“虚拟内存”方式管理内存。Linux将内存划分为许多大小相同的内存页。在系统运行过程中,若某个应用程序对内存的需求大于物理内存时,Linux可将暂时不用的内存页交换到硬盘上。这样,空闲的内存页可以满足应用程

22、序的内存需求,而应用程序却不会注意到内存交换的发生。 一般Linux通过MMU保护内存访问,但对于无MMU的处理器则没有。国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln内存管理 与体系结构无关的三级页表模型 pgd,页目录 pmd,页中级目录 pte,页表项国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln内存管理 各进程拥有自己的3G用户空间 内核占用最高的1G作为系统空间,系统空间由所有进程共享国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln内存管理 1G内核空间物理内存空间 1G的后128MB用作实现非连续内存分配和

23、固定映射的线性地址国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln内存管理 实现了基于区的伙伴系统(Buddy System)能够快速的满足各种大小的分配要求,同时减少碎片。 实现了slab分配器,把存储器区看作对象,对象按照类型分组成不同的高速缓存。解决请求内存小于一页的问题,改进伙伴系统的效率。 非连续存储器区的管理,允许将连续的线性地址映射到非连续的物理页。国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln设备驱动 设备驱动程序实际控制操作系统和硬件设备之间的交互。设备驱动程序提供一组操作系统可理解的抽象接口,并利用该接口完成和操作系统之间的

24、交互。而与硬件相关的具体操作细节由设备驱动程序完成。 设备驱动程序运行在高特权级的处理器环境中,从而可以直接对硬件进行控制。但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。 可采用内核模块( Loadable Kernel Module,LKM )的实现方式国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln内核模块 在系统启动任何时候都可以动态链入内核的代码块。该机制使我们可以随意地、动态地加载与卸载操作系统部件。当我们不再需要某个功能部件时,可以将它对应的模块从内核中卸载并删除。Linux模块多指设备驱动程序、伪设备驱动程序,如文件系统的驱动程序等。

25、在内核空间运行。 实际上是一种目标对象文件,没有链接,不能独立运行。国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln内核模块的优点 将来修改内核时,节省编译时间; 若需要安装新的模块,只要插入 (通过insmod命令) 对应的模块即可; 减少内核对系统资源的占用,内核可以集中精力做最基本的事情,把一些扩展功能都交由模块实现。模块也可以用来尝试新的内核代码,而不需要每次都创建和重激活内核。国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln内核模块潜在的问题: 对系统性能和内存利用有负面影响; 装入的内核模块和其他内核部分一样,具有相同的访问权限,因此

26、,差的内核模块会导致系统崩溃; 有些模块要求利用其他模块的功能,因此,内核要维护模块之间的依赖性。 内核必须能够在卸载模块时通知模块,并且要释放分配给模块的内存和中断等资源; 内核版本和模块版本的不兼容也可能导致系统崩溃。国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln设备驱动(中断处理) 当执行中断处理程序或下半部时,内核处于中断上下文 中断上下文不同于进程上下文,中断或异常处理程序执行的代码不是一个进程。它是一个内核控制路径,代表了中断发生时正在运行的进程执行,作为一个进程的内核控制路径,中断处理程序比一个进程要“轻”(中断上下文只包含了很有限的几个寄存器,建立和终

27、止这个上下文所需要的时间很少) 中断上下文不可以睡眠,也不能调用某些函数,具有较为严格的时间限制国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln设备驱动 下半部可以通过多种机制实现,分别由不同的接口和子系统组成 BH接口静态创建 由32 个 Bottom half组成的链表 Taskqueue 任务队列 机制 软中断 Tasklet 工作队列国家ASIC系统工程技术研究中心嵌入式Linux系统结构:Kerneln嵌入式Linux内核源代码组织国家ASIC系统工程技术研究中心嵌入式Linux系统结构:File Systemn嵌入式Linux文件系统 在Linux中没有盘符

28、的概念,每个文件都以唯一的名称存储在系统的目录中。我们可以把整个目录系统看成一个树形结构,其中有很多目录分枝。所有的目录都会连接到“根”目录,用单斜线 (/)表示。 Linux继承了Unix的资源访问方式,所有的资源访问控制都是基于文件的。在Linux中各种硬件设备、端口设备甚至内存都是以文件形式存在的。 通过虚拟文件系统(VFS)在内核中提供一个文件系统框架(接口函数集、管理用的数据结构、各种缓存机制)为各种文件系统提供通用接口,即通用文件模型。国家ASIC系统工程技术研究中心嵌入式Linux系统结构:File Systemn嵌入式Linux文件系统构成国家ASIC系统工程技术研究中心嵌入式Linux系统结构:File Systemn嵌入式Linux文件系统 VFS由以下对象类型