嵌入式操作系统.ppt
第11讲 嵌入式操作系统,曲阜师范大学计算机科学学院孔峰,嵌入式系统原理与应用,内容提要,嵌入式操作系统的概念与特点嵌入式Linux操作系统简介嵌入式Linux文件系统构建嵌入式Linux系统,1 嵌入式操作系统概述,操作系统可以最粗略地分为内核(kernel)、设备驱动与外壳(shell)三大部分。通俗地讲,内核是操作系统的核心模块,管理CPU的运行;而外壳是内核的外围模块,对用户发出的命令进行解释和处理。,1.1 嵌入式操作系统内核,广义解释指装入到存储器的嵌入式软件中的操作系统部分,在这种情况下,除了操作系统内核之外,嵌入式软件还包括板级支持包,驱动程序和应用软件 狭义解释指嵌入式操作系统中负责多任务管理及任务之间进行通信的多任务处理部分。它进行任务管理(进程管理),时钟管理,内存管理等,内核功能的划分,进程管理(进程之间的通讯与同步)内存管理(malloc/free)文件管理设备控制网络功能(网络通讯协议等),1.2 嵌入式操作系统的特点,可移植性强调实时性能内核精简,所占空间小(50KB)抢占式内核使用可重入函数可配置可裁剪高可靠性,抢占式内核,从内核调度基本特点分类,嵌入式操作系统内核分为抢占式内核(preemptive kernel)和不可抢占式内核(non-preemptive kernel)抢占式内核的最大特点是最高优先级任务能够立即得到执行,从而能够保证系统具有高度实时性能。,抢占式内核(续1),不可抢占式内核不可抢占式内核称为合作型多任务(进程)处理,要求每个任务在程序代码执行完毕后自我放弃CPU的所有权 不可抢占式内核的最大缺陷在于响应时间。高优先级的任务已经进入就绪态,但还不能运行,直到当前运行的任务释放CPU为止。,抢占式内核(续2),抢占式内核的工作原理最高优先级的任务就绪必然得到CPU的控制权。当一个运行着的任务使另一个比它优先级高的任务进入了就绪态,则当前任务的CPU控制权就会被抢占,那个高优先级的任务立刻获得CPU的控制权。通常把最高优先级指派给实时要求最高的任务。且绝大多数嵌入式操作系统的内核采用抢占式调度策略,使用可重入函数,实时操作系统要求使用可重入函数 什么是可重入函数?如果一个函数的代码能够同时被多个任务并发地调用(分享),并且在调用该函数时这些任务之间不会产生数据干扰错误,那么这个函数就是可重入(reentrant)函数。,使用可重入函数(续),为了保证编写的函数具有可重入性,其关键之处是应当做到以下几点:使用本地数据。不返回指向静态数据的指针,所有数据都由函数的调用者提供。不为连续的调用持有静态数据。通过制作全局数据的本地拷贝来保护全局数据。不调用任何不可重入函数。,2 嵌入式Linux操作系统简介,嵌入式Linux是以Linux为基础,经过裁剪之后适用于嵌入式设备的操作系统,广泛应用在移动电话、PDA、媒体播放器、消费性电子产品以及航空航天等领域。Linux系统具有开源、可裁剪、免费、完全支持TCP/IP协议、可移植性好、运行稳定等特点,嵌入式Linux继承了这些特性。,2.1 嵌入式Linux操作系统组成,与uClinux系统相同,基本的嵌入式Linux操作系统包括三个组成部分:Bootloader,负责引导系统;操作系统内核,负责管理硬件,为上层软件提供运行环境;文件系统,负责管理文件。,2.2 Linux操作系统内核版本,2.3 Linux内核源码目录树,Linux,/arch,/drivers,/fs,/include,/Documentation,/ipc,/kernel,/lib,/mm,/init,/net,/scripts,/arm,/alpha,/m68k,/boot,/mach-s3c2410,/kernel,/lib,/mm,/asm-arm,/linux,/net,/arch-s3c2410,/proc-armv,Linux内核源码目录树(续),arch:包含所有体系结构相关的内核代码,可以在其中找到Linux目前支持的所有硬件体系结构;kernel:包含Linux内核代码。drivers:包含设备驱动程序源代码;fs:包含文件系统实现代码;,Linux内核源码目录树(续),include:包含各种体系结构下编译内核所需要的头文件;init:包含内核初始化源代码;ipc:包含进程间通信源代码;mm:包含内存管理源代码;net:包括网络相关源代码。,2.4 UPTECH2410-OS系统,UP-NetARM3000 的CPU为ARM7TDMI内核的三星S3C44B0X01 芯片,由于没有MMU(内存管理单元)只能运行uClinuxUP-NetARM2410 系列的CPU为ARM920T内核的三星S3c2410 芯片,由于有MMU可以运行标准的ARM-LINUX内核。,3 文件系统,文件系统式操作系统的重要组成部分,包括负责文件管理的系统软件、被管理的文件以及相关数据结构。文件系统负责存储器空间的组织和分配,控制文件的存储、保护和检索,具体地说,它负责完成文件的建立、写入、读出、修改、复制、删除等过程。,Linux文件系统,在Unix业界有一句话叫做“一切皆文件”,这是对Linux文件系统的一个很好抽象。我们说“Linux中一切皆文件”直观地可以这样理解:所有的东西,设备、内存都模拟成文件。而Windows中,我们则可以极端地认为“一切皆设备”,Linux文件系统,Linux定义了一个抽象的内核级接口,能够容许集中不同的后端文件系统,文件树的有些部分由传统的给予磁盘的实现来处理,其他部分则由内核中单独的驱动程序来负责。Linux的文件系统可以认为包括4种主要组成部分:命名空间(给事物取名,并按一种层次解构组织他们的形式)API(用来便利和操作对象的一套系统调用)安全模型(用来保护,隐藏何共享事物的方案)实现(把逻辑模型同实际硬件联系到一起的软件),3.1 文件系统简介,Linux支持多种文件系统,例如EXT2、EXT3、VFAT、NTFS、iso9660、JFFS、ROMFS、RAMFS、CRAMFS和NFS等。不同的文件系统特性各不相同,根据存储设备的物理特性以及软件运行需求的不同,可以做不同的选择。在嵌入式系统中,主要的存储设备为RAM和Flash存储器。,文件系统简介(续),Flash是目前非易失性存储器的首选设备,Flash存储器又称作闪存,有Nor Flash和Nand Flash两种类型。Nor Flash特点是支持芯片内执行应用程序,对数据的读出速度较快,但是擦写比较慢,经常用来制作容量较小的存储器。Nand Flash强调每bit的成本,以及更高的性能,程序不能在其中直接运行,但是存储单元体积小,存储密度比Nor Flash大的多,并且有更快的擦除和写入速度,常用来制作较大容量的存储器。,文件系统简介(续),内存技术设备(MTD)是用于访问memory设备的Linux设备驱动层,它在硬件和文件系统软件之间提供了一个抽象的接口,基于扇区进行擦除、读和写操作,它的所有源代码在/drivers/mtd子目录下。,我们把Linux下的文件分成5种文件类型:c 字符设备b 块设备l 连接f 普通文件d 目录。,文件类型,设备文件,Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。每个字符设备和块设备都必须有主、次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为“虚拟设备”)。,设备文件,设备文件,一般来说,每个设备在/dev 目录下都有一个对应的文件(设备节点)。可以通过 cat/proc/devices 命令查看当前已经加载的设备驱动程序的主设备号。在/dev 目录下除了字符设备和块设备节点之外还通常还会存在:FIFO管道、Socket、软/硬连接、目录。这些东西没有主/次设备号。,3.2 常见的文件系统,JFFS/JFFS2YAFFSCRAMFSROMFSramdiskRAMFSNFS,1.JFFS/JFFS2,JFFS/JFFS2是基于MTD和哈希表的日志文件系统,在意外掉电后仍可以保持数据的完整性,不会丢失数据,主要使用在Flash存储设备上,支持数据压缩、可读写、提供崩溃/掉电安全保护、提供“写平衡”支持、提供垃圾回收机制。JFFS/JFFS2的缺点是挂载时间较长,当文件系统已满或者接近满时,运行速度较慢,另外,采用概率方式很难保证擦写块的机会平衡。,2.YAFFS,YAFFS是专门为嵌入式系统使用Nand Flash而设计的一种日志型文件系统,适用于大容量的存储设备,遵从GPL许可证。YAFFS有些类似于JFFS/JFFS2,不同之处在于后者最初是针对Nor Flash设计,而Nor Flash与Nand Flash本质上有较大的区别。YAFFS还是一种跨平台文件系统,支持Linux、eCos、Windows CE等操作系统。,3.CRAMFS,CRAMFS是专门针对闪存设计的压缩只读文件系统,最大不超过256KB,文件最大不超过16MB,Linux的创始人Linus Torvalds参与它的开发。CRAMFS是压缩文件系统,每一个页容量为4KB,单独压缩,压缩比高达2:1,可以把文件保存在容量很小的Flash中,节省Flash空间。,CRAMFS文件系统,CRAMFS存在于Flash中,当系统运行需要某一部分数据时,CRAMFS会实时计算该部分数据解压缩后的容量,然后从内存中分配相应的空间,将其解压缩到内存中。,CRAMFS文件系统(续),一个完整的CRAMFS文件系统通常包含以下几个目录:/linuxrc:启动脚本文件,负责进行系统启动时的配置。/bin:保存常用命令。/sbin:保存系统相关命令,其中最重要的是供内核初始化之后执行的/sbin/init程序。/etc:保存配置文件。,CRAMFS文件系统(续),/lib:保存系统运行所需要的库文件。/dev:保存设备驱动程序。/usr:保存用户程序和配置文件,可以根据需要进行设置。/mnt:用于设备安装的目录。/proc:内存文件系统,存放代表系统运行状态的文件。,CRAMFS文件系统(续),构造CRAMFS时,可以从http:/,#cd cramfs-1.1#make,CRAMFS文件系统(续),编译之后生成可执行文件mkcramfs,下面是mkcramfs的命令格式:mkcramfs-h-e edition-i file-n name dirname outfile-h:显示帮助信息。-e edition:设置生成的文件系统的版本号。-i file:将一个文件映像插入这个文件系统中。-n name:设定mkcramfs文件系统的名字。dirname:指明需要被压缩的整个目录树。outfile:最终输出文件。,4.ROMFS,传统型的ROMFS文件系统是一种只读的文件系统,结构简单、紧凑,节约空间。一方面内核支持ROMFS文件系统比支持EXT2文件系统需要更少的代码;其次ROMFS文件系统相对简单,在建立文件系统超模块时需要更少的存储空间。ROMFS不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟RAM盘的方法进行处理。,5.ramdisk,ramdisk建立在内存中,实际并非一种文件系统,而是一种将文件系统加载到内存当中的机制。ramdisk是将制作好的根文件系统压缩后存储在Flash中,系统启动时解压缩到RAM,然后挂载到“/”,这种方法简单易行,但是由于RAM中的文件系统不是压缩的,因此比较占用宝贵的内存资源。,6.RAMFS,RAMFS是Linus Torvalds开发的一种基于内存的文件系统,它在RAM中放置所有的文件,所有读/写操作也发生在RAM中,可以用来存储一些临时性文件或经常需要修改的数据,例如/tmp和/var目录,既避免了对Flash存储器的读写损耗,也提高了数据读写的速度。,7.NFS,网络文件系统NFS是由Sun Microsystem公司开发,基于TCP/IP的应用协议。它允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统的文件。,NFS的优点,节省本地系统的存储空间;共享诸如软驱、CDROM之类的存储设备,减少网络中设备数量;在嵌入式系统中,可以把宿主机的文件系统通过NFS挂载到目标机,在目标机可以直接执行宿主机的程序,省去了程序下载的步骤,节省开发调试时间;,4 构建嵌入式Linux系统(了解),移植BootLoader配置编译内核源码制作文件系统,4.1 移植BootLoader,准备好vivi源码,修改Makefile文件,指定目标体系结构arm,交叉编译工具前缀为arm-linux-,注意工具链的路径要设置正确;然后按照目标板的实际情况设置vivi运行的硬件地址;交叉编译vivi。本阶段依次运行:$make clean$make menuconfig$make,4.2 配置编译内核源码,首先修改Makefile文件,把内核运行的目标平台改为2410处理器,修改交叉编译器前缀为arm-linux-,注意工具链的路径要设置正确;然后按照目标板RAM、Flash的实际情况配置硬件地址;配置串口,设置正确的波特率。本阶段依次运行:$make mrproper$make xconfig$make dep$make clean$make zImage,4.3 制作文件系统,首先创建根目录,在其中新建bin、dev、etc、usr、lib、sbin等目录;下载BusyBox源码,配置、交叉编译和安装BusyBox,注意目标平台指定为arm、交叉编译器前缀为arm-linux-,注意工具链的路径要设置正确;复制需要的C库到文件系统目录树中;编写需要的配置文件;上述工作完成之后,使用文件系统生成工具mkcramfs来生成文件系统的镜像文件。,结果,把vivi、内核和文件系统烧写到Flash中,重新启动目标机,操作成功出现如图所示:,