嵌入式开发所用到的 *** 作系统有几种

嵌入式开发所用到的 *** 作系统有几种,第1张

嵌入式 *** 作系统(EmbeddedOperatingSystem,简称:EOS)是指用于嵌入式系统的 *** 作系统。嵌入式 *** 作系统是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式 *** 作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前在嵌入式领域广泛使用的 *** 作系统有:嵌入式Linux、WindowsEmbedded、VxWorks等,以及应用在智能手机和平板电脑的Android、iOS等。

可以大体分为两类,一个是实时 *** 作系统,一个为多任务系统

这两者都十分总要,实时 *** 作系统适合做工业控制,多任务系统适合开发复杂的应用

VxWorks *** 作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时 *** 作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时 *** 作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、d道制导、飞机导航等。在美国的F-16、FA-18战斗机、B-2隐形轰炸机和爱国者导d上,甚至连1997年4月在火星表面登陆的火星探测器、2008年5月登陆的凤凰号,和2012年8月登陆的好奇号也都使用到了VxWorks上

linux内核,是开源 *** 作系统,andriod就是基于linux内核开发出来的

上面的都是实时系统,软实时 *** 作系统指的是 *** 作系统只能保证在限定的时间内执行最高优先级的用户代码,但用户软件是否能及时完成 *** 作, *** 作系统不管!硬实时嘛, *** 作系统一直负责到 *** 作完成,世界上第一个硬实时 *** 作系统现在还在研制中。所以,天知道什么时候能有真正的硬实时系统。

Tornado之TrueFFS编程者指南(一)

seasoblue

按:这篇文章主要根据tornado20 for Arm的在线帮助写成,前面大部分是翻译过来的,后面将详细介绍MTD驱动的编写,并会给出实际的例子。TrueFFS对于作嵌入式系统来说非常有用,我希望这儿的每一个开发者都能掌握它。我对TrueFFS的研究还很浅薄,所以如果有信口开河的地方还请大方之家斧正。如果能对大家有所帮助,也就无枉此笔了。

一. 概述

1.简介

Tornado的TrueFFS是和vxworks兼容的一种M-Systems Flite实现方式,版本为20。它为种类繁多的flash存储设备提供了统一的块设备接口,并且具有可重入、线程安全的特点,支持大多数流行的CPU构架。

有了Tornado的TrueFFS,应用程序对flash存储设备的读写就好象它们对拥有MS-DOS文件系统的磁碟设备的 *** 作一样。这样TrueFFS就屏蔽了下层存储介质的差异,为开发者提供了统一的接口方式。然而,当你设计一个嵌入式系统的时候,了解flash存储器和磁碟设备的不同之处还是很重要的。尽管flash存储器不可能适用于所有的嵌入式系统,但由于flash存储器具有体积小,耗电省,非易失存储的特性,在许多的环境下尤其在移动设备和手持设备领域里它成为了理想的选择。

Flash存储器在拥有众多优点的同时也有一些自身的缺点。首先,它在写之前必须要进行擦除 *** 作,而且不能一个字节一个字节的擦,它只能以一个扇区、一个块或者整片的方式进行擦 *** 作。它的写和擦 *** 作都需要较复杂的步骤才能完成,这就降低了它的易使用性。另外,Flash存储器最大的一个缺点就是寿命有限,可擦除的次数因不同厂商而有所不同,一般都在1万到10万次左右。

一个运行在flash存储器上性能良好的块设备应该能针对可移动的媒体(如flash卡)处理各种复杂的情况。比如,完全有这样的可能:当驱动程序正在进行写 *** 作时用户却把flash卡抽出来了。这有时会造成灾难性的后果。幸运的是,TrueFFS在设计时已经仔细考虑了flash存储器的各种特性,以及掉电和用户由于不耐烦或好奇的原因而猛地拔出flash卡想看看发生了什么事的情况。

2.TrueFFS和块数据

Flash存储器不能无限次重复使用。它的每个扇区的擦除次数虽然很大,但却有限。因此,随着使用次数的加长,它最终会变成只读状态。所以我们应该尽最大可能延长它的寿命。行之有效的方就是平衡使用所有的存储单元,而不让某一单元过度使用。这种技术被称之为wear leveling。TrueFFS使用一种基于一张动态维护表的block-to-flash(块对应于flash)传输系统来实现wear leveling技术。当块数据被修改、移动,或碎片回收后,这张维护表会自动调整。

就象块设备驱动需要的那样,TrueFFS把flash存储空间映射到一个特殊的连续存储块队列中,以便文件系统可以对它进行数据的读写。这些块被从0开始连续编号。

从一个数据块中读取数据的 *** 作非常直接。文件系统请求指定块的内容,TrueFFS响应后将块号传送到flash存储匹配器(flash memory coordinates)中,找到之上的数据,然后把数据返回给文件系统。向块写数据也一样的直接,只要这个块还没有被写过。TrueFFS要作的就是传送块号到flash存储匹配器(flash memorycoordinates)中,并写数据到所指定的地址。

但如果写请求试图修改一个已经写过了的块设备内容,情况就复杂了。TrueFFS先是找到flash空间中一个已经可写的区域,然后把修改后的块数据写到那里。当数据安全地写完后,TrueFFS更新它的block-to-flash映射结构,以使块现在映射的区域为放置修改后数据的区域。这就保证了一定程度上的wear leveling。然而,如果存储在flash上的一些数据本质上是静态的,只有在修改时wear leveling才会产生一种被称为静态文件锁定的问题。

存储这些静态数据的区域根本不会被循使用,这将降低flash期望的生命值。TrueFFS通过强制转移静态区域的方成功克服了静态文件锁定的问题。因为block-to-flash映射表是动态的,TrueFFS能够以对文件系统不可见的方式管理这些wear-leveling转移。由于绝对强制wear-leveling方式会对性能产生一些负面的影响,所以TrueFFS采取了一种非绝对wear-leveling的算。它保证了所有空间的使用近似平等。

最后,TrueFFS的wear-leveling算更增强了突破被称为死锁这种模式的性能。

所谓死锁就是一些简单的wear-leveling算只是两个或多个单元长时间循环而忽略了其余的单元的现象。

3.碎片回收

块数据的修改使得flash的一些块区域不再包含合的数据,并且这些区域在擦除之前变得不可写。如果没有机制来回收这些区域,flash很快就会变成只读的状态了。不幸的是由于这些块不可以单独擦除,回收这些块就有些复杂了。单次擦除被限制在一个叫作擦除单元(erase unit)的较大范围内。如对于Intel的flash器件来说是64k字节。

TrueFFS使用一种被称为碎片回收(garbage collection)的机制来回收那些不再包含有效数据的块。该机制从一个预擦除单元(source erase unit)内拷贝所有的有效数据块到另一个新的被称为转移单元(transferunit)的擦除单元。TrueFFS然后更新block-to-flash映射表再擦除这个废旧的预擦除单元。

这样,原来的块出现在外界时仍然包含了原来的数据,虽然这些数据现在已经存放在flash存储器的其它空间。

怎样触发碎片回收功能呢?如果太频繁,则会降低wear-leveling的效果,并影响整个flash的性能。因此在TrueFFS内部,碎片回收只是在块分配算需要的时候才会触发。块分配算尽量保持在同一个擦除单元(erase unit)内有一段连续的自块池。如果块池变得太小,块分配算就会马上采用碎片回收算进行碎片回收。然后碎片回收算就会找到并回收和下面标准最吻合的擦除单元(erase unit):

l 废块最多

l 擦除周期数据最少

l 最静态的区域

另外,碎片回收算也会采用随机选择的处理方。这样可以保证回收处理能够均匀地覆盖整修存储空间,而不会由于应用程序使用数据的方式而偏差。

VxWorks用的公司相对不是太多,并且如果学会Linux,再学VxWorks并不困难,反过来则有一定困难。VxWorks比Linux的优点是实时性好,在开发方面调试工具之类的比Linux好,但是国内你要找到一个很懂VxWorks的人不多,但懂Linux的就很多。入门的话,学好C语言,试着移植一些驱动到VxWorks里即可,VxWorks兼容POSIX规范,我想你开发的难度应该不是特别大。利益相关:用了5年的VxWorks,也开发了5年的VxWorks的代码(从67至今)。用VxWorks久的人都会感觉它太小了,但它开发实在是太方便了,有调试器,有完整开发套件。在有开发环境的地方,几分钟就能建立一个工程,编译一个image,甚至可以放到PC机上跑。不说实时性之类的技术问题,单说入门,就很快的,比重新编译Linux内核之类的容易的多,我自己实验过裁剪Linux内核,真是头大的事情。VxWorks跨平台做的很好,自带的BSP在发布的时候都经过比较严格的测试,比起Linux来说,各种莫名其妙的硬件错误很难遇到。有人讲到VxWorks像Unix,我觉得不像,至少从我看到的代码上看,几乎没有Unix的东西,只不过是兼容部分POSIX API而已。在VxWorks上做二次开发就需要了解它的具体技术细节了,相对而言,我觉得跟别的系统的驱动差不多,无非就是信号量、内存、进程这些东西。如果你喜欢,用标准C的库也可以实现大部分功能。VxWorks的缺点也很多:文档太少,做这个的人不多,授权太贵。网上能找到的盗版都是55的,但官方都出到69了,说实话我真不喜欢55的那一套东西,太过时了,但要真找一套69的又有困难,授权费太贵。而且55不稳定、功能少(版权问题,我不敢放69的截图,但就组件的个数方面就差别太大了)。对于Linux来说,通常是裁剪很费劲,编译一堆问题,但找相关的文档也容易,如果英文好,去混混社区,总能找到答案,前期入门很难,熟悉以后会容易。而用VxWorks,后期的开发遇到困难就很难找到能帮上的人。

1、FreeRTOS是一个迷你的实时 *** 作系统内核。最大的特点是“小”,占用资源小,支持8位、16位、32位MCU平台。FreeRTOS提供了 *** 作系统基本的功能和组件,包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等。此外FreeRTOS还有一个最大的优势就是就是免费。不足之处,一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方面,FreeRTOS只是一个 *** 作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统,不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。

2、VxWorks不仅是一种嵌入式实时 *** 作系统,又是可以运行的最小基本程序。其内部有BSP(BoardSupportPackage,板级支持包),便于进行驱动程序的编写。此外,VxWorks具有强实时性、微内核设计、可裁剪性、可移植性和可靠性等特点,能较好地满足嵌入式开发的需求。缺点就是昂贵的价格让开发者望而却步。

以上就是关于嵌入式开发所用到的 *** 作系统有几种全部的内容,包括:嵌入式开发所用到的 *** 作系统有几种、vxworks,uc/os-ii,rt-linux2.0,qnx6 都是硬实时 *** 作系统吗、请教如何在vxworks上构建文件系统等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10168329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存