一篇关于嵌入式的本科论文.docx
- 文档编号:11491137
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:67
- 大小:67KB
一篇关于嵌入式的本科论文.docx
《一篇关于嵌入式的本科论文.docx》由会员分享,可在线阅读,更多相关《一篇关于嵌入式的本科论文.docx(67页珍藏版)》请在冰豆网上搜索。
一篇关于嵌入式的本科论文
目录
第一章绪论
第二章嵌入时操作系统
§1什么是嵌入式操作系统
§2嵌入式系统的特征
2.1嵌入式系统具有的产品特征
2.2嵌入式系统软件的特征
§3Linux在嵌入式系统中的优势
§4规划一个好的硬件平台
4.1选择一个好的嵌入式微处理器
4.2规划通讯技术
4.3适合嵌入式Linux的开发工具
§5构造嵌入式Linux前先要了解的几个关键问题
5.1如何引导?
5.2需要虚拟内存么?
5.3选用什么样的文件系统
5.4如何消除嵌入式Linux对磁盘的依赖
5.5嵌入式Linux达到怎样的实时性?
第三章实时操作系统
§1什么是实时系统
§2几种实时Linux的比较
2.1RT-Linux
2.2RTAI
2.3KURT
§3实时Linux的最后选择
§4构造嵌入式Linux需要了解的几个概念
4.1FrameBuffer的配置方法--XWindow显卡配置通用解决方法
4.2Linux下创建和使用RamDisk的技巧
4.3LINUX下的设备驱动程序
4.4Linux可卸载内核模块
4.5什么是Busybox
4.6什么是QT
第四章构造嵌入式实时Linux
§1构造嵌入式实时Linux的开发环境
§2Linux启动过程简介
§3配置和编译内核
§5定制文件系统
§4制作启动盘
§6生成文件系统的ramdisk压缩镜像文件
§7运行及测试
第五章如何从eprom引导Linux
摘要:
本文介绍了嵌入式实时Linux的构造方法,介绍了嵌入式,实时操作系统的概念,同时分析了它们在Linux中的应用情况,以及其中涉及的一些概念如frambuffer,ramdisk,驱动程序,模块和一些源代码开放的软件如Qt,busybox,RTAI。
在这些概念和应用的基础上,构造了自己的嵌入式实时Linux,定制了启动盘和压缩的文件系统。
在此基础上,进一步的又对引导过程加以延伸,提供了从Eprom引导的方法。
关键词:
Linux,embedded,realtime,
abstract:
ThispaperintroducedbuiltingmethodofembeddedrealtimeLinux,theconceptofembeddedrealtimeOS,alsoanalyzedtheusingconditioninLinux,aswellasrelatedconceptsuchasframbuffer,ramdisk,Linuxdrivers,modulesandsomeGPLcodesuchasQt,busybox,RTAI.Onthebaseoftheseconceptsandapplications,webuiltedourembeddedrealtimeLinux,customizedbootingdiskandfilesystem.farther,weextendedthebootingprocess,offeredthemethodofbootingfromeprom.
第一章绪论
Internet与网络的迅速普及应用,并向家庭领域不断扩展,使消费电子、计算机、通信(3C)一体化趋势日趋明显,嵌入式系统再度成为研究与应用的热点。
实时操作系统在多媒体通信、在线事务处理、生产过程控制、交通控制等各个领域得到广泛的应用,因而越来越引起人们的重视。
嵌入式实时Linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为新兴的力量,所以,众多商家纷纷转向了嵌入式实时linux的研究。
本文就以嵌入式实时Linux为题进行讨论。
第二章嵌入时操作系统
§1什么是嵌入式操作系统
所谓嵌入式操作系统(EmbeddedSystem)是指以应用为中心、以计算机技术为基础,软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
嵌入式计算机在应用数量上远远超过了各种通用计算机,一台通用计算机的外部设备中就包含了5-10个嵌入式微处理器,键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡、打印机、扫描仪、数字相机、USB集线器等均是由嵌入式处理器控制的。
在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等方面均是嵌入式计算机的应用领域。
嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
一个小型的嵌入式Linux系统只需要下面三个基本元素:
* 引导工具
* Linux微内核,由内存管理、进程管理和事务处理构成
* 初始化进程
如果要让它能干点什么且继续保持小型化,还得加上:
* 硬件驱动程序
* 提供所需功能的一个或更多应用程序。
再增加功能,或许需要这些:
* 一个文件系统(也许在ROM或RAM)中
* TCP/IP网络堆栈
§2嵌入式系统的特征
2.1嵌入式系统具有的产品特征
嵌入式系统是面向用户、面向产品、面向应用的,如果独立于应用自行发展,则会失去市场。
嵌入式处理器的功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约,这些也是各个半导体厂商之间竞争的热点。
和通用计算机不同,嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用对处理器的选择面前更具有竞争力。
嵌入式处理器要针对用户的具体需求,对芯片配置进行裁剪和添加才能达到理想的性能;但同时还受用户订货量的制约。
因此不同的处理器面向的用户是不一样的,可能是一般用户,行业用户或单一用户。
嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。
嵌入式系统中的软件,一般都固化在只读存储器中,而不是以磁盘为载体,可以随意更换,所以嵌入式系统的应用软件生命周期也和嵌入式产品一样长。
另外,各个行业所以嵌入式系统的应用软件生命周期也和嵌入式产品一样长。
另外,各个行业的应用系统和产品,和通用计算机软件不同,很少发生突然性的跳跃,嵌入式系统中的软件也因此更强调可继承性和技术衔接性,发展比较稳定。
嵌入式处理器的发展也体现出稳定性,一个体系一般要存在8-10年的时间。
一个体系结构及其相关的片上外设、开发工具、库函数、嵌入式应用产品是一套复杂的知识系统,用户和半导体厂商都不会轻易地放弃一种处理器。
2.2嵌入式系统软件的特征
嵌入式处理器的应用软件是实现嵌入式系统功能的关键,对嵌入式处理器系统软件和应用软件的要求也和通用计算机有所不同。
(1) 软件要求固态化存储
为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。
(2) 软件代码高质量、高可靠性
尽管半导体技术的发展使处理器速度不断提高、片上存储器容量不断增加,但在大多数应用中,存储空间仍然是宝贵的,还存在实时性的要求。
为此要求程序编写和编译工具的质量要高,以减少程序二进制代码长度、提高执行速度。
序编写和编译工具的质量要高,以减少程序二进制代码长度、提高执行速度。
(3) 系统软件(OS)的高实时性是基本要求在多任务嵌入式系统中,对重要性各不相同的任务进行统筹兼顾的合理调度是保证每个任务及时执行的关键,单纯通过提高处理器速度是无法完成和没有效率的,这种任务调度只能由优化编写的系统软件来完成,因此系统软件的高实时性是基本要求。
(4) 多任务操作系统是知识集成的平台和走向工业标准化道路的基础
§3Linux在嵌入式系统中的优势
1免许可费用
大多数的商业操作系统,例如Windows、WindowsCE对每套操作系统收取一定的许可证费用。
相对的,Linux是一个免费软件,并且公开源代码。
只要你不违反GPL协议,你就可以自由应用和发布Linux。
2有很高的稳定性
在PC硬件上运行时,Linux是非常可靠和稳定的,特别是和想在流行的一些操作系统相比。
嵌入式内核本身有多稳定呢?
对大多数微处理器来说,Linux非常好。
一直到新微处理器家族的Linux内核运行起来与本来的微处理器一样稳定。
他经常被一直到一个或多个特定的主板上。
这些本包括特定的外围设备和CPU。
幸运的是,许多不同的处理器的指令代码是相通的,所以移植集中在差异上。
其中大多数是在内存管理和中断控制领域。
一旦成功移植,它们就非常稳定。
根据大部分国内外使用者的经验,Linux至少和许多著名的商业性操作系统一样稳定。
总之,这些操作系统和Linux的问题在于对工作过程微妙之处的误解,而不在于代码的难度或基本的设计错误。
任何操作系统都有很多争论不休的故事,这里不需要重复。
Linux的优势在于源代码是公开、注释清晰和文挡齐全的。
这样,你就可以控制和处理所出现的任何问题。
不过仍然有两个因素会影响稳定性,一是使用了混乱的驱动程序。
驱动程序的选择很有限,有些稳定有些不稳定。
一旦你离开了通用的PC平台,你需要自己编写。
幸运的是,周围有许多驱动程序,你可能可以找到一个与你的需求相近的修改一下。
这种驱动程序界面已定义好。
许多类的驱动程序都非常相近,所以把磁盘、网络和一系列的端口驱动程序从一个设备移植到另一个设备上通常并不难。
现在许多驱动程序都写得很好,很容易理解,但你还是要准备一本关于内核结构的书在手头。
二是使用了硬盘。
文件系统的可靠性就成了问题。
用磁盘进行Linux系统设计。
这些系统几乎不能正常关闭,电源随时都可能被中断。
标准Linux初始化脚本运行fsck程序,它在检查和清除不稳定的inodes方面非常有效。
将默认的每隔30秒运行更新程序改为每隔5或10秒运行是比较明智的。
这样缩短了数据在进入磁盘之前,待在高速缓冲存储器内的时间,降低了丢失数据的可能性。
3强大的网络功能
Linux天生就是一个网络操作系统,几乎所有的网络协议和网络接口都已经被定制在Linux中。
Linux内核在处理网络协议方面比标准的Unix更具执行效率,在每一个端口上有更高的吞吐量。
4丰富的开发工具
Linux提供C、C++、JAVA以及其他很多的开发工具。
更重要的是,爱好者可以免费获得。
并且这些开发工具设计时已经考虑到支持各种不同的微处理器结构和调试环境。
Linux基于GNU的工具包,此工具包提供了完整与无缝交叉平台开发工具,从编辑器到底层调试。
其C编译器产生更有效率的执行代码。
5大量的文档
对新手来说,有很多用户界面友好的参考文档,这些资料很容易从网上获得。
对处于黄金时期的Linux来说,许多书店都愿意在书架上放上这方面的书籍。
§4规划一个好的硬件平台
4.1选择一个好的嵌入式微处理器
嵌入式微处理器的基础是通用计算机中的CPU。
在应用中,将处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的母板功能,这样可以大幅度减小系统体积和功耗。
为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然在功能上和标准处理器基本是一样的,但在工作温度、成本、功耗、可靠性、健壮性等方面和工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点,但是在电路板上必须包括ROM、RAM、总线接口、各种外设等器件,从而降低了系统的可靠性,技术保密性也较差。
嵌入式微处理器及其存储器、总线、外设、等安装在一块电路板上,称为单板计算机。
如STD-BUS、PC104等。
嵌入式处理器目前主要有国半X86、DragonBall、ARM、StrongARM、PowerPC、68000、MIPS系列等。
4.2规划通讯技术
PCI方案:
在高速通信中一个重要的因素是嵌入装置如何快速地传输数据而不涉及CPU。
在很多低功率手持产品中,基本的I/O设备是与主处理器集成在一起的,不需要主CPU总线扩展。
但大多数新的设计不仅需要基本的I/O设备,而且很多都采用广泛应用PC机标准以便主CPU总线扩展,即PCI(外设部件互连)总线。
PCI总线工作频率为33MHz(rev2.1支持66MHz),对于连接到它上面的器件是具有即插即用能力。
CompactPCI(PCI总线的一种)正在进入工业和通信市场。
PC104+基本上分别为PCISA和PCI总线的改进型。
PC104总线与ISA总线完全兼容的。
这些总线的出现有助于PCI技术进入嵌入领域。
IrDA/FastIrDA:
红外数据联盟(IrDA)是一个由150多个公司组成的联合体。
IrDA提供一种价廉的无线、点到点、双向红外通信技术。
它旨在用于小于1米的极短距离通信。
IrDA有两个速度:
低速运行于9.6—115kits/s(简称IrDA);高速运行于1—4Mbits/s(即FastIrDA)。
高达16Mbits/s的更高速度的正在开发。
IrDA用于笔记本计算机、PDA、打印机、照相机等产品中。
其他产品如复印机、投影机和游戏控制等也正在考虑采用。
USB:
通用串形总线(USB)是由IBM、Compaq、Nortel、NEC、Intel和Microsoft公司开发的一种外设总线标准。
它为所有USB外设提供一种通用的连接,其数据率12Mbits/s。
USB缆线是为适用于短距离(最长5米)而设计的。
连接遵从树拓扑结构,在任何时间可连接127个器件而外设可以是带电交换的。
USB缆线也把功率(+5V)分配给低功率外设。
它为不能处理瞬间传输、又需要保证带宽和有限执行时间的应用提供同步通信。
同步工作量可以是USB总线带宽的一部分或全部。
USB特别适合于需要高数据率和易于即插即用的应用,如调制解调器、游戏控制、打印机、扫描仪和数字相机。
需要保证带宽和有限执行时间的应用包括PC电话和其他语言及视频通信应用。
除了这些新的多媒体设备外,USB也用于传统的I/O设备,如键盘和鼠标,其处理速度为低速(1.5Mbits/s)。
WindowsCE为USB提供支持。
USB的系统软件由两部分组成:
USBD(通用串行总线驱动器)和HCD(主控制器驱动器)。
USBD由Microsoft提供而用USB器件驱动器实现高级功能。
HCD模件提供到实际硬件(OHCD开路主控制器驱动器或UHCD通用主控制器驱动器)的接口。
Ethernet/FastEthernet:
Ethernet(以太网)和FastEthernet(IEEE802.3和802.3n)是最广泛应用的局域网络技术,旨在小区域(即一个办公室)范围连接计算机。
Ethernet工作在10Mbits/s而FastEthernet工作在100Mbits/s。
两个协议的差别限于物理层和通信媒体。
媒提存取规则是CSMA/CD(载波检测多路存取/冲突检测)。
WindowsCE通过其NDIS4.0实现支持IEEE802.3小口驱动器。
Ethernet卡可以在平台上或通过一个PCMCIA槽进行热插拔。
IEEE1394:
IEEE1394是高速串行总线,其数据为25—400Mbits/s。
它起源于AppleComputer的FireWire总线,是作为通用外设串行总线而设计的,但它的应用重点转为所有类型的消费类设备如数字相机和扫描仪。
缆线型1394总线可支持63个器件。
其间之一变成总线管理者,与其他器件协调之后管理总线执行。
缆线越长它所能够处理的数据率就越低。
一般长度为几米。
IEEE1394和USB都是串行协议,然而USB和IEEE1394比其竞争技术有更大的互补性,USB属于低到中带宽,而IEEE1394属于中到高带宽。
4.3适合嵌入式Linux的开发工具
开发嵌入式系统的关键的是可用的工具包。
像任何工作一样,好的工具使得工作更快更好。
开发的不同阶段需要不同的工具。
传统上,首先用于开发嵌入式系统工具是内部电路仿真器(ICE),它是一个相对昂贵的部件,用于植入微处理器与总线之间的电路中,允许使用者监视和控制微处理器所有信号的进出。
这有点难做,因为它是异体,可能会引起不稳定。
但是它提供了总线工作的清晰状况,免了许多对硬件软件底层工作状况的猜测。
过去,一些工作依赖ICE为主要调试工具,用于整个开发过程。
但是,一旦初始化软件对串口支持良好的话,多数的调试可以不用ICE而用其他方法进行。
较新的嵌入式系统利用非常清晰的微处理器设计。
有时,相应工作初始码已经有了能够快速获得串口工作。
这意味着没有ICE人们也能够方便地工作。
省去ICE降低了开发的成本。
一旦串口开始工作,它可以支持各种专业开发工具。
Linux是基于GNU的C编译器,作为GNU工具链的一部分,与gdb源调试器一起工作。
它提供了开发嵌入式Linux系统的所有软件工具。
这有些典型的、用于在新硬件上开发嵌入式Linux系统的调试工具。
(1).写入或植入引导码
(2).向串口打印字符串的编码,如“HelloWorld”
(3).将gdb目标码植入工作串口,这可与另一台运行gdb程序的Linux主机系统对话。
只要简单地告诉gdb通过串口调试程序。
它通过串口与测试机的gdb目标码对话,你可以进行C源代码调试,也可以用这个功能将更多的码载入RAM或FlashMemory中。
(4).利用gdb让硬件和软件初始化码在Linux内核启动时工作。
(5).一旦Linux内核启动,串口成为Linux控制口并可用于后续开发。
利用kgdb,内核调试版的gdb,这步常常不作要求,如果你与网络联接,如10BaseT,下一步你可能要启动它。
(6).如果在你的目标硬件上运行了完整的Linux内核,你可以调试你的应用进程。
利用其他的gdb或覆盖gdb的图形如xgdb。
§5构造嵌入式Linux前先要了解的几个关键问题
5.1如何引导?
当一个微处理器第一次启动的时候,它开始在预先设置的地址上执行指令。
通常在那里有一些只读内存,包括初始化或引导代码。
在PC上,这是BIOS。
它执行了一些低水平的CPU初始化和其它硬件的配置。
BIOS继续辨认哪个磁盘里有操作系统,把操作系统复制到RAM并且转向它。
实际上,这非常复杂,但对我们的目标来说也非常重要。
在PC上运行的Linux依靠PC的BIOS来提供这些配置和OS加载功能。
在一个嵌入式系统里经常没有这种BIOS。
这样你就要提供同等的启动代码。
幸运的是,嵌入式系统并不需要PCBIOS引导程序那样的灵活性,因为它通常只需要处理一个硬件的配置。
这个代码更简单也更枯燥。
它只是一指令清单,将固定的数字塞到硬件寄存器中去。
然而,这是关键的代码,因为这些数值要与你的硬件相符而且要按照特定的顺序进行。
所以在大多数情况下,一个最小的通电自检模块,可以检查内存的正常运行、让LED闪烁,并且驱动其它必须的硬件以使主LinuxOS启动和运行。
这些启动代码完全根据硬件决定,不可随意移动。
幸运的是,许多系统都有为核心微处理器和内存所定制的菜单式硬件设计。
典型的是,芯片制造商有一个样本主板,可以用来作为设计的参考或多或少与新设计相同。
通常这些菜单式设计的启动代码是可以获得的,它可以根据你的需要轻易的修改。
在少数情况下,启动代码需要重新编写。
为了测试这些代码,你可以使用一个包含‘模拟内存’的电路内置模拟器,它可以代替目标内存。
你把代码装到模拟器上并通过模拟器调试。
如果这样不行,你可以跳过这一步,但这样就要一个更长的调试周期。
这个代码最终要在较为稳定的内存上运行,通常是Flash或EPROM芯片。
你需要使用一些方法将代码放在芯片上。
怎么做,要根据“目标”硬件和工具来定。
一种流行的方法是把Flash或EPROM芯片插入EPROM或Flash烧制器。
这将把你的程序“烧”(存)入芯片。
然后,把芯片插入你的目标板的插座,打开电源。
这个方法需要板上配有插座,但有些设备是不能配插座的。
另一个方法是通过一个JTAG界面。
一些芯片有JTAG界面可以用来对芯片进行编程。
这是最方便的方法。
芯片可以永远被焊在主板上,一个小电缆从板上的JTAG连接器,通常是一个PC卡,联到JTAG界面。
下面是PC运行JTAG界面所需的一些惯用程序。
这个设备还可以用来小量生产。
5.2需要虚拟内存么?
标准Linux的另一个待征是虚拟内存的能力。
正是这种神奇的特征使应用程序员可以狂热的编写代码而不计后果,不管程序有多大。
程序溢出到了磁盘交换区。
在没有磁盘的嵌入式系统里,通常不能这么做。
在嵌入式系统里不需要这种强大的功能。
实际上,你可能不希望它在实时的关键系统里,因为它会带来无法控制的时间因素。
这个软件必须设计得更加精悍,以适合市面上物理内存,就象其它嵌入式系统一样。
注意由于CPU的原因,通常在Linux中保存虚拟内存代码是明智的,因为将它清除很费事。
而且还有另外一个原因是它支持共享文本,这样就可以使许多程序共享一个软件。
没有这个,每一个程序都要有它自己的库,就象printf一样。
虚拟内存的调入功能可以被关掉,只要将交换空间的大小设置为零。
然后,如果你写的程序比实际的内存大,系统就会当作你的运行用尽了交换空间来处理;这个程序将不会运行,或者malloc将会失灵。
在许多CPU上,虚拟内存提供的内存管理可以将不同程序分开,防止它们写到其它地址的空间上。
这在嵌入式系统上通常不可能,因为它只支持一个简单、扁平的地址空间。
Linux的这种功能有助于其发展。
它减少了胡乱的编写程序造成系统崩溃的可能性。
许多嵌入式系统基于效率方面的原因有意识使用程序间可以共享的“全局”数据。
这也可以通过Linux共享内存功能来支持,共享的只是指定的内存部分。
5.3选用什么样的文件系统
许多嵌入式系统没有磁盘或者文件系统。
Linux不需要它们也能运行。
如前所述,应用程序任务可以和内核一起编写,并且在引导时作为一个影像加载。
对于简单的系统来说,这就够了。
然而,它缺乏前面所说的灵活性。
实际上,许多商业性嵌入式系统,提供文件系统作为选项。
许多或者是专用的文件系统或者是MS-DOS-Compatible文件系统。
Linux提供MS-DOS-Compatible文件系统,同时还有其它多种选择。
之所以提供其它选择是因为它们更加强大而且具有容错功能。
Linux还具有检查和维护的功能,商业性供应商往往不提供这些。
这对于Flash系统来说尤其重要,因为它是通过网络更新的。
如果系统在升级过程中失去了能力,那它就没有用了。
维护的功能通常可以解决这类问题。
文件系统可以被放在传统的磁盘驱动器、FlashMemory或其它这类的介质上。
而且,用于暂时保存文件,一个小RAM盘就足够了。
FlashMemories被分割成块。
这些块中也许包括一个含有当CPU启动时运行的最初的软件的引导块。
这可能包括Linux引导代码。
剩余的Flash可以用作文件系统。
Linux的内核可以通过引导代码从Flash复制到RAM,或者还有一个选择,内核可以被存储在Flash的一个独立部分,并且直接从那里执行。
另外对于一些系统来说还有一个有趣的选择,那就是将一个便宜的CD-ROM包含在内。
这比FlashMemory便宜,而且通过交换CD-ROM支持简单的升级。
有了这个,Linux只要从CD-ROM上引导,并且象从硬盘上一样从CD-ROM上获得所有的程序。
最后,对于联网的嵌入式系统来说,Linux支持NFS(NetworkFileSystem)。
这为实现联网系统的许多增值功能打开了大门。
第一,它允许通过网络上
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一篇 关于 嵌入式 本科 论文