linux嵌入式系统与硬件平台

上传人:宝路 文档编号:23250372 上传时间:2017-11-30 格式:DOC 页数:3 大小:42.77KB
返回 下载 相关 举报
linux嵌入式系统与硬件平台_第1页
第1页 / 共3页
linux嵌入式系统与硬件平台_第2页
第2页 / 共3页
linux嵌入式系统与硬件平台_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《linux嵌入式系统与硬件平台》由会员分享,可在线阅读,更多相关《linux嵌入式系统与硬件平台(3页珍藏版)》请在金锄头文库上搜索。

1、linux 嵌入式系统与硬件平台王铮、刘渝萍完整的电器设备一般要包括软件和硬件两大部分。本文试图从 linux 软件系统、硬件平台以及开发流程来探讨 linux嵌入式系统与硬件平台的关系。一、linux 嵌入式系统操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口。它存在的目的是为了管理所有硬件资源,并且为应用软件提供一个合适的操作环境。嵌入式系统由于硬件的先天限制,经常只具有极稀少的硬件资源,如频率较低的 cpu、较少的内存、常不具有磁盘而用小容量的 diskonchip 或 diskonmodule。在使用电池的系统中,它还要实

2、现节省电池消耗、延长电池使用时间的功能。linux 作为嵌入式操作系统是完全可行的,因为 linux 提供了完全嵌入功能的基本内核及所有用户界面。linux可以说是一个能提供从内存管理到网络服务等各种功能的连续统一体。linux 作为嵌入式系统,是一个带有很多优势的新成员。它对许多 cpu 和硬件平台都是易移植的、稳定的和易于开发的。嵌入式 linux 系统需要三个基本元素:引导工具;linux 微内核、内存管理、 程序管理;初始化进程。如果要它成为完整的操作系统且继续保持小型化,还得加上硬件驱动程序、硬件接口程序、应用程序组。谈操作系统就一定要说一说它的开发环境。linux 是基于 gnu

3、的 c 编译器,作为 gnu 工具链的一部分,与 gdb源调试器一起工作。它提供了开发嵌入式 linux 系统的所有软件工具。以下是一个典型开发工具的使用流程:1. 写入或植入引导程序;2. 向串口打印字符串的编码;3. 将 gdb 目标码移植工作串口,这可与另一台运行 gdb 程序的 linux 主机系统对话;4.利用 gdb 让硬件和软件初始化码在 linux 内核启动时工作;5. linux 内核启动,串口成为 linux 控制口并可用于后续开发;6.如果在你的目标硬件上运行了完整的 linux 内核,你可以调试你的应用进程。更详细的内容可参见网站 http:/。二、硬件平台研发人员在选

4、择最好的硬件时,往往由于缺乏完整或精确的信息,而使之成为复杂且困难的工作。硬件成本经常是关键的议题。当考虑成本时,我们需要考虑产品的整个成本,而不仅是 cpu 的成本。因为好的 cpu 一旦加上总线逻辑和延时电路,并使之与外设一起工作,那么这个硬件系统可能会变成非常昂贵的产品。如果你正在寻找嵌入式软件系统,那么应首先确定硬件平台,即确定微处理器 cpu 的型号。现在比较流行的硬件平台有 intel 公司的 strong arm 系列、motorola 公司的 dragonball 系列、nec 公司的 vr 系列、hitachi 公司 sh3、sh4 系列等等,它们都可选为硬件平台。在选定前先

5、要确定所做系统的应用功能和所需速度,并且制定好外接设备和接口标准。这样可准确地定位所需要的硬件方案,得到性价比最高的系统。图 1 是以 intel 公司的 strongarm 为例来说明硬件平台。图 1 intel 公司 sa1110 微处理器结构示意图三、linux 嵌入式系统与硬件的关系我们可以将内核与任务分开来讲解 linux 嵌入式系统在硬件上的工作流程。标准的 linux 内核通常驻留在内存中,每一个应用程序都是从磁盘传输到内存上执行。当程序结束后,它所占用的内存就被释放,程序也就被下载了。在一个嵌入式系统里,可能没有磁盘。有两种途径可以消除对磁盘的依赖,这要看系统的复杂性和硬件的设

6、计。在一个简单的系统里,当系统启动后,内核和所有的应用程序都在内存里。这就是大多数传统嵌入式系统的工作模式。它同样可以被 linux 支持。有了 linux,就有了第二种可能性。因为 linux 已经有能力“ 加载”和“卸载”程序。一个嵌入式系统就可以利用它来节省内存。假设我们已构造一个系统,它包括一个大概 8mb 到 16mb flash memory 和 8mb内存。在这里,flash memory 就可以作为一个文件系统。flash memory 驱动程序用来连接 flash memory 和文件系统。作为替代,也可使用 flash disk,用工具软件可把 flash memory 仿

7、真为磁盘。有一个例子就是 intel 公司可提供 flash memory 管理软件 ipsm -intel persistent storage manager, 详情见 http:/ flash 文件中,需要时可以装入内存。这种动态的、 “根据需要加载”的能力是支持其它一系列功能的重要特征:1.它使初始化代码在系统引导后被释放。linux 同样有很多内核外运行的公用程序。这些公用程序在初始化时运行一次,以后就不再运行。而且,这些公用程序可以用它们相互共有的方式,一个接一个,按顺序运行。这样,相同内存空间可以被反复使用以“调入”每一个程序,就像系统引导一样。这的确可以节省内存,特别是在那些配

8、置一次以后就不再更改的网络堆栈中。如果 linux 可加载模块的功能包括在内核里,驱动程序和应用程序就都可以被加载。它可以检查硬件环境并且为硬件装上相应的软件。这就消除了用一个程序占用许多 flash memory 来处理多种硬件的复杂性。2.软件的升级更模块化。你可以在系统运行的时候,在 flash 上升级应用程序和可加载驱动程序。3.配置信息和运行时间参数可以作为数据文件储存在 flash 上。虚拟内存标准 linux 的另一个特征是虚拟内存的能力。正是这种神奇的特征使应用程序员可以狂热地编写代码而不计后果,不管程序有多大。在嵌入式系统里不需要这种强大的功能。实际上,因为它会带来无法控制的

9、时间因素,所以每人会希望它在实时的系统里存在。这个软件必须设计得更加精悍,以适合硬件平台上的物理内存,就像其它嵌入式系统一样。注意:由于 cpu 的原因,通常在 linux 中保存虚拟内存代码是明智的。因为将它清除很费事,而且还有另外一个原因它支持共享文本,这样就可以使许多程序共享一个软件。虚拟内存的调入功能可以被关掉,只要将交换空间的大小设置为零。如果你写的程序比实际的内存大,系统就会用尽交换空间来执行你的程序,那么这个程序将不会运行,或者 malloc 将会失灵。在许多 cpu 上,虚拟内存提供的内存管理可以将不同程序分开,防止它们写到其它地址的空间上。这在嵌入式系统上通常是不可能的,因为

10、它只支持一个简单、扁平的地址空间。linux 的这种功能有助于其发展。它减少了胡乱地编写程序造成系统崩溃的可能性。许多嵌入式系统基于效率方面的原因,有意识使用程序间可以共享的“全局”数据。这也可以通过 linux 共享内存功能来支持,但共享的只是指定的内存部分。文件系统许多嵌入式系统没有磁盘或者文件系统。linux 不需要它们也能运行。实际上,许多商业性嵌入式系统提供文件系统作为选项。linux 提供 ms-dos-compatible 文件系统,同时还有其它多种选择。之所以提供其它选择是因为它们更加强大而且具有容错功能。linux 还具有检查和维护的功能,商业性供应商往往不提供这些。这对于

11、flash 系统来说尤其重要,因为它是通过网络更新的。如果系统在升级过程中失去了能力,那它就没有用了。维护的功能通常可以解决这类问题。文件系统可以被放在传统的磁盘驱动器、flash memory 或其它这类的介质上。而且,用于暂时保存文件,一个小 ram 盘就足够了。 flash memories 被分割成块,这些块中也许包括一个含有当 cpu 启动时最初运行的软件的引导模块。这其中也可能包括 linux 引导代码。剩余的 flash 可以用作文件系统。 linux 的内核可以通过引导代码从 flash复制到 ram,或者还有一个选择,内核可以被存储在 flash 的一个独立部分,并且直接从那

12、里执行。另外,对于一些系统来说,还有一个有趣的选择,那就是将一个便宜的 cd-rom 包含在内。这比 flash memory 便宜,而且通过交换 cd-rom 支持简单的升级。有了这个,linux 只要从 cd-rom 上引导,类似从硬盘上一样从 cd-rom 上获得所有的程序。最后,对于联网的嵌入式系统来说,linux 支持 nfs(network file system) 。这为实现联网系统的许多增值功能打开了大门。它允许通过网络加载应用程序。这是控制软件修改的基础。它在运行的时候也可以用来输入或输出大量的数据、配置和状态信息。这对用户监督和控制来说是一个非常强大的功能。举例来说,嵌入式

13、系统可以建立一个小的 ram 磁盘,包含的文件中有与当前状态信息同步的内容。其它系统可以简单地把这个 ram 磁盘设置为基于网络的远程磁盘,并且空中存取状态文件。这就允许另一个机器上的 web 服务器通过简单的 cgi script 存取状态信息。在其它电脑上运行的其它应用程序包可以很容易地存取数据。引导-lilo 和 bios 在哪里当一个微处理器第一次启动的时候,它开始在预先设置的地址上执行指令。通常在那里有一些只读内存,包括初始化或引导代码。类似于在 pc 上的 bios。它执行了一些低水平的 cpu 初始化和其它硬件的配置文件。bios 继续辨认哪个磁盘里有操作系统,把操作系统复制到

14、ram 并且转向它。实际上,这非常复杂,但对我们的目标来说也非常重要。在 pc 上运行的 linux 依靠 pc 的 bios 来提供这些配置和 os 加载功能。在一个嵌入式系统里经常没有这种 bios。这样你就要提供同等的启动代码。嵌入式系统并不需要像 pc 机上的 bios 引导程序那样的灵活性,因为它通常只需要处理一个硬件的配置。它只是个指令清单,将固定的数字塞到硬件寄存器中去。然而,这是关键的代码,因为这些数值要与你的硬件相符而且要按照特定的顺序进行。这些启动代码完全根据硬件决定,不可随意移动。但是,在少数情况下,启动代码需要重新编写。为了测试这些代码,你可以使用一个包含“模拟内存”

15、的电路内置模拟器,它可以代替目标内存。你把代码装到模拟器上并通过模拟器调试。如果这样不行,你可以跳过这一步,但这样就要一个更长的调试周期。这个代码最终要在较为稳定的内存上运行,通常是 flash 或 eprom 芯片。你需要使用一些方法将代码放在芯片上。怎么做,要根据“目标” 硬件和工具来定。一种流行的方法是把 flash 或 eprom 芯片插入 eprom 或 flash 烧制器。这将把你的程序“烧”(存)入芯片。然后,把芯片插入你的目标板的插座,打开电源。这个方法需要板上配有插座,但有些设备是不能配插座的。另一个方法是通过一个 jtag 界面。一些芯片有 jtag 界面可以用来对芯片进行

16、编程,这是最方便的方法。稳定性对大多数微处理器来说,linux 非常好。移植到新微处理器家族的 linux 内核运行起来与原来的微处理器一样稳定。它经常被移植到一个或多个特定的主板上。许多代码是与处理器的特性不相关的,所以移植集中在处理器的差异上,其中大多数是在内存管理和中断控制领域。一旦成功移植,它们就非常稳定。引导策略广泛依赖于硬件要求,而且你必须有计划地做一些定制的工作。设备驱动程序更加混乱:有些稳定有些不稳定,而且选择很有限。一旦你离开了通用的 pc 平台,你需要自己编写。有幸的是,周围有许多驱动程序,你可以找到一个与你的需求相近的驱动程序修改一下。许多类似的驱动程序都非常相近,所以把磁盘、网络或一系列的端口驱动程序从一个设备移植到另一个设备上通常并不难。你可能发现许多驱动程序都写得很好、很容易理解,但你还是要准备一本关于内核结构的书在手头。总之,这些操作系统和 linux 的问

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号