用uCLinux开发嵌入式网关.doc

上传人:文库蛋蛋多 文档编号:2393055 上传时间:2023-02-17 格式:DOC 页数:54 大小:107KB
返回 下载 相关 举报
用uCLinux开发嵌入式网关.doc_第1页
第1页 / 共54页
用uCLinux开发嵌入式网关.doc_第2页
第2页 / 共54页
用uCLinux开发嵌入式网关.doc_第3页
第3页 / 共54页
用uCLinux开发嵌入式网关.doc_第4页
第4页 / 共54页
用uCLinux开发嵌入式网关.doc_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《用uCLinux开发嵌入式网关.doc》由会员分享,可在线阅读,更多相关《用uCLinux开发嵌入式网关.doc(54页珍藏版)》请在三一办公上搜索。

1、第一章 引言 1.1 嵌入式设备互联网络化趋势 1.1.1 从封闭式网络到开放式网络 网络被称为第二次信息技术革命。在巨型机统治的时代,绝大多数情况,一个企业的所有信息数据都储存在一个大型计算机中。处理能力和存储量的需求,产生了多个大型机协同工作,相互通讯方式,这是网络的发端。为了使各大型机进行通讯,计算机制造商制定了各自的通讯规范和通讯协议,并且这些不同的规范和协议相互不兼容。这种方式被带入到微型计算机领域。与此同时,有人预见到在不同厂商的不同计算机上必须有一个信息共享的方式。随着这种要求的增多,“开放式网络”的概念被提出。但是由于每个计算机制造商都声称各自拥有最佳的解决方案,同时排斥其它厂

2、商的解决方案,开放式网络一直停留在字面的阶段。这种情况一直延续到PC时代,从一定程度上说,PC是局域网(LAN,Local Area Network)的直接推动者。 局域网很好的解决了多台计算机之间共享数据和通信的问题,但同时又产生了另外的兼容性问题。不同计算机厂商和不同网络设备提供商对局域网络的形式和拓卜结构有不同的阐述,同时制定了不同的实现标准。当人们再次呼唤开放式网络时,同样的事情发生了,每一个提供商都宣称自己的解决方案是最好的,但许诺将会支持一般的通用解决方案。由此,一个标准制定委员会被成立,在耗费了很多的时间和人力之后,这个所谓的通用标准都没有真正出现。 1.1.2 互联网络的现状

3、市场的选择,最终导致了开放式网络时代的到来。支持开放式网络的企业成功了,而另一些始终守着自有网络协议的企业则被撇在了一边。 今天TCP/IP协议和以太网就是一种开发式网络。所有主要的操作系统,主要的计算机制造商(大型机,微型机及PC)都支持以太网和TCP/IP协议。在这个开放式网络的基础上,产生了不可计数的应用,从大型企业的网络解决方案到电脑游戏。既然已经存在一个通用的标准,制造商就可以发展出一种基于网络的嵌入式解决方案,并且可以肯定它将有很大的应用面。 回顾过去,我们可以看到这样一个发展过程。计算机从一个相对昂贵,不易使用,缺乏通信能力的设备变为大量普及、易于使用操作、可进行低成本通讯的PC

4、。在这个过程中,一个明显的趋势,一些更为廉价的设备将变得更接近用户,并且将具有更好的互操作性。根据这种趋势,一些更低成本的处理器将逐渐走向普通用户,同时由于网络的影响,这些低成本的微处理器将会出现在网络中,从而形成“嵌入式网络”。 1.1.3 开放式网络的优点 开放式网络可以给企业带来很多好处。方便的数据信息获取带来迅速高效的决策。从最低端的设备到超级计算机,企业有一个整体控制。开放式网络的可扩展性使得企业可以保持已有的技术投资,相对于特定的网络标准,假如企业采用一种新的解决方案时,已有网络系统将被推翻,从这一点上说,开放式网络为企业运营降低了成本。 1.1.4 嵌入式设备网络化的动机 嵌入式

5、设备网络化是市场的需要。从最终用户的角度看,他们希望所有设备互联工作,这种互联越广泛越好,因为这意味着他们工作生活的自由度提高了。当今社会是信息化的社会,快速获取最新信息是高效决策的关键。企业的管理者希望他们的触角能够到达企业的任何位置,从而可以快速的进行资源配置,对生产过程进行实时监控,并能够随时修正(假如需要的话),重新配置资源。现代企业具有多大的灵活性很大程度上决定了它能否在竞争中胜出。 从嵌入式设备制造者的角度来看,他们通常更关心成本因素。嵌入式设备的网络化使得他们在进行售后服务时有了一个根本性的变革:通过因特网远程控制检测设备,使得进行远程技术支持成为可能(首要一点是被检测设备必须能

6、够进行远程访问)。这种做法提高了设备维护的方便性,同时降低了维护的成本。 1.1.5 结论 回顾整个网络的发展历程,从巨型机时代,网络化进程开始到PC时代开放式网络的出现,一个必然的趋势是嵌入式设备的网络化。 在当前的数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式系统已经广泛的渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术、娱乐业以及人们的日常生活等方方面面中。随着国内外嵌入式产品如车载电脑、机顶盒等等的进一步开发和推广,嵌入式技术越来越和人们的生活紧密结合。在PC时代,可能有人从来没有接触过计算机;但是在Post-PC时代,他就不可能会接触不到嵌入式系统,因

7、为嵌入式系统可能存在于生活的方方面面中,从家里的洗衣机、电冰箱,到作为交通工具的自行车、小汽车,到办公室里的远程会议系统等等,都属于可以使用嵌入式技术开发和改造的产品。因此嵌入式设备的网络化,是人们把控制触角从工作生产向生活延伸的一个必然步骤。 1.2 嵌入式设备网络化的多种解决方案 1.2.1 嵌入式设备网络化需要关心的几个问题 一. 网络化所需的成本 成本是一个在任何时候都很敏感的话题,嵌入式设备互联网络化必然需要一定的投入。昂贵的解决方案,即使非常完善也将无人问津。 二. 网络化如何解决现有的多个标准 PC机在网络化时遇到多个标准的问题,在嵌入式设备中同样存在。在嵌入式设备网络走向开放式

8、网络的时候,同样要考虑已有的多个标准。如果推翻现有的网络重新构建新网络,必然造成网络改造时成本的增加,这时所有用户都不愿看到的。假如保持现有网络框架,则必须寻找一种方法使得这些特有嵌入式设备网络能够相互通讯,同时还能够同已有的开放网络(以太网、TCP/IP)通讯。 三. 怎样实现人机交互 嵌入式设备的网络化,可能使得原有嵌入式网络的拓卜结构发生变化,同时也改变了已有的控制使用设备的方式。用户追求最方便的使用方式,最友好的人机交互界面。嵌入式设备不同于一般的PC机,通常不带有显示设备,必须找寻一种在开放式网络中能够进入嵌入式设备网的良好方法。 1.2.2 网络化的多种解决方案 嵌入式网络化有多种

9、解决方案,每一种解决方案都有其优缺点。我们将针对上述网络化所需要考虑的问题进行分析,以提出一个好的解决方案。 解决方案一:直接把设备挂到互联网络上 这种一种嵌入式设备直接向开放式网络开放的解决方案,每一个设备都带有以太网口,并且在嵌入式系统上实现TCP/IP协议栈,因此每一个嵌入式设备都具有直接联入互联网络的功能。这种方案把嵌入式设备提升到与PC对等的地位,从而从互联网络上访问嵌入式设备与访问一个PC节点没有区别,使得访问控制具有相当的灵活性。 但是其缺点也是明显的。从成本角度讲,这种方案几乎完全推翻了原有的嵌入式设备网络,所有嵌入式设备重新设计,所有的嵌入式网络重新建立。仅是这一项工作所需的

10、成本就相当昂贵,另外还需考虑由于在每一个设备中实现以太网和TCP/IP栈,这导致器件成本的升高,在成本敏感的今天,这种方案很难被用户接受。 解决方案二:使用传统PC作为中间转发设备 这是一种较为传统的解决方案,这种方案保留原有的嵌入式设备网络,嵌入式设备网络挂接在PC机的串口或并口等外围接口上。当通讯发生时,嵌入网络向PC机发送信息,由PC机对这些信息进行处理,进行信息的转发。同时由互联网络传来的数据也可以由PC转发给嵌入式网络,而在每一个嵌入式网络内部则可以使用原有的通讯协议通讯。相对于第一种完全以太网化的解决方案,这种方案更具有实用性,它在一定程度上削减了成本,使其达到用户可以接受的程度。

11、 这种解决方案同样具有的缺点。由于PC的局限性,使得网络扩展有一定的困难(PC通常都置于机房中),PC的体积太大,需要一定的工作环境,这一点影响嵌入式网络拓卜的灵活性。另外,仅使用PC作为转发设备是一种浪费,PC的处理能力没能充分的发挥。 解决方案三:直接使用嵌入式设备代替PC作为转发网关(我们设想的解决方案) 这种解决方案实际上是综合了上述两种解决方案而提出的。由于保有了现有网络,所以这种方案具有方案二所具有的优点。同时由于嵌入式网关体积小,使得铺设网络更加灵活。 这种方案增加的困难在于,它需要开发一种专有的廉价设备用作嵌入式网关,但这种困难在于网关的开放者。对于用户使用而言,不存在增加的任

12、何困难。 1.2.3 结论 要实现嵌入式设备网络同现有的开发式网络互联,网络改造的成本和不同标准之间的协调是主要关心的问题。一个好的解决方案,必须兼顾这些问题。同时我们注意到一些解决方案,有些解决方案太过于激进(方案一),导致成本昂贵,而有些解决方案又缺乏灵活性,我们将作出一些工作,试图解决这些方案中的一些问题。 1.3 小结 本章主要回顾了计算机网络的发展历程,从而得出嵌入式设备联入互联网络是网络革命的延续和必然。在此基础上,我们分析了一些嵌入式设备网络化的解决方案的优缺点,并设想一种好的解决方案。本文将以此为基础,具体说明在实现这种方案时我们作为开发人员所需要做的一些工作。 第二章 网关系

13、统方案分析 2.1 网关系统基本特征 2.1.1 网关系统路径结构 使用网关搭建一种嵌入式的框架结构,从而为即使是最小的控制器提供上网功能。网关将作为嵌入式设备网络与以太网络互联的窗口,在嵌入式设备网络通以太网络通讯时将作为“代理机构”,代表嵌入式网络或以太网络发言。在网关的两端分别是轻量级的网络(RS232,RS485,Modem,IR,RF)和重量级网络(企业内部网络,互联网络)。相对于一般的嵌入式控制器,网关必须具有更多的处理能力,具有更多的资源(内存,存储空间等),能够应付两种设备网络之间的通讯。 TCP/IP 轻量级 网络 网络 图一 网关系统连接方式 2.1.2 网关系统必须具有的

14、功能 一个网关使得8或16位的嵌入式设备可以访问英特网或企业网上的节点。作为网关的设备必须具有如下的一些功能: l 防火墙:因为嵌入式设备相对简单,在接入以太网络后,嵌入式设备本身无法保证自己的网络安全性。网关设备必须提供一系列恰当的认证加密技术,采取一定的安全策略,保护防火墙后的嵌入式设备,以保护其不受到来自英特网的攻击。 l 协议转换:嵌入式设备网络本身可能采用多种协议,多种硬件接口,为了完成互联,网关必须带有各种嵌入式设备的硬件接口,同时在软件层必须能够完成各种协议同TCP/IP协议的转换。 l 设备状态监视:这个是一个可选的功能,针对特定的应用需要定制这一功能。需要查看得状态包括,设备

15、是否始终保持连接,流量是多少等等。 l 事务处理:如果有一特定的事件发生了,必须启动一定的程序处理这一事件。向以太网一方发送信息,报告特定的事件发生了。 2.1.3 设计网关需要注意的问题 对于网关本身需要考虑如下问题: l 处理器:市场上有上千种各种各样的嵌入式微处理器。每一种都设计为低成本,在功能上各有偏重。没有任何一种处理器能够满足所有的嵌入式系统需求。通常情况下,嵌入式设备对成本比较敏感,因此选择处理器时针对一定的功能要求和成本折中考虑。对于网关所需的处理器,由于要管理多个轻量级网络,必须应付网络之间的传输要求,所以处理能力比一般嵌入式设备要求高些。 l 轻量级网络:嵌入式设备网络在实

16、现时采用不同的标准,由于我们保持原有的网络结构,所以网关系统必须支持多种嵌入式设备网络标准。这些不同的网络标准通常具有不同的硬件实现,同嵌入式处理器一样,没有一个通用的硬件设备能够适用于所有的这些标准。这样网关设备上必须带有多种硬件接口,从而支持多种嵌入式网络标准。 l 灵活性:由网关所组成的网络结构必须具有灵活性,可扩展性,能够应用于多种应用,包括多种已有的设备和网络标准。对于以太网用户而言,嵌入式设备网应该是透明的,用户访问嵌入式设备网络中的节点,就同他们访问以太网中的节点一样。当嵌入式设备网扩展时,应该不影响以太网络使用者的通用。 l 完善的用户接口:对于网关系统可选的用户接口可以有很多

17、种的类型,当然这些可能的方案都基于TCP/IP协议。一个最基本的方法是使用socket套接字,在网关上设计一个服务程序,网关启动后服务同时启动,他等待着从嵌入式设备端或以太网络端的请求信息,同时作出响应。这种方式,用户控制的机器上必须有客户端程序,与服务端程序建立连接通讯。另一种方式是使用web server作为网关上的服务程序,客户机采用浏览器作为客户程序。这种方式具有通用性,不需要用户机器安装另外的客户程序,但是对web server得写一些cgi程序,用于响应用户的请求。同时对嵌入式端的响应可能有些问题。所以这种方法应该这对控制方案相对简单的网络。 2.1.4 结论 网关系统本身并不直接

18、参与嵌入式网络的具体工作,它的主要任务是把各种网络连接在一起。从而提供一种通讯的平台,网关设计最根本的目标是完成嵌入式设备网络到以太网络的扩展。由于其针对多种嵌入式设备网络,所以必须具有一定的通用性和可扩展性。因为针对,具体的应用环境,还必须考虑通讯实现的简便性,于是我们必须考虑挑选一种嵌入式操作系统。 2.2 挑选一种嵌入式操作系统 2.2.1 嵌入式操作系统是解决开发困难的一种途径 一. 传统嵌入式开发的特征 传统的嵌入式开发所针对的是一些相对简单的应用。通常只有一个简单(或固定的几个)的应用运行,实现的任务简单,针对性强(针对具体应用)。所以不需要复杂的任务管理、调度机制。从工程设计够用

19、就行的角度看,使用简单的方法烧写Rom,系统启动后直接执行该程序就可以了,根本不需要操作系统参与,开发人员能够了解所有应用启动,资源管理细节,并能够管理它们。 传统嵌入式系统开发,开放人员需要兼顾很多方面内容。其基本开发流程如下: 二. 嵌入式开发所面临的困难 社会的发展对嵌入式开发提出更高的要求。这些要求包括更复杂的任务处理(多任务),更为高效的开发方式和对实时性的要求。这些要求来自于这样的一些方面的需要: l 一些必须使用嵌入式设备的环境发生变化 原先这些嵌入式设备的使用环境可能只需要简单的处理就能够进行了,但是社会的发展使得这种环境发生了变化,复杂多任务处理在一定的场合成为一种必须。 l

20、 针对PC小型化的愿望 在过去的做法中,很多工作由PC完成(较复杂的任务)。PC具有很强的处理能力,这些任务并不能够完全利用PC的处理能力。另外PC的体积在一定情况下造成一些不便。这些情况使得人们希望使用嵌入式设备代替PC处理这些任务(假如嵌入式设备有足够的处理能力)。 三. 选择嵌入式操作系统是一种折中方案 操作系统的种类很多,通常具有这样一些功能:内存管理、进程调度、文件系统、进程通讯等功能,这些功能足以支撑我们所需要实现的复杂任务。因此选择一种操作系统实现复杂多任务处理是一种可能的选择。但是在嵌入式设备中采用操作系统将会造成系统成本的升高,一般的操作系统不能适应嵌入式设备开发的要求。折中

21、这些考虑,选择一种合适的嵌入式操作系统既能够满足功能要求同时又兼顾成本。 2.2.2 评估嵌入式操作系统的一些指标 对于一种嵌入式操作系统通常有这样一些评估选择标准:实用性、需要消耗的资源数(包括内存,flash memory等)、支持软件的丰富程度、可靠性以及其执行性能等。 一. 对处理器的支持 所选用的操作系统是否支持我们将采用的微处理器,这是一个决定性的因素。因为对于一个嵌入式设备,如果从头为一种处理器开发一种新的操作系统将是相当耗时的工作,通常市场不允许这样的时间消耗。能够得到一种已经成熟的或只要经过很少的改动就可以运行于我们的处理器上的操作系统将成为首选。 二. 所需资源的多少 资源

22、需求量是另一个被关注的问题。任何操作系统都要消耗一定的资源,这里的资源主要是指内存。有一些操作系统本身消耗很多的资源,在嵌入式设备领域,由于系统对于资源的敏感性(主要是成本的考虑,还有一定体积的限制),这种类型的操作系统将不适合作为嵌入式操作系统。 三. 软件资源丰富程度 嵌入式操作系统的选择很多时候并不因为它具有多少优良的性能,而在于它具有多少可用的软件资源。很多用户使用windows操作系统作为他们的桌面系统除了其易用性之外,很大程度是因为它具有很多处理器和软件的支持。嵌入式操作系统的用户所需要的除了操作系统本身还需要很多软件支持。这些软件包括协议栈,设备驱动,以及一些应用程序。开发者希望

23、在使用这些软件时,不需要作出移植,或是只需要很少的改动就可以适用于新的的平台。 四. 操作系统的功能 一个嵌入式操作系统本身具有什么样的功能支持是需要考虑的另一个方面。在选择操作系统时开发者通常希望他们所要求的功能已经在操作系统有了支持,这样他们在用户层就只需要做很少的工作,通常这种情况下开发者对于程序的稳定性将会更有信心。一个典型的例子,如果我们需要在我们的系统上实现以太网的支持,假如我们所选择的操作系统不带有TCP/IP栈,那么我们必需要自己去实现协议栈,这将是相当耗时的过程,而且对于自己实现的协议栈由于没有经过严格的测试,我们无法保证程序稳定工作。 五. 操作系统执行性能和可靠性 此外操

24、作系统的性能和可靠性也是需要考虑的两个方面。因为操作系统的可靠性通常无法在用户程序或者函数库层次得到增强。操作系统的稳定性在操作系统设计之初,就已经由系统的设计构想和编码质量决定了。我们不能保证一个稳定可靠的程序在一个不稳定的操作系统上能够稳定的运行。甚至可能发生这样一种情况,开发者在遇到的问题的时候将无法确定是程序的问题还是操作系统的问题,这是所有开发都很不希望遇到的情况。很多嵌入式系统可靠性要求要比一般桌面系统要高得多。 执行的效率性能是另一个评价基准。这通常直接影响了操作系统的处理能力(主要是数据吞吐能力)。另外一个很难评估的指标是这个操作系统的实时性到底如何。更难的是我们不知到要实现的

25、系统对实时性能的要求有多高。由于错误的选择了操作系统,从而导致系统根本无法运行,这种情况时有发生。 2.2.3 Linux成为嵌入式操作系统的可能性 对于以上的指标有了一定的认识后,我们可以考虑Linux是否有可能成为嵌入式操作系统。Linux已经成为在Internet网络服务器领域很受欢迎的操作系统。另外一点,Linux是一种开放源码的操作系统,而Linux下的软件几乎都遵循GPL版权协议,这样几乎所有的源代码都可以免费获得并免费使用。Linux已经被移植到了很多平台,由成千上万的爱好者开发的应用软件、协议栈以及丰富的设备驱动程序(我们又回到了人人都可以为自己特有设备编写驱动的时代)。更重要

26、的是这些驱动很多都以Open Source的形式发布出来,使得大家都从中受益。另一个早已被公认的事实是,Linux在服务器,网络处理能力,文件系统管理方面表现非常的出色。由此我们不需要怀疑Linux系统的可靠性。 通常嵌入式设备的开发者对于成本都相当敏感,Linux的免费获得源码并免费使用是一种很大的吸引力。 Linux的编程接口是UNIX形式的,这使得原先为UNIX写的众多软件只要很少的改动就甚至只需要重新编译一次就可以运行在Linux平台上。在过去的几十年中,人们为各种UNIX系统编写了大量的软件,而这些软件极大的丰富Linux平台下的软件应用。这也意味着一个UNIX程序员已经具有了在Li

27、nux系统下从事开发的经验。 2.2.4 标准Linux系统的一些不足 尽管有很好的理由选择Linux系统作为嵌入式设备的操作系统(这些理由在上文已经有过论述),但在Linux作为嵌入式操作系统时还有很多的困难。这些困难一部分来自于Linux操作系统本身,另一部分来自于Linux所遵循的版权协议。对于版权协议的问题本文不做讨论,下面将讨论Linux本身在设计时的问题,从而引出我们所真正要讨论的操作系统uClinux。 1. 占用空间的多少 通常情况下,Linux操作系统占用很多的空间,以致于很不适合于作为目前的嵌入式操作系统。一般的Linux系统(包括不同Linux系统销售商制作的),都需要上

28、百兆的空间(除了操作系统本身,还需要很多的系统命令,用于系统的维护管理)。一个典型的Linux内核在未压缩的情况下通常要占用1.5M内存,运行时需要超过4M的内存空间(这里计算是假定系统支持网络,文件系统)。如果考虑到很多嵌入式设备不带有磁盘,为了使用文件系统而使用ram盘(指使用ram盘来虚拟文件系统),将使得系统使用的内存进一步加大。 2. 软件开发的问题 绝大多数的Linux软件开发都是native方式进行的,即本机开发、调试,本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机运行开发工具和调试设备。通常的嵌入式系统的软件开发采用一种

29、交叉编译调试的方式。 交叉编译调试环境建立在宿主机上,开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,然后把可执行文件下载到目标机上运行。调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。宿主机和目标机可以使用不同的处理器,GNU编译器提供这样的功能,在编译编译器时可以选择开发所需的宿主机和目标机从而建立开发环境,但是GNU并不能提供所有的这些支持(由于不同宿主机和目标机有很多种的组合),同时对于各种支持也可能存在一些不完善的地方。 3. 无终端和无盘操作 Linux原本被设计为桌面型的操作系统,并且遵循UNIX的模式

30、。这种模式的显著特征:一个字符方式的操作界面,这个界面作为人机交互的界面,用于启动操作系统,向操作系统提交命令,监视操作系统的运行情况。嵌入式系统很少有这样的计算机操作员,所以根本不需要这样的操作界面。Linux同时还使用文件系统用于文件定位,一个带有文件系统的磁盘设备是Linux执行环境的一部分。 Linux系统成为无终端的系统并不太难,因为控制台支持不同的终端包括NULL终端。同时也可以不需要在终端上的操作,假如在操作系统启动时不经过login阶段而直接启动需要启动的用户程序,这样操作系统在启动后就可以进入需要的工作状态。对于系统的监视控制可以在远程登录进行。 无盘方式运行有很多种解决方式

31、。可以使用带有ide口的flash设备,这样对flash的访问就同访问ide口的硬盘一样。也可以在flash上实现一种独特的flash文件系统,同时使得操作系统支持这种文件系统。对于数据存储的问题,因为flash的分扇区擦写还不成熟,可以使用一部分RAM来作为文件系统使用。 4. 对各种嵌入式处理器的支持 Linux支持最好的是x86系列的芯片,同时x86的芯片也广泛的用于各种的嵌入式设备,但有些时候x86的芯片并不是最好的选择,在一些的功耗的领域arm及SH处理器都很受欢迎。在另一些场合使用motorlora的68k系列的处理器,因为这种类型的处理器除了带有68k的核心处理器外,通常集成了很

32、多外设的控制芯片,像以太网芯片、usb接口芯片等等,这使得芯片的成本降低,稳定性变高。对于嵌入式处理器市场选择仍然是多样化的。 前面已经谈到的Linux一个优势是它已经被移植到很多的处理器平台上,但是很遗憾的说,这还不够。市场上的处理器太多,即便是在一个系统处理器中,每一种特别的芯片也会有或多或少的差别,这样导致虽然很可能得到对一个系列处理器中某一种芯片支持的Linux移植版本,但是仍然有一些工作要做,以便使得特定的处理器得到支持。同时一些对x86系列编写的第三方应用可能就无法在这种特定的处理器上得到应用,也就是说必须做一定的工作对这种第三方应用移植。不论如何,由于也有的优势,这些工作的工作量

33、要比从头从裸机开发并自己写应用要容易轻松的多。 5. 操作系统的实时要求 所谓实时系统,是指一个优先等级高的进程能够获得系统立即,没有延迟的服务。它不需要等候任何进程,而且在它夺取到cpu的使用权后,它可以一直执行到工作结束或是有更高等级的进程出现为止。在borko furht、David Gluch等著的Real Time UNIX Systems Design and Application Guide一书里为实时系统下了一个十分简明的定义,“实时系统是指一个系统在执行时能够对外部、异步(asynchronous)发生的事务,于一定的时间采取响应”。为了满足这样的要求,高效的中断处理能力与

34、高速的输入输出能力是实时系统所必备的基本特征。 很多嵌入式设备都有实时的要求,这与该设备应用的领域有关,譬如在工控以及数据采集应用方面,系统的实时性要求就要相对的高一些。Linux本身并不是一种实时的操作系统,Linux的内核不是完全可抢占的。 Linux的调度时机主要有: l 进程状态转换的时刻:进程终止、进程睡眠 l 可运行队列中新增加一个进程时 l 当前进程的时间片用完时(current-count=0) l 进程从系统调用返回到用户态时 l 内核处理完中断后,进程返回到用户态时 我们可以看到,一旦一个进程陷入内核,其它进程都将无法执行,直到这个进程结束或进入睡眠或等待状态(当然这个进程

35、可以被硬件中断)。这意味着,最糟糕的情况,一个实时任务得到响应的时间将是内核中一段最长代码在其进入等待状态前的执行时间。而这段时间是不可预知的,如果再考虑到由于DMA设备所占用的时间及中断响应所占用的时间,这个时间延迟将是可怕的。因为Linux进入中断服务程序时将是不可中断的,中断服务程序的运行优先级比所有的用户程序都高。 6. 内存管理问题 Linux设计时所针对的处理器都是带有内存管理单元的(一些较高性能的处理器都带有内存管理单元),并且Linux系统充分利用了处理器的内存管理机制。但是很多的嵌入式处理器都不带有内存管理单元(由于应用对象的不同,MMU对于很多嵌入式设备没有必要),这样Li

36、nux就不能应用于这类处理器上。 2.2.5 结论 由嵌入式操作系统的评估指标,可以判别Linux系统在嵌入式应用中很有潜力,特别是针对我们的网关系统(由于良好的TCP/IP栈),同时由于Linux系统设计本身针对的不是嵌入式设备,所以在应用于嵌入式设备的时候,有一些不合适的因素(主要集中在资源消耗太大以及内存管理方面)。我们的希望是保持Linux系统优秀的一面,同时使之能够适应嵌入式设备。 2.3 小结 网关系统本身并不是一个新的概念,系统的基本结构与以太网上的网关系统也没有太大的区别。只不过在实现的功能上,以太网网关系统只是连接多个以太网络。而本文试图设计的网关系统是以太网络一种扩展设备,

37、根本作用是把嵌入式设备网络同现有的以太网络连接起来,但又在很大程度上保持原有嵌入式网络。 由于网关的这种基本要求,网关必须具有解析多种协议的能力,主要是各种嵌入式网络的各种协议和以太网TCP/IP协议。对于这种较为复杂的应用,传统嵌入式设计的方法(嵌入式设备上不需要操作系统)已经无法满足要求,必须寻求好的操作系统以应付多任务和复杂任务的处理。根据嵌入式系统的一些评估标准,我们寻找Linux系统作为我们的嵌入式操作系统,但是必须解决一定的问题(这些问题阻碍了Linux系统在嵌入式方向的应用)。 第三章 uClinux对嵌入式系统的解决方案 3.1 uClinux介绍 Linux是一种很受欢迎的操

38、作系统,它与UNIX系统兼容,开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Controller-Linux,字面上的理解就是“针对微控制领域而设计的Linux系统”。 3.2 uClinux小型化的做法 3.2.1 标准Linux可能采用的小型化方法 1. 重新编译内核 Linux内核采用模块化的设计,即很多功能块可以独立的加上或卸下,开发人员在设计内核时把这些内核模块作

39、为可选的选项,可以在编译系统内核时指定。因此一种较通用的做法是对Linux内核重新编译,在编译时仔细的选择嵌入式设备所需要的功能支持模块,同时删除不需要的功能。通过对内核的重新配置,可以使系统运行所需要的内核显著减小,从而缩减资源使用量。 2. 制作root文件系统映象 Linux系统在启动时必须加载根(root)文件系统,因此剪裁系统同时包括root-filesystem的剪裁。Linux系统继承了传统UNIX系统使用简单的工具模块组合完成特定的复杂任务作业的形式。因此Linux系统的发行版都带有很多各种工具,很多工具对于功能一定的嵌入式设备都是无用的,我们需要定制这些工具集以减少资源消耗,

40、甚至对已有所需工具进行重新剪裁编译。 这样的整个root文件系统可以制作成一个映象文件的格式,在内核启动时可以被加载到ram中作为系统启动后的根文件系统(具体的应用参见man initrd)。 3.2.2 uClinux采用的小型化方法 1uClinux的内核加载方式 通常的Linux系统内核在启动时被加载到内存中执行,uClinux的内核有两种可选的运行方式:可以在flash上直接运行,也可以加载到内存中运行。 Flash运行方式:把内核的可执行映象烧写到flash上,系统启动时从flash的某个地址开始逐句执行。这种方法实际上是很多嵌入式系统采用的方法(由前文所述,与传统嵌入式开发中,把单

41、个应用烧写到rom中执行的方式是一样的)。 内核加载方式:把内核的压缩文件存放在flash上,系统启动时读取压缩文件在内存里解压,然后开始执行,这种方式相对复杂一些,但是运行速度可能更快(ram的存取速率要比flash高)。同时这也是标准Linux系统采用的启动方式。使用这种方式,我们需要一个bootloader,Linux系统使用bootsect.S或lilo等工具加载内核(实际上是一个内核解压拷贝到指定内存空间的过程)。拷贝的时机与方式很灵活,这些内容将在讨论link description文件和head.S文件中叙述。 2uClinux的根(root)文件系统 uClinux系统采用ro

42、mfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。空间的节约来自于两个方面,首先内核支持romfs文件系统比支持ext2文件系统需要更少的代码,其次romfs文件系统相对简单,在建立文件系统超级块(superblock)需要更少的存储空间。Romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。 uClinux的root文件系统不同于标准Linux系统的root文件系统映象(当然我们在制作剪裁root文件系统时可以采用同标准Linux系统一样的方法)。uClinux系统采用一种块设备的方式存储rom

43、fs(flash memory是成块擦除的,参见源文件driver/block/blkmem.c)。当romfs文件系统生成时,同时生成了它的superblock,内核启动时根据这些superblock定位储存于romfs中的应用,并可以正确加载运行。 3uClinux的应用程序库 uClinux小型化的另一个做法是重写了应用程序库,相对于越来越大且越来越全的glibc库,uClibc对libc做了精简。 uClinux对用户程序采用静态连接的形式,这种做法会使应用程序变大,但是基于内存管理的问题,不得不这样做(这将在下文对uClinux内存管理展开分析时进行说明),同时这种做法也更接近于通常

44、嵌入式系统的做法。 3.3 uClinux的开发环境 3.3.1 GNU开发套件 Gnu开发套件作为通用的Linux开放套件,包括一系列的开发调试工具。主要组件: Gcc:编译器,可以做成交叉编译的形式,即在宿主机上开发编译目标上可运行的二进制文件。 Binutils:一些辅助工具,包括objdump(可以反编译二进制文件),as(汇编编译器),ld(连接器)等等。 Gdb:调试器,可使用多种交叉调试方式,gdb-bdm(背景调试工具),gdbserver(使用以太网络调试)。 3.3.2 uClinux的打印终端 通常情况下,uClinux的默认终端是串口,内核在启动时所有的信息都打印到串口

45、终端(使用printk函数打印),同时也可以通过串口终端与系统交互。 uClinux在启动时启动了telnetd(远程登录服务),操作者可以远程登录上系统,从而控制系统的运行。至于是否允许远程登录可以通过烧写romfs文件系统时由用户决定。 3.3.3 交叉编译调试工具 支持一种新的处理器,必须具备一些编译,汇编工具,使用这些工具可以形成可运行于这种处理器的二进制文件。对于内核使用的编译工具同应用程序使用的有所不同。在解释不同点之前,需要对gcc连接做一些说明(这两个文件的详细例子见附录): l .LD(LINK DESCRIPTION)文件(详见附录三) .ld文件是指出连接时内存映象格式的

46、文件,主要目的是指出程序在连接时各个段(.text、.data等)所处的内存位置。 l CRT0.S(详见附录三) 应用程序编译连接时需要的启动文件,主要是初始化应用程序栈。 l PIC(POSITION INDEPENDENCE CODE) 与位置无关的二进制格式文件,在程序段中必须包括reloc段,从而使的代码加载时可以进行重新定位。 内核编译连接时,使用.ld文件,形成可执行文件映象,所形成的代码段既可以使用间接寻址方式(即使用reloc段进行寻址),也可以使用绝对寻址方式(至于使用那种方式由gcc连接时的优化决定),这样可以给编译器更多的优化空间。因为内核可能使用绝对寻址,所以内核加载

47、到的内存地址空间必须与.ld文件中给定的内存空间布局完全相同。 应用程序的连接与内核连接方式不同。应用程序由内核加载(可执行文件加载器将在后面讨论),由于应用程序的.ld文件给出的内存空间与应用程序实际被加载的内存位置可能不同,这样在应用程序加载的过程中需要一个重新定位的过程,即对reloc段进行修正,使得程序进行间接寻址时不至于出错。(这个问题在i386等高级处理器上方法有所不同,本文将在后面进一步分析)。 由上述讨论,至少需要两套编译连接工具,一种用于内核的编译连接,一种用于应用程序的编译连接。在讨论过uClinux的内存管理后本文将给出整个系统的工作流程以及系统在flash和ram中的空

48、间分布。 3.3.4 可执行文件格式 可执行文件格式与操作系统的支持有关,加载可执行文件由操作系统进行,加载可执行文件的模块就称为可执行文件加载器。因此针对一种可执行文件,操作系统必须具有这种格式的加载器。在讨论uClinux采用的可执行文件格式时先对一些名词作一些说明: l COFF(common object file format) 一种通用的对象文件格式,这种文件格式被广泛支持,针对不同的提供商可能有细微的区别(譬如m68k-coff等)。 l ELF(excutive linked file) 一种为Linux系统所采用的通用文件格式,支持动态连接。 l FLAT elf格式有很大的文件头,flat文件对文件头和一些段信息做了简化。 uClinux系统使用flat可执行文件格式,gcc的编译器不能直接形成这种文件格式,但是可以形成coff或elf格式的可执行文件,这两种文件分别需要coff2flt或elf2flt工具进行格式转化,形成flat文件。 当用户执行一个应用时,内核的执行文件加载器将对flat文

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号