下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、linux嵌入式系统与硬件平台王铮、刘渝萍完整的电器设备一般要包括软件和硬件两大部分。本文试图从linux软件系统、硬件平台以及开发流程来探讨linux嵌入式系统与硬件平台的关系。一、linux嵌入式系统操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口。它存在的目的是为了管理所有硬件资源,并且为应用软件提供一个合适的操作环境。嵌入式系统由于硬件的先天限制,经常只具有极稀少的硬件资源,如频率较低的cpu、较少的内存、常不具有磁盘而用小容量的diskonchip或diskonmodule。在使用电池的系统中,它还要实现节省电池消耗、延
2、长电池使用时间的功能。linux 作为嵌入式操作系统是完全可行的,因为linux提供了完全嵌入功能的基本内核及所有用户界面。linux可以说是一个能提供从内存管理到网络服务等各种功能的连续统一体。linux作为嵌入式系统,是一个带有很多优势的新成员。它对许多cpu和硬件平台都是易移植的、稳定的和易于开发的。嵌入式linux系统需要三个基本元素:引导工具;linux微内核、内存管理、 程序管理;初始化进程。如果要它成为完整的操作系统且继续保持小型化,还得加上硬件驱动程序、硬件接口程序、应用程序组。谈操作系统就一定要说一说它的开发环境。linux是基于gnu的c编译器,作为gnu工具链的一部分,与
3、gdb源调试器一起工作。它提供了开发嵌入式linux系统的所有软件工具。以下是一个典型开发工具的使用流程:1. 写入或植入引导程序;2. 向串口打印字符串的编码;3. 将gdb目标码移植工作串口,这可与另一台运行gdb程序的linux主机系统对话;4.利用gdb让硬件和软件初始化码在linux内核启动时工作;5. linux内核启动,串口成为linux控制口并可用于后续开发;6.如果在你的目标硬件上运行了完整的linux内核,你可以调试你的应用进程。更详细的内容可参见网站。二、硬件平台研发人员在选择最好的硬件时,往往由于缺乏完整或精确的信息,而使之成为复杂且困难的工作。硬件成本经常是关键的议题
4、。当考虑成本时,我们需要考虑产品的整个成本,而不仅是cpu的成本。因为好的cpu一旦加上总线逻辑和延时电路,并使之与外设一起工作,那么这个硬件系统可能会变成非常昂贵的产品。如果你正在寻找嵌入式软件系统,那么应首先确定硬件平台,即确定微处理器cpu的型号。现在比较流行的硬件平台有intel公司的strong arm 系列、motorola公司的dragonball系列、nec公司的vr系列、hitachi公司sh3、sh4系列等等,它们都可选为硬件平台。在选定前先要确定所做系统的应用功能和所需速度,并且制定好外接设备和接口标准。这样可准确地定位所需要的硬件方案,得到性价比最高的系统。图1是以in
5、tel公司的strongarm为例来说明硬件平台。 图1 intel公司sa1110微处理器结构示意图三、linux嵌入式系统与硬件的关系我们可以将内核与任务分开来讲解linux嵌入式系统在硬件上的工作流程。标准的linux内核通常驻留在内存中,每一个应用程序都是从磁盘传输到内存上执行。当程序结束后,它所占用的内存就被释放,程序也就被下载了。在一个嵌入式系统里,可能没有磁盘。有两种途径可以消除对磁盘的依赖,这要看系统的复杂性和硬件的设计。在一个简单的系统里,当系统启动后,内核和所有的应用程序都在内存里。这就是大多数传统嵌入式系统的工作模式。它同样可以被linux支持。有了linux,就有了第二
6、种可能性。因为linux已经有能力“加载”和“卸载”程序。一个嵌入式系统就可以利用它来节省内存。假设我们已构造一个系统,它包括一个大概8mb到16mb flash memory和8mb内存。在这里,flash memory就可以作为一个文件系统。flash memory驱动程序用来连接flash memory和文件系统。作为替代,也可使用flash disk,用工具软件可把flash memory仿真为磁盘。有一个例子就是intel 公司可提供flash memory 管理软件ipsm -intel persistent storage manager, 详情见 flbldr/swb/swb.
7、htm。所有的程序都以文件形式存储在flash文件中,需要时可以装入内存。这种动态的、“根据需要加载”的能力是支持其它一系列功能的重要特征:1.它使初始化代码在系统引导后被释放。linux同样有很多内核外运行的公用程序。这些公用程序在初始化时运行一次,以后就不再运行。而且,这些公用程序可以用它们相互共有的方式,一个接一个,按顺序运行。这样,相同内存空间可以被反复使用以“调入”每一个程序,就像系统引导一样。这的确可以节省内存,特别是在那些配置一次以后就不再更改的网络堆栈中。如果linux可加载模块的功能包括在内核里,驱动程序和应用程序就都可以被加载。它可以检查硬件环境并且为硬件装上相应的软件。这
8、就消除了用一个程序占用许多flash memory来处理多种硬件的复杂性。2.软件的升级更模块化。你可以在系统运行的时候,在flash上升级应用程序和可加载驱动程序。3.配置信息和运行时间参数可以作为数据文件储存在flash上。 虚拟内存标准linux的另一个特征是虚拟内存的能力。正是这种神奇的特征使应用程序员可以狂热地编写代码而不计后果,不管程序有多大。在嵌入式系统里不需要这种强大的功能。实际上,因为它会带来无法控制的时间因素,所以每人会希望它在实时的系统里存在。这个软件必须设计得更加精悍,以适合硬件平台上的物理内存,就像其它嵌入式系统一样。注意:由于cpu的原因,通常在linux中保存虚拟
9、内存代码是明智的。因为将它清除很费事,而且还有另外一个原因它支持共享文本,这样就可以使许多程序共享一个软件。虚拟内存的调入功能可以被关掉,只要将交换空间的大小设置为零。如果你写的程序比实际的内存大,系统就会用尽交换空间来执行你的程序,那么这个程序将不会运行,或者malloc将会失灵。在许多cpu上,虚拟内存提供的内存管理可以将不同程序分开,防止它们写到其它地址的空间上。这在嵌入式系统上通常是不可能的,因为它只支持一个简单、扁平的地址空间。linux的这种功能有助于其发展。它减少了胡乱地编写程序造成系统崩溃的可能性。许多嵌入式系统基于效率方面的原因,有意识使用程序间可以共享的“全局”数据。这也可
10、以通过linux共享内存功能来支持,但共享的只是指定的内存部分。文件系统许多嵌入式系统没有磁盘或者文件系统。linux不需要它们也能运行。实际上,许多商业性嵌入式系统提供文件系统作为选项。linux提供ms-dos-compatible文件系统,同时还有其它多种选择。之所以提供其它选择是因为它们更加强大而且具有容错功能。linux还具有检查和维护的功能,商业性供应商往往不提供这些。这对于flash系统来说尤其重要,因为它是通过网络更新的。如果系统在升级过程中失去了能力,那它就没有用了。维护的功能通常可以解决这类问题。文件系统可以被放在传统的磁盘驱动器、flash memory或其它这类的介质上
11、。而且,用于暂时保存文件,一个小ram盘就足够了。flash memories被分割成块,这些块中也许包括一个含有当cpu启动时最初运行的软件的引导模块。这其中也可能包括linux 引导代码。剩余的flash可以用作文件系统。linux的内核可以通过引导代码从flash复制到ram,或者还有一个选择,内核可以被存储在flash的一个独立部分,并且直接从那里执行。另外,对于一些系统来说,还有一个有趣的选择,那就是将一个便宜的cd-rom包含在内。这比flash memory 便宜,而且通过交换cd-rom支持简单的升级。有了这个,linux 只要从 cd-rom上引导,类似从硬盘上一样从cd-r
12、om上获得所有的程序。最后,对于联网的嵌入式系统来说,linux 支持nfs(network file system)。这为实现联网系统的许多增值功能打开了大门。它允许通过网络加载应用程序。这是控制软件修改的基础。它在运行的时候也可以用来输入或输出大量的数据、配置和状态信息。这对用户监督和控制来说是一个非常强大的功能。举例来说,嵌入式系统可以建立一个小的ram磁盘,包含的文件中有与当前状态信息同步的内容。其它系统可以简单地把这个ram磁盘设置为基于网络的远程磁盘,并且空中存取状态文件。这就允许另一个机器上的web服务器通过简单的cgi script存取状态信息。在其它电脑上运行的其它应用程序包
13、可以很容易地存取数据。引导-lilo和bios在哪里当一个微处理器第一次启动的时候,它开始在预先设置的地址上执行指令。通常在那里有一些只读内存,包括初始化或引导代码。类似于在pc上的bios。它执行了一些低水平的cpu初始化和其它硬件的配置文件。bios继续辨认哪个磁盘里有操作系统,把操作系统复制到ram并且转向它。实际上,这非常复杂,但对我们的目标来说也非常重要。在pc上运行的linux依靠pc的bios来提供这些配置和os加载功能。在一个嵌入式系统里经常没有这种bios。这样你就要提供同等的启动代码。嵌入式系统并不需要像pc机上的 bios引导程序那样的灵活性,因为它通常只需要处理一个硬件
14、的配置。它只是个指令清单,将固定的数字塞到硬件寄存器中去。然而,这是关键的代码,因为这些数值要与你的硬件相符而且要按照特定的顺序进行。这些启动代码完全根据硬件决定,不可随意移动。但是,在少数情况下,启动代码需要重新编写。为了测试这些代码,你可以使用一个包含“模拟内存”的电路内置模拟器,它可以代替目标内存。你把代码装到模拟器上并通过模拟器调试。如果这样不行,你可以跳过这一步,但这样就要一个更长的调试周期。这个代码最终要在较为稳定的内存上运行,通常是flash或eprom芯片。你需要使用一些方法将代码放在芯片上。怎么做,要根据“目标”硬件和工具来定。一种流行的方法是把flash或eprom芯片插入
15、eprom或flash烧制器。这将把你的程序“烧”(存)入芯片。然后,把芯片插入你的目标板的插座,打开电源。这个方法需要板上配有插座,但有些设备是不能配插座的。另一个方法是通过一个jtag界面。一些芯片有jtag界面可以用来对芯片进行编程,这是最方便的方法。稳定性对大多数微处理器来说,linux非常好。移植到新微处理器家族的linux内核运行起来与原来的微处理器一样稳定。它经常被移植到一个或多个特定的主板上。许多代码是与处理器的特性不相关的,所以移植集中在处理器的差异上,其中大多数是在内存管理和中断控制领域。一旦成功移植,它们就非常稳定。引导策略广泛依赖于硬件要求,而且你必须有计划地做一些定制
16、的工作。设备驱动程序更加混乱:有些稳定有些不稳定,而且选择很有限。一旦你离开了通用的pc平台,你需要自己编写。有幸的是,周围有许多驱动程序,你可以找到一个与你的需求相近的驱动程序修改一下。许多类似的驱动程序都非常相近,所以把磁盘、网络或一系列的端口驱动程序从一个设备移植到另一个设备上通常并不难。你可能发现许多驱动程序都写得很好、很容易理解,但你还是要准备一本关于内核结构的书在手头。总之,这些操作系统和linux的问题在于对工作过程微小之处的误解,而不在于代码的难度或基本的设计错误。任何操作系统都有很多争论不休的故事,这里不需要重复。linux的优势在于源代码是公开、注释清晰和文档齐全。这样,你就可以控制和处理所出现的任何问题。四、如何发展嵌入式linux操作系统嵌入式linux的确有它的缺陷。比如,虽然它并不比某些
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养老院入住退住规定制度
- 报社考试题及答案
- 河北省保定市部分高中2025-2026学年高二上学期12月考试历史试题含答案
- 木材检验员安全生产知识模拟考核试卷含答案
- 绝缘套管制造工安全应急竞赛考核试卷含答案
- 高压成套设备装配配线工岗前操作能力考核试卷含答案
- 行李值班员安全意识竞赛考核试卷含答案
- 尿素脱蜡装置操作工改进模拟考核试卷含答案
- 花艺环境设计师QC管理水平考核试卷含答案
- 2025年高职社区康复(社区护理)试题及答案
- 妇产科急危重症护理课件
- 机器抵押合同范文4篇
- 元代文学-课件
- 家用电器故障代码快速查询
- DGTJ08-2001-2006 基坑工程施工监测规程
- 维修管理课件
- 血液病监护病房管理制度
- 尺骨鹰嘴骨折病人护理常规
- 结直肠癌病人护理
- 律所清算破产管理制度
- 购销合同作废协议书
评论
0/150
提交评论