资源预览内容
第1页 / 共56页
第2页 / 共56页
第3页 / 共56页
第4页 / 共56页
第5页 / 共56页
第6页 / 共56页
第7页 / 共56页
第8页 / 共56页
第9页 / 共56页
第10页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
嵌入式系统程序设计大连理工大学软件学院嵌入式系统工程系赖晓晨uClinux操作系统原理介绍 uClinux简介 uClinux架构 BusyBox工具集一、uClinux简介 uClinux是Linux2.0版本的一个分支,全称Micro Control Linux,即“微控制领域的linux系统”,是GNU项目,代码完全开放。 uClinux采用flat(平面型)内存模型,专门应用于没有MMU的CPU。使用的Romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。uClinux的历史发展 1998年1月uClinux发行第一版,该版本基于Palm PDA实现; 1999年2月份成功移植到Motorola的ColdFire系列处理器MCF5206和MCF5307; uClinux发行至今已经历多个版本,最常用的版本为uClinux-dist-20040408;目前的uClinux不仅支持NOMMU处理器,同时也支持MMU处理器,包括ARM、MIPS、sh、68K、x86甚至SPARC等高性能处理器,并在60个以上基于这些处理器的开发平台成功实现。uClinux内核及版本 uClinux基于linux内核版本。 2.0.38:比较成熟。 2.4.x:常用版本 2.6.x:最新版本 uClinux内核大小约500k,如果加上一些基本应用,不超过900k,很适合嵌入式系统。uClinux的特点广泛的处理器结构和硬件平台支持:基于Linux-2.4.x内核的uClinux,支持19种处理器结构,并在60种以上的硬件开发平台成功实现。完全的Linux内核的特性:uClinux具备标准Linux系统的稳定性,并且支持linux内核约定的全部的特性,包括内核优先级特性以及许多的文件系统,设备驱动。uClinux的特点(续)占用空间小:uClinux内核不超过512KB,加上工具不超过900KB。UClinux是一个高度可定制化的内核,通过定制内核可以获得到一个300k以下的可固化的内核压缩镜像,包括终端和一些基本的设备驱动以及只读文件系统。uClinux的特点(续)重写了标准c函数库:uClinux系统中所有应用程序使用了嵌入式的标准C函数库uClibc或uC-libc,该函数库精简了Linux系统中的标准函数库libc。uClinux的特点(续)丰富的应用软件:uClinux发布包中有大量的应用程序,包括各种网络协议、服务,图形界面,音频播放软件等等。除少数情况外,在uClinux平台上可完全使用Linux应用程序接口,因此,用户可以移植Linux上的应用程序到uClinux系统。除了与硬件相关代码和转换虚拟地址到物理的内存镜像外,几乎所有的代码不需要改变就可以编译。uClinux的特点(续)低廉的成本:软件方面,自由开放的系统、开发工具和大量应用程序,可以节省用户的开发投入。硬件方面,内存管理单元MMU核心大小约占典型的ARM SoC(System-on-Chip单片机)晶体的30%,典型的网络和嵌入式系统里有一半以上的应用程序不需要MMU。uClinux的特点(续)开源软件:源代码开放使用户得以跟踪和定制最核心和底层的代码以满足用户系统的需求。同时自由软件生命力强大,不断升级的新版本以及强大的网上技术支持给用户产品的维护和升级带来很大的方便。完美的文件系统:uClinux支持一般的文件系统如NFS,EXT2,FAT16/32等,同时更支持专为嵌入式系统设计的ROMFS、JFFS文件系统,在通常应用中,更多的使用后面的文件系统。uClinux小型化方法采用romfs文件系统。 romfs文件系统比ext2需要更少的代码; romfs文件系统相对简单,超级块(superblock)需要更少的存储空间。重写了应用程序库,相对于越来越大且越来越全的glibc库,uClibc对glibc做了精简。uClinux的实时性问题 uClinux本身并没有关注实时问题,它并不是为了Linux的实时性而提出的。另外有一种Linux-Rt-linux关注实时问题。 Rt-linux执行管理器把普通Linux的内核当成一个任务运行,同时还管理了实时进程。而非实时进程则交给普通Linux内核处理。 uClinux可以使用Rt-linux的patch,从而增强uClinux的实时性,使得uClinux可以应用于工业控制、进程控制等一些实时要求较高的应用。且保持了与标准linux的兼容。运行uClinux的硬件平台运行uClinux的硬件平台主要包括如下几个部分: cpu(ARMv4指令集兼容) Uart memory controller定时器 flash存储器,sdram存储器中断控制器和DMA。uClinux的开发环境宿主机运行linux操作系统,或使用cygwin模拟linux操作系统宿主机安装GNU开发套件 Gcc、Binutils、Gdb:arm-elf-gcc uClinux的打印终端:uClinux的默认终端是串口,内核在启动时所有的信息都打印到串口终端(printk函数),也可以通过串口终端与系统交互。 uClinux在启动时启动了telnetd,操作者可以远程登录上系统,从而控制系统的运行。uClinux系统组成一个基于uClinux的完整的嵌入式系统由三个部分组成:系统引导程序、uClinux操作系统内核和文件系统。bootloader OS内核文件系统uClinux系统的flash映像RAM系统引导程序系统引导程序通常称为Boot Loader,是在任何硬件平台上执行的第一段代码,相当于PC上的BIOS,主要负责系统初始化工作,然后将系统控制权交给操作系统,控制权交给操作系统后,系统的运行和Boot Loader 再无任何关系。 uClinux的发行包中不包含Boot Loader,Boot Loader必须由用户自己设计,但用户可以直接使用或参考一些开源的Boot Loader软件工程。Boot Loader的大小由其设计功能所决定,最小只有几K字节,功能复杂的一般也不超过100K字节。操作系统内核 uClinux操作系统内核,完成的功能和大家熟悉的Linux内核相同,包括进程调度、内存管理、文件系统管理、网络接口和进程间通信。使用未压缩的系统内核,一般要占用400K字节到900K字节空间,如果是压缩后的系统内核,则占用空间一般在300K字节到500K字节之间。文件系统文件系统主要存储用户应用程序,同时包括系统配置文件、系统程序和必需的驱动程序,其占用空间由用户的应用程序规模决定,从200K字节到1M字节不等。可执行文件格式 coff(common object file format):一种通用的对象文件格式 elf(excutive linked file):一种为Linux系统所采用的通用文件格式,支持动态连接 flat:elf格式有很大的文件头,flat文件对文件头和一些段信息做了简化uClinux应用程序格式 uClinux采用flat可执行文件格式,可以使用elf2flt工具把elf格式可执行文件转换为flat格式文件。当用户要执行一个应用时,内核的执行文件加载器(fs/binfmt_flat.c)将对flat文件进行进一步处理,主要是对代码段和数据段进行修正。应用程序在连接时并不知道将来要在系统的哪一段内存上运行,因此要求在任何地址都能运行,要做到地址无关(PIC:position independent code)。flat(扁平)格式二、uClinux内核架构文件系统模块文件系统内核初始化启动模块系统调用处理程序(system call handler)进程调用驱动程序虚拟文件系统管理模块块设备驱动字符设备驱动海量设备驱动Socket驱动程序网络模块网络设备驱动程序IPC模块MM模块异常处理C运行库内核:启动模块启动模块负责用来启动linux内核,包括系统堆栈初始化,把压缩的linux映象从flash解压到ram中,并把控制权交给内核初始化例程。这部分内容高度硬件相关,代码要尽量精简。uClinux内核架构分析内核初始化模块内核初始化的入口地址是:start_kernel(在init/main.c中),它初始化内核的其他部分,包括异常、中断、内存页、调度、驱动程序等。并启动init进程进入多任务环境。uClinux内核架构分析(续)系统调用和异常处理当init程序运行时,内核对整个系统的运行不再进行直接控制,而是通过系统调用给应用程序提供服务和响应外部及内部的异步事件。当发生用户进程中断时,内核获得控制权,用户程序挂起,处理中断,之后返回。uClinux内核架构分析(续)驱动程序驱动程序是整个linux内核的主要组成部分,控制着操作系统和外部设备的交互。系统启动时,需要一个输出调试信息的设备。这个设备往往通过串口来实现。uClinux内核架构分析(续)文件系统uClinux同样支持多个文件系统,但针对嵌入式系统做了一些取舍。一般支持ROMFS、EXT2、RAM FS、NFS等。其中ROMFS是最简单的只读文件系统,占用的空间最少,可用作根文件系统,存放linux启动时用到的设备文件、配置文件和程序等。uClinux内核架构分析(续)内存管理:先看一下标准linux的内存管理。它至少实现了以下功能:运行比内存还要大的程序。理想情况下应该可以运行任意大小的程序可以运行只加载了部分的程序,缩短了程序启动的时间可以使多个程序同时驻留在内存中提高CPU的利用率可以运行重定位程序。即程序可以位于内存中的任何一处,而且可以在执行过程中移动。uClinux内核架构分析(续)内存管理:先看一下标准linux的内存管理。它至少实现了以下功能:代码机器无关。程序不必事先约定机器的配置情况。减轻程序员分配和管理内存资源的负担。可以进行代码共享。例如,如果两个进程运行同一个程序,它们应该可以共享程序代码的同一个副本。提供内存保护,内核保护单个进程的数据和代码以防止非授权进程修改它们。否则,用户程序可能会偶然(或恶意)的破坏内核或其它用户程序。uClinux内核架构分析(续)虚存系统并不是没有代价的。内存管理需要地址转换表和其他一些数据结构,留给程序的内存减少了。地址转换增加了每一条指令的执行时间,而对于有额外内存操作的指令会更严重。当进程访问不在内存的页面时,系统发生失效。系统处理该失效,并将页面加载到内存中,极耗时间的磁盘I/O操作。总之内存管理活动占用了相当一部分cpu时间(在较忙的系统中大约占10)。uClinux内核架构分析(续)内存管理1. uClinux不使用虚拟内存管理技术,但内存仍然分页(4k页面),采用实存储器管理策略,对内存的访问直接使用物理地址。2.进程运行前,必须分配足够的内存页,然后把程序全部载入内存,这与采用虚存的linux有明显不同,是一种倒退。uClinux内核架构分析(续)内存管理3.操作系统对内存没有保护,各个进程(包括内核进程)共享同一个内存地址空间,开发人员权限增大,系统的安全性降低。4.开发人员要参与内存管理,从编译内核开始,要告诉系统开发板上都有哪些内存,供系统使用前作出标记。仍然是一种倒退。u
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号