毕业设计(论文)RTLinux嵌入式实时操作系统构建

上传人:1777****777 文档编号:39616851 上传时间:2021-11-11 格式:DOC 页数:50 大小:377.50KB
返回 下载 相关 举报
毕业设计(论文)RTLinux嵌入式实时操作系统构建_第1页
第1页 / 共50页
毕业设计(论文)RTLinux嵌入式实时操作系统构建_第2页
第2页 / 共50页
毕业设计(论文)RTLinux嵌入式实时操作系统构建_第3页
第3页 / 共50页
点击查看更多>>
资源描述
华南理工大学学士论文本科毕业设计(论文)说明书RTLinux嵌入式实时操作系统构建 学 院 计算机科学与工程学院 专 业 网络工程 学生姓名 指导教师 提交日期 2008年 6月 10日 45华 南 理 工 大 学 毕 业 设 计 (论文) 任 务 书 兹发给 04(级)网络工程5 班学生 毕业设计(论文)任务书,内容如下: 1.毕业设计(论文)题目: RTLinux嵌入式实时操作系统构建 2.应完成的项目: (1) 文献调研,了解RTLinux嵌入式实时操作系统构建相关知识。 (2) 研究rtlinux实时内核构建、系统引导方法。 (3) 研究基于Flash设备的文件系统构建方法 (4) 研究通过定制特定模块实现对应用系统功能支持的方法,并通过pc 机+usb进行试验。 3.参考资料以及说明: (1)孙琼,嵌入式Linux应用程序开发详解, 人民邮电出版社, 2006年 (2)雅默(美)著, 构建嵌入式LINUX系统, 中国电力出版社, 2004年 (3)王文斌, 嵌入式可重构数控系统及其关键技术研究, 上海大学工学 博士 论文,2007 (4) Busybox : 4.本毕业设计(论文)任务书于 2008 年2月26日发出,应于 2008年6月10 日前完成,然后提交毕业考试委员会进行答辩。 专业教研组(系)、研究所负责人 审核 年 月 日 指导教师 签发 年 月 日毕业设计(论文)评语: 毕业设计(论文)总评成绩: 毕业设计(论文)答辩负责人签字: 年 月 日 摘 要EMC(Enhanced Motor Control)前身是美国政府属National Institute of Standards and Technology(NIST)部门开发研究的数控软件。它主要是基于实时Linux开发的。鉴于的Linux开放性,EMC成为了一个自由、开放源码的计算机数字控制软件(CNC,Computer Numerical Control ),能实现对机床、机器人、坐标测量机等自动化设备的实时控制,能控制伺服电机、步进电机、继电器和其他自动化设备。Linux是当前主流通用操作系统之一,具有源码开放、多平台支持、计算机资源丰富等优点。基于诸多优点,Linux作为嵌入式操作系统在嵌入式系统中应用越来越普及。尤其是它完全是免费和开放的高性能的操作系统,符合EMC设计的初衷,因此EMC首先是设计在Linux的环境下运行的。但实时性要求强的应用场合,Linux往往难于满足要求。因此,实时Linux成为一个重要的研究课题。RTLinux是建立于Linux之上的一个实时操作系统实现,不仅具有硬实时性的机制,同时又能极大地发挥Linux自身的各种优点。本文详细首先分析当前嵌入式系统发展的现状,接着从RTLinux出发,深入研究RTLinux嵌入式实时内核的原理和运行机制,构建实时内核。然后,介绍通过运用嵌入式Linux的技术,在FLASH设备上构建一个实时操作系统。该操作系统是可以运行EMC(Enhanced Motor Control)软件的平台。关键词:RTLinux实时操作系统,EMC软件,嵌入式操作系统 Abstract EMC (Enhanced Motor Control) is the predecessor of the U.S. government is a National Institute of Standards and Technology (NIST) Research and Development departments of NC software. It is mainly based on real-time Linux development. In view of the Linux open, EMC became a free, open source software in the computer numerical control(CNC,Computer Numerical Control), to achieve the machine tools, robots, coordinate measuring machine automation equipment, such as real-time control, servo motor control , The stepper motor, relays and other automation equipment.Nowadays, Linux is one of the current mainstream operating systems. It has many advantages, such as open-source code, Multi-platform support, computer resource-rich and so on. Based on these advantages, Linux as an embedded operating system in embedded systems applications is becoming increasingly popular. In particular, it is completely free and open high-performance operating system, designed in line with the original intention of EMC, EMC is the first design of the Linux operating environment. However, the strong demand real-time applications, Linux is often difficult to meet the requirements. Therefore, real-time Linux become an important research topic. RTLinux is built on Linux on Realization of a real-time operating system, not only with hard real-time mechanism, while greatly Linux play their own merits.This article first detailed analysis of the current embedded systems development status, and then proceed from RTLinux, in-depth study RTLinux embedded real-time core principles and mechanisms, building real-time kernel. Then, introduce the use of embedded Linux technology, in FLASH devices to build a real-time operating system. The operating system is a running EMC (Enhanced Motor Control) software platform.Keyword: RTLinux real-time operating system, EMC software, embedded operating sysrem目 录摘要Abstract目录1第一章 绪论31.1 选题背景31.1.1 嵌入式Linux背景31.1.2 RTLinux背景31.1.3 EMC软件运行平台的需求41.2 国内外RTLinux的研究现状41.3 论文的主要研究内容51.4 本文章节安排5第二章 目标系统的整体结构72.1 目标系统的需求72.2 整体结构82.2.1 开发主机平台82.2.2 目标系统结构92.3 相关技术介绍102.3.1 CramFS102.3.2 Loopback device102.3.3 ramdisk102.3.4 initrd(Initial Ramdisk)112.3.5 busybox112.4 本章小结12第三章 RTLINUX实时内核原理与构建133.1 RTLinux简介133.1.1 普通Linux内核133.1.2 RTLinux实现原理143.2 RTLinux实时内核构建153.2.1 内核的选择153.2.2 编译前的准备163.2.3实时内核构建步骤173.3 本章小结22第四章 系统的引导与设计234.1 Linux系统引导简介234.1.1 bios234.1.2 系统的启动引导过程244.2系统引导程序264.2.1 LILO(linux loader)264.2.2 Grub(Grand Unified Bootloader)264.2.3 SYSLINUX274.3 目标系统启动设计284.3.1 安装启动程序284.3.2 配置文件294.4 本章小结29第五章 文件系统构建305.1 基本应用程序(busybox)305.2 创建设备文件/dev315.3 创建配置文件/etc325.3.1访问文件配置325.3.2文件系统配置325.3.3 系统管理配置335.3.4 系统命令配置335.3.5 引导注销和登陆配置345.3.6 其他配置文件345.4 制作系统用户模块355.4.1 X windows355.4.2 用户应用程序安装375.4.3 实时模块的安装385.4.4 系统用户模块镜像制作385.5 系统C库模块395.6 根目录镜像制作395.7 系统整合405.8 本章小结41第六章 结束语42致 谢43参考文献44第一章 绪论1.1 选题背景1.1.1 嵌入式Linux背景计算机系统无所不在,每年都要建立数以百计的计算机系统。但我们应该注意到,每年建立的计算机系统都有各自完全不同的目的:嵌入在大型的电子设备中,重复执行某个特定功能,而通常没有引起设备使用者的注意。这就是嵌入式操作系统,这些专用操作系统都是商业化产品, 其高昂的价格使许多低端产品的小公司望而却步而且,源代码封闭性也大大限制了开发者的积极性。现在需要的是一个便宜、成熟并且提供高端嵌入式系统所必须特性的操作系统, 嵌入式Linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用, 成为新兴的力量,所以, 众多商家纷纷转向了嵌入式Linux。嵌入式Linux有诸多好处让我们使用它, 1) 可应用于多种硬件平台2) Linux可以随意地配置不需要任何许可证或商家地合作关系。3) 它是免费的,源代码可以得到。4) 它本身内置网络支持。5) Linux的高度模块化使得添加部件非常容易。6) Linux在台式机上得成功,使大家看到了Linux在嵌入式系统中得辉煌前景。1.1.2 RTLinux背景Linux操作系统在近几年迅猛发展和不断成熟,除了在网络服务器,集群技术和PC桌面领域的进展引人瞩目外,它在嵌入式设备和实时应用领域也崭露头角。但是,标准Linux为分时操作系统,在实时系统应用方面能力较弱,无法胜任一些实时性要求较高的硬实时、软实时任务。当前对Linux操作系统进行实时化扩展的研究成为一大研究热点。在实时Linux方面,已经有多个的成熟产品:RTLinux、RTAI、RED-Linux、Linux/RK等等。其中,RTLinux引入软件模拟终端控制器、提高时钟精度,可抢占内核等思想,在Linux内核的平台基础上实现了一个独立的小的硬实时操作系统内核。他修改常规Linux的内核,在Linux和硬件中断间增加了一层实时调度模块,很好而又相当简单实现硬实时性要求,而不影响原来Linux上运行的其他程序。基于RTLinux操作系统的开放式数控系统,可以充分利用PC机的丰富资源,无需嵌入PC机内控制板卡便可实现实时多任务调度,这充分体现了数控系统的多任务,实时性,开放性特点,并解决了对硬件的依赖性问题,因此在构建EMC软件运行的嵌入式实时系统中,RTLinux是一个非常优秀的选择。1.1.3 EMC软件运行平台的需求EMC这个计算机数字控制软件为实现低成本的技术转移,EMC的设计遵循在廉价普通计算机系统上运行高性能的控制软件的原则。因此,EMC可以运行在386或以上的兼容PC机上,并最小限度地使用其他附加硬件。而且EMC主要基于自由开放的实时Linux操作系统(主要有Fsmlabs的RTLinux和RTAI),因此,我们需要构建一个实时的RTLinux嵌入式操作系统,为EMC提供一个运行平台。1.2 国内外RTLinux的研究现状RTLinux是新墨西哥科技大学(New Mexico Institute of Technology)开发的实时Linux系统。由VictorYodaiken和他的学生Michael Barabanov所完成。它的目的是将Linux提供的标准POSIX服务与硬实时服务有机地结合起来,提供透明的、模块化、可扩展的实时操作系统。在概念上,通过架空Linux,并把Linux的优先级设为最低,使得RTLinux的实时进程可以实时地被执行。RTLinux基本上是一个独立的微内核,它把Linux操作系统当作其中的进程。由于其接管了所有硬件资源,所以,RTLinux是一个硬实时的操作系统。RTLinux内核中拦截全部来自硬件的中断。并且将他们放在一个队列里面,等到实时任务全部执行完之后,才让这些中断进到Linux内核。因此它不受Linux的影响。为了使实时任务与非实时任务之间的通信不依赖于Linux的通信接口,RTLinux开发了实时FIFO、信号量、消息队列、共享内存等通信机制来实现实时任务之间、实时任务和非实时任务间的通信。RTLinux所需的资源全部静态分配,以避免动态分配资源产生不可预测的延时。实时任务可编译成一个模块,并在运行时动态加载。RTLinux的设计原则就是:尽量不去更改Linux本身。如果实时应用中的某项服务能由Linux提供,则应避免在RTLinux中实现。这样,可以最大程度地减少对Linux内核结构的影响,不会因Linux的升级而对RTLinux作大幅度的改变,同时,又能保持RTLinux的内核精练性。因此,RTLinux还是仰赖于Linux所提供的大部分服务,RTLinux本身则提供一些较低层次的服务,如启动一个实时任务、中断服务程序的安装,以及提供实时任务与中断或是一般的Linux处理程序之间的通信等。采用RTLinux作为数控系统开发平台具有很好的特点,比如良好的开放性、稳定性、模块化、可扩充性、可移植性等诸多优点,并且由于RTLinux强大的网络功能,使得RTLinux下的数控系统易于和其它模块通信。充分利用RTLinux的多进程,优先抢占式任务调度机制,强实时性的特点,可以非常方便地实现实时多任务控制功能。1.3 论文的主要研究内容基于RTLinux在计算机数控技术方面和Linux在嵌入式设备方面的诸多优点,本文通过对相关技术的了解与研究的基础上,构建一个运行在u盘或cf卡上的RTLinux嵌入式实时操作系统平台,提供给EMC数控软件运行。这其中主要有两大部分:1. RTLinux实时内核的研究与构建通过与EMC数控软件的结构知识相结合,研究RTLinux实时内核的结构与实现原理,在对RTLinux实时内核的各方面功能深入研究的基础上,构建一个适用于Flash设备的精简的RTLinux实时内核,通过正确地系统引导方法,用做该嵌入式实时操作系统的内核。2. 研究基于Flash设备的文件系统构建这其中具体包括三个层次。ramdisk的基础应用等级的构建、cramfs的动态库应用等级构建、cramfs的用户模块应用等级构建。通过这些技术的运用,根据EMC软件平台的具体需求,构建Flash设备上的精简文件系统。最后通过与RTLinux实时内核整合成一个Flash设备上的RTLinux实时嵌入式系统。1.4 本文章节安排本文主要时研究RTLinux实时嵌入式系统的构建,首先是对嵌入式实是系统的整体把握,对其需求和开发平台做了研究,在此基础上分别对该系统的各个部件实时内核,启动引导过程和文件系统分别做了研究和构建。最终达到了构建一个运行在U盘上的实时嵌入式系统的目的。全文总共分为六章第一章为绪论,介绍了本文的研究背景和研究目的,国内外研究,应用的现状,以及本论文主要的研究内容。第二章为目标系统的整体结构,对该实时嵌入式系统做了整体的把握,对其结构做了设计,同时创建一个开发平台和介绍相关技术,为开发嵌入式系统做好准备。第三章为实时内核的原理和构建。同过实时内核和普通linux内核的比较,认识实时内核的原理,同时在开发平台上构建目标系统所要使用的内核。第四章为系统的引导与设计。对linux启动引导过程和引导方法做了详细分析,得到适用与目标系统得引导方法,并在目标系统中设计引导方法。第五章为文件系统得构建。以构建目标系统的文件系统为主,在构建过程中研究相关技术的使用。最终得到系统的文件系统。第六章为总结。对全文进行了总结和展望。提出进一步的研究方向。第二章 目标系统的整体结构2.1 目标系统的需求随着人们对Linux认识的不断深入和不断发展,Linux系统除了在PC机上运行的发行版标准Linux(如Red Hat,Suse,Ubunto等)之外,Linux也不断向嵌入式设备上面发展。该毕业设计的目标是构建一个在Flash设备上运行的RTLinux实时嵌入式操作系统平台。由于加入了实时控件,该系统可以成为计算机数字控制软件(CNC)的运行平台,该系统的制作通过PCUSB来实验与开发,这其中我们要注意几个问题:1. 精简系统我们通常的PC机上运行的标准Linux都有几百兆到上千兆,这样的大小对于Flash设备来说是不可及的。作为一个嵌入式系统,内存和外存资源都需要节约使用,不能有丝毫的冗余,因为嵌入式系统要求的是体积小,稳定性高,反应速度快。冗余的系统都是与这些条件背道而驰的。因此需要对系统做适当的剪裁,使系统大小符合目标Flash设备的要求。 2. 特定功能标准发行版Linux中的功能只有不到30%是我们平时常用的,还有30%是我极少用到的,另外的40%基本上是不用的。对于嵌入式系统,我们要求其完成特定功能,加上系统大小的限制,所以我们系统只要求量身订做。在目标RTLinux实时嵌入式操作系统中,我们要求有:1) 实时功能 Linux内核完成实时任务需要加载实时RTLinux模块,因此目标系统中需要有RTlinux模块,包括mbuff.o,psc.o,rtl_fifo.o,rtl.o,rtl_posixio.o, rtl_sched.o,rtl_time.o等。以及与RTLinux相关文件。2) X windows我们需要一个基于客户/服务器(Client/Server)结构的窗口系统,支持图形界面。3) 网络功能可以完成一些简单的网络操作,如:ping,telnet,route等等。2.2 整体结构2.2.1 开发主机平台实验开发平台: PC机USB开发主机系统: Red Hat 7.2目标主机载体: usb 2.0的128M U盘所需软件包:busybox-1.00.tar.bz2 linux-2.4.16.tar.gz patch_rtl-2.4.16 patch_rtlinux-3.1 rtlinux-3.1.tar.gz X11 tclx8.3.tar.bz2 tcl8.3.3-new.tar.gz tk8.3.3.tar.bz2buildroot-0.9.27.tar.gz linux-libc-headers-2.4.27.tar.bz2 gcc-3.3.4.tar.bz2 binutils2.15.91.0.2.tar.bz2 uClibc0.9.27.tar.bz2 genext-0.14.3.tar.gz ccache-2.3.tar.gz建立交叉开发工具链:我们需要一个纯净的开发编译环境,所以我们要建立一个交叉开发工具链,这里我们需buildroot-0.9.27.tar.gz,buildroot事实上是一个脚本与补丁的集合,其它需要用到的软件,如gcc、uClibc,你只需在buildroot中指明相应的版本,它会自动去给你下载。安装buildroot只需要make menuconfig和make两个命令,但在配置中需要注意工具的版本必须正确,这里的工具有:linux-libc-headers-2.4.27.tar.bz2 ,gcc-3.3.4.tar.bz2 binutils2.15.91.0.2.tar.bz2 uClibc0.9.27.tar.bz2genext-0.14.3.tar.gz ccache-2.3.tar.gz同时工具链的位置也要摆放正确。安装结束后他将自动帮我们建立了一个纯净的交叉编译环境。工具和库文件分别放在/tools/bin和/tools/lib目录下。2.2.2 目标系统结构加载内核模块挂载cramfs镜像系统实时内核文件系统镜像系统基础C库数据包系统用户模块数据包启动引导配置文件S d a 1(17M)S d a 2用户程序和数据文件挂载U盘128M启动库文件 图 2.1 系统结构图系统结构如图2.1所示首先把U盘分为两个区,其中,sda1为Root系统的系统区,使用syslinux启动,因此该分区需要在fdisk分区时设为active,该分分区类型为FAT16。该分区中有一些主要文件,包括启动配置文件、启动库文件、系统实时内核、文件系统镜像、系统基础C库镜像,系统用户模块镜像等。目前该分区所需存储空间约为17MB。其中系统基础C库镜像和系统用户模块镜像是使用cramfs技术压缩的镜像,通过挂载(mount o loop t cramfs)的方法,挂载到文件系统的/lib和/usr目录下,为系统缩使用。sda2为Root系统的用户目录内容,可读写,用于存放用户需要的程序和数据文件。系统启动后挂载到系统的/scnc目录下,作为用户程序目录。该分区应设置的大小是以保证sda1大小为前提而所剩下的空间。2.3 相关技术介绍这里只是简单介绍相关技术,具体使用方法后面章节将具体介绍。2.3.1 CramFSCramFS(Compressed Rom File System)是Linux Torvalds在Transmeta任职时,所参与开发的文件系统。它是针对Linux内核2.4之后的版本所设计的一种新型只读文件系统,采用了zlib 压缩,压缩比一般可以达到1:2,但仍可以作到高效的随机读取,Linux系统中,通常把不需要经常修改的目录压缩存放,并在系统引导的时候再将压缩文件解开。因为Cramfs不会影响系统的读取文件的速度,而且是一个高度压缩的文件系统。因此非常广泛应用于嵌入式系统中。CramFS是一个压缩格式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时候,马上计算出该数据在CramFS中的位置,将它实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。CramFS中的解压缩以及解压缩之后的内存中数据存放位置都是由CramFS文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方式增强了透明度,对开发人员来说,既方便,又节省了存储空间。 2.3.2 Loopback device回环设备是Linux 中的一种虚拟设备,其用法类似于其他储存媒体设备(如:/ dev/ hda1 ,/ dev/ fd0 等)。回环设备可以用来储存文件档案,也可以根据使用需求将它格式化成各种不同的文件系统(如:ext2fs ,ntfs 等),并且被挂载于目录树中。回环设备文件通常是/ dev/ loop0 或/dev/ loop1 等等,这些设备再与所依赖的储存在其他文件系统中的文件关联,因此这个文件便能被视为虚拟设备而被挂载。2.3.3 ramdiskRamdisk是Linux系统中的一种虚拟设备,是从内存中划分出来作为高速缓存的一部分,将它虚拟为磁盘。Ramdisk device (如:/ dev/ ram0,/ dev/ ram1) 可以在任何时候被创建和加载,同其他磁盘分区一样被操作。Ramdisk 通常用于系统启动。Ramdisk 设备,使整个Linux 操作系统全部运行于内存中的方案得以实现。该方案利用系统访问RAM 的高速低延迟性来取代磁盘I/ O 的低速高延迟性,是以大内存换取系统性能提高的典型应用。2.3.4 initrd(Initial Ramdisk)Initial Ramdisk在Linux中提供了一种用Loopback device 作为根目录的一种重要机制, 其原理为:当Initial Ramdisk 被启用时,另一文件系统的image (映像) 文件将被载入内存,系统便可以访问此文件系统上的文件了。initial Ramdisk 上的一个名为linuxrc 的程序将运行,直到另外一个作为根目录的设备被加载之后结束。Initial Ramdisk 之所以重要,是因为它允许在主启动顺序启动之前更改根设备, 这是通常的启动顺序所做不到的。initrd 文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再将这个 initrd RAM 磁盘卸载,并释放内存。在很多嵌入式 Linux 系统中,initrd 就是最终的根文件系统。2.3.5 busyboxbusybox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小。我们平时用的那些linux命令就好比是分力式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux应用中,busybox有非常广的应用,另外,大多数linux发行版的安装程序中都有busybox的身影,安装linux的时候案ctrl+alt+F2就能得到一个控制台,而这个控制台中的所有命令都是指向busybox的链接。在嵌入式系统中,存储器一般都不会太大,通常是8M一16M左右,有的甚至只有一张软盘大小,所以如何减少文件系统的大小就显得至关重要了。一般来说,它包括两方面的工作,裁剪无用的文件和裁剪必须的文件中无用的功能。Busybox将上述两方面的工作完美地融合在了一起。Busybox编译出一个单个的独立执行程序,就叫做busybox。但是它可以根据配置,执行ashShen的功能,以及几十个各种小应用程序的功能。这其中包括有一个迷你的vi编辑器,系统不可或缺的/sbin/init程序,以及其他诸如sed,ifeonfig,halt,reboot,mkdir,mount,In,15,eeho,eat等等这些一个正常的系统上必不可少的命令及文件,但是如果我们把这些程序的原件拿过来的话,它们的体积加在一起,也是让系统无法承受的。可是busybox可以拥有全部的这么多功能,大小也不过数百K左右。而且,用户还可以根据自己的需要,决定到底要在busybox中编译进应用程序的哪几个功能。这样的话,busybox的体积就可以进一步缩小了。2.4 本章小结本章对构建RTLinux嵌入式实时系统做了一个整体的把握,确定目标系统的需求以及整体结构,这对以后各部分的研究和开发是一个总纲领。同时对开发平台和开发过程中所需要的技术做了详细的分析,在开发主机上构建了一个交叉开发环境,这对内核的构建和文件系统的构建都是必须的。以后各章对嵌入式系统各个部分的构建都是建立在本章的平台上,同时都要按照本章的要求去实施。第三章 RTLINUX实时内核原理与构建3.1 RTLinux简介RTLinux是Linux下一个使用比较广泛的硬实时操作系统版本。起初,它是由New Mexico Tech的Michael Barabanov和Victor Yodaiken两人编写的。他们修改常规Linux的内核,在Linux和硬件中断间增加了一层实时调度模块,很好而又相当简单实现硬实时性要求,而不影响原来Linux上运行的其他程序。现在,除了普通版本的RTLinux外,Fsmlabs还开展了适于嵌入式设备(PC104 or 其他嵌入式系统)的MiniRTL计划,使RTLinux完全能在一张1.44MB的软盘上使用。3.1.1 普通Linux内核内核是操作系统的灵魂,包括内核抽象和对硬件资源(如CPU)的访问,它负责管理内存和磁盘上的文件,负责启动系统并运行程序,负责从网络上接受和发送数据包等等。总之,内核实际上是抽象的资源操作到具体硬件操作细节之间的接口。图3.1是普通Linux内核的结构。但Linux内核本质上不是实时操作系统,应用于嵌入式应用存在诸多不足,如下:进程调度问题:Linux采用标准的Unix技术使得内核是不可抢占的。采用基于固定时间片的可变优先级调度,不论进程的优先级多么低,Linux总会在某个时候分给该进程一个时间片运行,即使同时有可以运行的高优先级进程,它也必须等待低优先级进程的时间片用完,这对一些要求高优先级进程立即抢占32K 的实时应用是不能满足要求的。关中断问题:在系统调用中,为了保护临界区资源,Linux处于内核临界区时,中断会被系统屏蔽,这就意味着如果当前进程正处于临界区,即使它的优先级较低,也会延迟高优先级的中断请求。在实时应用中,这是一个十分严重的问题。时钟问题:Linux为了提高系统的平均吞吐率,将时钟中断的最小间隔设置为10ms,这对于一个周期性的实时任务,间隔要求小于10ms 时,就不能满足实时任务的需要。如果要把时钟中断的间隔改小以满足周期性的实时任务的需要,由于Linux的进程切换比较费时,时钟中断越频繁,而花在中断处理上的时间就越多,系统的大部分时间是在进行进程调度,而不能进行正常的处理。硬 件设备驱动I / O中断系 统 库内 核用户进程 图3.1 普通linux内核结构3.1.2 RTLinux实现原理在设计RTLinux的过程中,设计者遵循的宗旨是无需找出并一一消除Linux内核中所有引起任务执行不确定(实时性不高)的部分。因为这样的工作将会十分艰巨,而且影响甚广。简单的说,Linux内核中引起不可预计性的部分包括,按吞吐量最优化设计的调度算法,设备驱动模块,不可中断的系统调用,中断屏蔽和虚拟内存的使用。最好的解决办法是构建一个小的实时性内核,分隔Linux的内核与硬件。这种方式的另外一个好处是带来方便的维护性。在RTLinux开发之前,每次Linux内核的其他改动,都必须重新确定是否带来不可预计的不确定性。图3.2是修改后的RTLinux内核结构。如上所说,RTLinux小内核加在普通Linux内核与计算机硬件之间,它以固定优先级的调度策略调度实时任务和Linux内核。在Linux内核看来,RTLinux这一层就是硬件,与以前没什么不同;在RTLinux看来,Linux内核只是它所管理的多个进程中优先级最低的一个进程。所有普通Linux内核的中断申请和屏蔽要求都被RTLinux有效的控制着,使之对实时任务没有任何影响。RTLinux对任务的处理分为实时任务和非实时任务。硬件中断到来时,如果中断与任何实时任务无关而没有实时任务在执行,RTLinux保持中断并以软件中断的方式送到Linux内核进行处理;否则,转到执行相应的实时中断服务程序(ISR)。RTLinux是不可抢占的。实时进程有两个特征,直接访问硬件的特权和不使用虚拟内存。它不执行系统调用,功能被大大限制,但是足够完成一般的实时任务。实时进程初始化时,初始化了其进程结构,告诉RTLinux它的deadline,period和release-time constaint。非周期实时进程则通过使用中断实现。软中断I/O中断I/O硬 件RTLinux内核系 统 库驱 动内 核实时任务实时任务Rt_fifo,mbuff用 户 进 程 图 3.2 RTLinux内核结构3.2 RTLinux实时内核构建3.2.1 内核的选择Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新,新的内核修订了旧内核的bug,并加进了许多新的特性。内核的多样性,让我们在选择内核时,可以根据自身需要,做更好的选择。通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快,更稳定,并且一般会修复老版本的一些漏洞等,为了更合理的选择内核,我们需要对诸多内核做一个权衡,一般考虑一下几个方面:自己选定的内核运行更快(具有更少的代码)内核的运行更稳定系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)内核更安全但是构建一个嵌入式Linux系统需要一个与系统相适应的内核,内核的版本并不是越高越好,例如最新的2.6.x内核的情况下,编译一个all-no的(即所有内容都选N,不支持任何硬件,只有一个最基本的内核)最小化内核就要460K左右,而且2.6内核许多支持的功能是我们不需要的,这就与嵌入式系统的小体积,功能单一的特性相违背了。加之2.6内核的实时RTLinux不是免费的,这里不符合我们的需求,因此我们必须重新考虑选择合适的内核本版。在构建RTLinux实时嵌入式操作系统中,我选择的是2.4.16版本的内核( www.kernel.org 有各个时期的内核可以下载),2.4版本的内核是相对稳定的一系列内核,在开发系统Red Hat 7.2正是使用这种内核,而且2.4内核有与之相适应的RTLinux3.1实时内核,因此,在U盘嵌入式Linux系统中,我觉得2.4.16内核是最为合适的一个版本。3.2.2 编译前的准备在编译内核前,因该现确定系统的需求,需要让内核支持什么硬件,支持多少种分区类型和文件系统,支持哪些网卡,支持哪些网络协议,等等。如作为一个U盘linux系统,U盘是scsi驱动,那么scsi的驱动模块就必须编译进去,而对于声卡驱动之类来说,因为我们并没有播放声音的需求,因此可以将其去除,等等。编译内核需要我们量身订做,编译进去多的功能不但我们不需要,而且占用空间,这不符合嵌入式系统的要求。具体编译后一节介绍。编译前还有一点是需要注意的,通常在Linux启动过程中,内核解压运行完成后,会加载root分区,然后执行root分区上的init脚本。当用户使用硬盘时,硬盘的初始化速度很快。在内核运行完成之前,因为硬盘已经准备就绪了,所以内核可以顺利加载硬盘上的root分区。然而优盘初始化速度要比硬盘慢多了。这样就会出现内核启动完成后,因优盘还没有完成初始化而导致root分区无法被加载的现象。所以要想使用优盘启动Linux就需要延长内核加载root分区的等待时间,办法就是对系统内核初始化代码do_mounts.c作类似下面的修改。从内核的源码树中找到init目录下的do_mounts.c文件,请根据自己的源码版本做类似下面的修改: * Allow the user to distinguish between failed open* and bad superblock on root device.*/- printk (“VFS: Cannot open root device“%s”or %s”,+ printk (“VFS: Cannot open root device“%s”or %s”, retrying in 1 second., root_device_name, kdevname (ROOT_DEV);- printk (“Please append a correct “root=”boot option”);- panic(“VFS: Unable to mount root fs on %s”,- kdevname(ROOT_DEV);+ printk (“You may need to append a correct“root=”boot option”);+ printk (“or wait for the root device to become ready.”);+ /* wait 1 second and try again,+ * allowing time for hubs/devices to become ready */+ set_current_state(TASK_INTERRUPTIBLE);+ schedule_timeout(HZ);+ goto retry; ) panic(“VFS: Unable to mount root fs on %s”, kdevname(ROOT_DEV);3.2.3实时内核构建步骤构建RTLinux内核需要重新编译内核,RTLinux和实时任务最终都是以内核模块的形式运行的。需要的安装文件有:Linux 2.4.16内核源代码linux-2.4.16.tar.gzRTLinux 3.1源代码rtlinux-3.1.tar.gzRTLinux 3.1对2.4.16内核的补丁文件rt-patch-2.4.16.tgz(patch_rtl-2.4.16和patch_rtlinux-3.1)1) 改变当前目录到 /usr/srccd /usr/src2) 解压内核包与RTLinux源代码tar zxvf /tmp/rtlinux-3.1.tar.gzcd rtlinux-3.1tar zxvf /tmp/linux-2.4.16.tar.gz3) 创建必要的链接cd.ln sf rtlinux-3.1 rtlinuxln sf rtlinux-3.1/linux linux至此,已经将新内核连接到/usr/src/linux上了。4) 给linux内核打上Realtime补丁cd rtlinux-3.1/linuxpatch p1 /tmp/patch_rtl-2.4.16cd .patch p1 /tmp/patch_rtlinux-3.1经过以上步骤,就得到了一个打过实时补丁的linux源代码了。5) 配置内核并编译make menuconfig (或 make xconfig,Xwindow下可以使用) 选择相应的配置时,有三种选择,它们分别代表的含义如下:Y将该功能编译进内核N不将该功能编译进内核M将该功能编译成可以在需要时动态插入到内核中的模块配置完成后就可以继续编译内核了 make dep 读取配置过程生成的配置文件make clean 删除前面步骤留下的文件make bzImage 实现完全编译内核make modules 生成相应的模块make modules_install 拷贝模块到需要的目录中这里编译出来的在arch/i386/boot/目录中的bzImage正是我们系统中所需要的打上了实时补丁的内核,但接下来还要在开发主机上编译实时RTLlinux内核模块,所以要在开发主机上用刚编译出来的内核启动开发主机上的系统Red Hat,我的Red Hat是使用grub启动的,所以可以按下面步骤操作重启cp /linux/arch/i386/boot/bzImage /boot/bzImagecp /linux/System.map /boot/System.map(这里可以改成自己喜欢的名字)修改开发主机系统中的/boot/grub/grub.conf文件,加入title rtlinuxroot (hd0,0)kernel /bzImage ro root=/dev/sda2 这样重启后选择 rtlinux项,那启动系统的内核就是我们刚刚编译的打完实时补丁的内核了。这里在内核配置时有一个重要的问题,正如我们前面所说的,我们是在构建一个嵌入式系统的内核,要量身订做,不能贪心,但在这里,内核的编译有几大部分的需求,是必须编译进去的,其他选项则根据需要编译:rtlinux支持:在character device中Enhanced real time clock support 此选项可可以告诉计算机上的晶振频率,从1Hz到8192Hz不等。在Console drivers中Frame-buffer support 此项需要选择Code maturity level Options这一项,因为framebuffer支持尚属于实验性代码在Loadable module support中Enable loadable module support 使内核可以加载模块Set version information on all symbols for modules 设置模块版本信息Kernel module loader support 内核模块加载器支持在processor type and features中processor family 选择合适的CPU类型,这里选择386CPU,因为这样可以让老至386,新到P4的CPU都能运行Symmetric multi-processi
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 任务书类


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

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


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