华恒的嵌入式LINUX入门_第1页
华恒的嵌入式LINUX入门_第2页
华恒的嵌入式LINUX入门_第3页
华恒的嵌入式LINUX入门_第4页
华恒的嵌入式LINUX入门_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Embedded LINUX Solutions华恒是国内最早开发嵌入式Linux技术的公司之一。华恒先后推出 HYPERLINK :/ hhcn /chinese/sale.htm t _blank 国内首款嵌入式Linux SOHO路由卡; HYPERLINK :/ hhcn /chinese/sale.htm 国内首款面向手持设备和PDA的嵌入式Linux开发板; HYPERLINK :/ hhcn /chinese/sale.htm 国内首款工控应用嵌入式uCLinux开发板。华恒为客户提供从硬件到系统软件的开放平台,为客户的应用开发提供低成本、高效、易用的互联网接入综合解决方案。采用

2、华恒嵌入式LINUX综合解决方案: 高性价比:中国人自主开发,保证了该方案的低成本和高性能。领先的硬件设计开发能力:华恒是一家嵌入式Linux供应商,可以提供硬件技术。其深厚的电信技术背景和丰富的嵌入式系统和Linux系统设计开发经验,给客户强大的信心和可靠性。技术支援。提供全中文软硬件开发培训:为客户带来嵌入式处理器的开发调试技术、板级硬件设计和软硬件系统集成技术能力。华恒与著名高校的研究机构有着长期的合作协议,在微处理器制造领域与行业领导者进行了深度合作。这些良好的资源也为我们客户的最终产品设计提供了强有力的支持。资源丰富:华恒长期支持并持续推出多个基于其嵌入式Linux开发平台的开源项目

3、,并及时发布技术源代码,为客户开发提供技术指导和代码支持。随着微处理器的出现,嵌入式Linux提供了稳定可靠的硬件架构,低成本、紧凑的CPU和外围连接,因此制约嵌入式系统发展的瓶颈突出在软件上。尽管自1980年代后期以来,一些嵌入式操作系统陆续出现,但比较有名的有Vxwork、pSOS、Neculeus和Windows CE。但这些专业化的操作系统是商业产品,价格高昂,让很多小公司望而却步的低端产品;而且,封闭的源代码也极大地限制了开发者的积极性。此外,根据国家的实际情况,国家对独立操作系统的大力支持也为开源Linux的推广提供了广阔的发展前景。另外,对于上层应用开发者来说,嵌入式系统需要一套

4、高度简洁、界面友好、质量可靠、应用广泛、易于开发、多任务、价格低廉的操作系统。在不久的将来,从冰箱到收音机的所有东西都将配备处理器。由于其开放性,许多人认为 Linux 非常适合大多数 Internet 设备。他们认为Linux可以支持不同的设备,支持不同的配置。对供应商而言,公正且成本极低,Linux 可以迅速成为各种设备的操作系统。如今,业界已经达成共识:嵌入式linux是大势所趋,其巨大的市场潜力和酝酿的无限商机,势必会吸引众多厂商进入这一领域。嵌入式操作系统主要有Palm OS、Windows CE、EPOC、LinuxCE、QNX、ECOS、LYNX。高端嵌入式系统需要许多高级功能,

5、例如图形用户界面和网络支持。许多高端 RTOS 厂商已经提供这些功能,但价格太高,一般人无法接受。微软的Windows CE也有这样的功能,但不具备大多数嵌入式系统所需的实时性能,移植起来也很困难。也有人尝试将基于 DOS 的系统与单独的第三方工具组合在一起,但这种努力将是徒劳的。现在需要的是一种廉价、成熟并提供高端嵌入式系统必要功能的操作系统。嵌入式Linux操作系统以其价格低廉、功能强大、易于移植等优点被广泛采用,成为一股新兴力量。因此,很多企业纷纷转向嵌入式linux。 Linux 为嵌入式操作系统提供了一个非常有吸引力的选择。它是一个类 Unix、基于内核、完全受内存保护、多任务、多进

6、程的操作系统。支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA等大多数现有芯片。程序源代码全部开放,任何人都可以修改和分发根据 GNU 通用公共许可证。这样,开发者就可以自定义操作系统,而不必担心MS Windows操作系统中的“后门”。威胁。同时,由于GPL的控制,大家开发的大部分东西都是相互兼容的,不会走向分裂的道路。当Linux用户遇到问题时,他们可以通过互联网咨询互联网上成千上万的Linux开发者,这使得解决最困难的问题成为可能。 Linux拥有完善的Unix用户熟悉的开发工具,几乎所有Unix系统的应用软件都移植到了Linu

7、x上。 Linux还提供了强大的网络功能,有多种可选的窗口管理器(X windows)。其强大的语言编译器gcc、g+等也可以轻松获取。不仅成熟完善,而且易于使用。选择linux的理由可以应用于多种硬件平台。 Linux 已被移植到各种硬件平台,这对于受开销和时间限制的研发项目具有吸引力。原型可以在标准平台上开发,然后移植到特定的硬件上,加快软件和硬件的开发过程。 Linux 可以自由配置,无需任何许可或业务合作。免费提供源代码。这是最吸引人的。毫无疑问,这将节省大量的开发成本。内置网络支持。 Linux 的高度模块化使得添加组件变得非常容易。 Linux 在桌面上的成功,让大家看到了 Lin

8、ux 在嵌入式系统中的辉煌未来。嵌入式系统以及如何开发自己的嵌入式系统由 JoelR.Williams 提供大多数 Linux 系统运行在 PC 平台上,但 Linux 作为嵌入式系统也非常稳定。本文描述了嵌入式系统的概述,并展示了嵌入式系统产品如何使用 Linux。嵌入式系统比摩西的故事更古老计算机用于控制设备或嵌入式系统的时间几乎与计算机本身一样长。在通信领域,在 1960 年代后期,计算机被用于称为“存储程序控制”系统的电子开关。 “计算机”一词在当时并不常见,存储程序意味着存储有关程序和例程的信息。存储控制逻辑,而不是在硬件中强化它,在当时确实是开创性的。今天,我们认为应该如此。当时的

9、计算机是为每个应用程序定制的,按照今天的标准,它们是一组不寻常的奇怪的特殊指令和集成到计算机中的 I/O 设备。微处理器通过提供小型、低成本的 CPU 引擎来构建大型系统级模块,从而改变了这一切。它提出了一种固定的硬件架构,外设通过总线连接,以及一种称为编程的通用编程模型。软件还附带硬件。最初,只有用于编写和测试软件的简单编程开发工具。在每个项目上实际运行的软件通常来自草稿的修订。编程通常用汇编语言或宏语言完成,因为编译器经常有缺陷并且缺乏复杂的调试工具。软件构建块和标准化库是在 70 年代才流行起来的概念。嵌入式系统的商业操作系统直到 1970 年代后期才出现。许多是用汇编语言编写的,仅适用

10、于特定的微处理器。当微处理器被淘汰时,它们的操作系统被 设备重写,否则将被淘汰。今天,这些早期系统中的许多都是模糊的记忆。还有人记得 MTOS 吗? C语言出现后,操作系统编写的效率、稳定性和可移植性都得到了很大的提升。这立即体现在管理上,并为在微处理器过时保护软件投资提供了希望。这对市场来说是个好消息。如今,用 C 编写的操作系统越来越普遍。一般来说,可重用软件已经占据主导地位并且正在变得越来越好。八十年代初,我最喜欢的操作系统是 Wendon OS,你可以花大约 150 美元买到一个 C 源代码库。它是一个包,您可以在其中通过选择组件来构建自己的操作系统,类似于从菜单中订购。例如,您可以点

11、击图书馆列表中的工作调度和库存管理解决方案。许多嵌入式系统的商业操作系统出现在 1980 年代。这种热潮一直持续到今天,今天,有许多可行的商业操作系统可供选择。出现了一些大牌,如 VxWorks、pSOS、Neculeus 和 Windows CE。许多嵌入式系统根本没有操作系统,只有循环控制。这对于一些简单的设备来说已经足够了,但是随着系统变得更加复杂,操作系统变得必要或者软件变得难以置信地复杂。不幸的是,一些极其复杂的嵌入式系统之所以如此复杂,是因为它们的设计者坚持不运行操作系统。渐渐地,越来越多的嵌入式系统需要连接到各种类型的网络,从而需要网络能力。甚至酒店的门把手也嵌入了微处理器并联网

12、。对于仅仅是一个编码控制回路的嵌入式系统,添加网络功能将导致需要操作系统的系统复杂性增加。除了商业操作系统之外,还有大量的专用操作系统。有的来自草稿,比如CISCO的IOS;其他是从其他操作系统派生的。例如,许多操作系统都源自同一版本的 Berkeley Unix 系统,因为它具有完整的网络功能。其他的则基于主要操作系统,例如 Phil Karn 的 KA9Q。 Linux 作为嵌入式系统是一个新人,具有许多优点。它便携、稳定、功能强大且易于开发,适用于许多 CPU 和硬件平台。打破 ICE 壁垒的工具包 开发嵌入式系统的关键是可用的工具包。像任何工作一样,好的工具可以让工作更快更好。不同的开

13、发阶段需要不同的工具。传统上,用于开发嵌入式系统的第一个工具是电路仿真器 (ICE),这是一个相对昂贵的组件,内置在微处理器和总线之间的电路中,内容用户监视和控制微控制器。所有进出处理器的信号。这有点难做,因为它是异体的并且可能导致不稳定。但它提供了总线在做什么的清晰画面,省去了很多关于底层硬件和软件在做什么的猜测。过去,一些工作依赖 ICE 作为整个开发过程的主要调试工具。但是,一旦初始化软件很好地支持了串口,大多数调试都可以在没有 ICE 的情况下使用其他方法来完成。较新的嵌入式系统使用非常清晰的微处理器设计。有时,相应的工作初始化代码已经具备快速让串口工作的能力。这意味着人们可以在没有

14、ICE 的情况下轻松工作。消除 ICE 可降低开发成本。串口一旦工作,就可以支持各种专业的开发工具。 Linux 是一个基于 GNU 的 C 编译器,它与 gdb 源代码调试器一起作为 GNU 工具链的一部分工作。它提供了用于开发嵌入式 Linux 系统的所有软件工具。这些是用于在新硬件上开发嵌入式 Linux 系统的一些典型调试工具。 1.编写或植入引导代码2.将字符串的编码打印到串口,比如“Hello World”(其实我更喜欢“Watson, Come hre I need you”,常用的第一个词就可以了.) 3 .将 gdb 目标代码插入工作串行端口,它可以与另一个运行 gdb 程序

15、的 Linux 主机系统通信。只需简单地告诉 gdb 通过串行端口调试程序。它通过串口与测试机的gdb目标代码进行通信。您可以调试 C 源代码,也可以使用此功能将更多代码加载到 RAM 或 Flash 存储器中。 4、在Linux内核启动时,使用gdb使硬件和软件初始化代码工作。 5、Linux内核启动后,串口成为Linux控制口,可用于后续开发。使用kgdb,gdb的内核调试版本,这一步通常不需要,如果你连接到10BaseT等网络,你可能需要接下来启用它。 6. 如果您的目标硬件上正在运行完整的 Linux 内核,您可以调试您的应用程序进程。使用其他 gdb 或覆盖 gdb 图形,例如 xg

16、db。什么是实时系统?嵌入式系统经常被错误地归类为实时系统,尽管大多数系统通常不需要实时功能。实时是一个相对术语,纯粹主义者通常将实时严格定义为在极短的时间内(例如微秒)以预定方式对事件的响应。在 ASIC 上实现。这仅在设计低级硬件 FIFO、分散/聚集 DMA 引擎和定制硬件时才需要。许多设计人员对实时需求感到焦虑,因为他们对真实需求有清晰的了解。对于大多数系统来说,一到五微秒的近乎实时的响应就足够了。软需求也是可以接受的。 Windows 98 等已经崩溃的中断必须在 4ms (98%) 或 20ms (0) 内处理。这样的软需求比较容易满足,包括环境转换时间、中断等待时间、任务优先级和

17、排序。环境转换时间曾经是操作系统中的热门话题。总而言之,大多数 CPU 都可以很好地处理这些要求,而且由于 CPU 现在速度快得多,所以这个问题并不重要。严格的实时要求通常由中断例程或其他内核环境驱动程序函数处理,以确保稳定的性能、延迟和请求出现后的服务时间,很大程度上取决于中断的优先级和其他可以暂时屏蔽中断的因素。软件。与许多其他操作系统一样,必须处理和管理中断以确保满足时序要求。在 Intel X86 处理器上,这项工作很容易被 Linux 实时扩展处理。这是为了提供一个中断处理调度程序,用于将 Linux 作为后台任务运行。关键中断响应不必通知 Linux。因此,可以对关键时钟进行大量控

18、制。提供实时控制级别和具有宽松时间限制的基本 Linux 级别之间的接口,提供类似于其他嵌入式操作系统的实时框架。因此,实时关键代码被隔离并“设计”以满足要求。代码处理的结果可能只是以更总则方式在应用程序任务级别。嵌入式系统定义一个观点是,如果一个应用程序没有用户界面,它必须是嵌入式的,因为用户不能直接与之交互。当然,这是一种简化。电梯控制计算机被认为是嵌入式的:按钮选择楼层,指示灯显示电梯的停靠楼层。对于联网的嵌入式系统,如果系统包含用于监视和控制的 Web 浏览器,则界限会变得更加模糊。更好的定义侧重于系统的集中功能和主要目的。因为 Linux 提供了执行嵌入式功能所需的基本内核和所有用户

19、界面,所以它是多方面的。它可以处理嵌入式任务和用户界面。将 Linux 视为一个连续体,从具有存储管理、任务切换、时间服务和其他衍生产品的微内核到支持所有文件系统和网络服务的完整服务器。一个小型的嵌入式 Linux 系统只需要以下三个基本要素:引导工具Linux 微内核,它由内存管理、进程管理和事务处理组成一个初始化进程:如果你想让它做某事并保持它的小,你有添加 Top:其硬件驱动程序提供所需功能的一个或多个应用程序。要添加功能,这些可能需要TCP/IP 网络堆栈的文件系统(可能在 ROM 或 RAM 中)来存储半转换数据和用于交换的磁盘。硬件平台选择最好的硬件是一项复杂的工作,充满了政治、偏

20、见、传统,并且缺乏关于公司其他项目的完整或准确的信息。成本通常是一个关键问题。在考虑成本时,请确保您考虑的是产品的全部成本,而不仅仅是 CPU。有时,一旦您添加总线逻辑和延迟以使其与外围设备一起使用,快速、廉价的 CPU 可能会变成昂贵的狗产品。如果要找软件,首先是硬件已经有产品了。如果您是系统设计人员,您可以自行制定实时预算以及硬件是否运行良好。实际上需要多快的 CPU 才能完成一项工作,然后将速度提高三倍。奇怪,CPU的理论速度和现实中的一样,别忘了应用程序会充分利用缓存。想象一下总线需要多快,如果还有其他总线,例如 PCI 总线,包括在内。慢速总线或带有 DMA 阻塞的总线会降低 CPU

21、 的速度并导致拥塞。具有集成设备的 CPU 很好,因为需要调试的设备很少,而且支持通用 CPU 的驱动程序通常很容易获得。在我的项目中,芯片和外设的连接经常会出现故障或者不符合我们需要的兼容性。由于外设是集成的,不要以为这会便宜。把一个 10 磅的 Linux 塞进一个 5 磅的包里对 Linux 的一个普遍理解是,它对于嵌入式系统来说是惊人的。这可能不对,典型 PC 上的 Linux 对于 PC 用户来说非常实用。对于初学者来说,内核可以与任务分离,标准的 Linux 内核通常驻留在内存中,每个应用程序都从磁盘传送到内存中执行。当程序结束时,它占用的内存被释放,程序被下载。在嵌入式系统中,可

22、能没有磁盘。有两种方法可以消除对磁盘的依赖,具体取决于系统的复杂性和硬件的设计。在一个简单的系统中,内核和所有应用程序在系统启动时都存在。这是大多数传统嵌入式系统的工作模式,Linux也可以支持。对于 Linux,还有第二种可能性。因为 Linux 已经具备“加载”和“卸载”程序的能力,嵌入式系统可以利用它来节省内存。考虑一个包含大约 8MB 到 16MB 闪存和 8MB RAM 的典型系统。闪存可用作文件系统。 Flash Memory 驱动程序用于连接Flash Memory 和文件系统。作为替代方案,可以使用闪存盘。此 Flash 组件使用软件模拟磁盘。一个例子是 M-Systems 的

23、 DiskOnChip,它可以达到 160MB。 (.m 系统。)。所有程序都以文件的形式存储在Flash文件中,需要时可以加载。这种动态的“按需加载”功能是支持一系列其他功能的重要特性:它内容在系统启动后释放初始化代码。 Linux 也有许多在内核外运行的实用程序。这些例程通常在初始化时运行一次,并且不再运行。此外,这些实用程序可以以彼此共享的方式一个接一个地依次运行。这样,同一个内存空间就可以被重复使用来“调用”每个程序,就像系统启动一样。这确实节省了内存,特别是对于配置一次且永不更改的网络堆栈。如果内核中包含 Linux 可加载模块功能,则可以加载驱动程序和应用程序。它可以检查硬件环境并

24、为硬件安装相应的软件。这消除了使用一个程序占用大量闪存来处理多个硬件的复杂性。软件升级更加模块化。您可以在系统运行时更新 Flash 上的应用程序和可加载驱动程序。配置信息和运行时参数可以作为数据文件存储在 Flash 中。非虚拟存储标准 Linux 的另一个特性是虚拟存储的能力。正是这个神奇的特性,让应用程序员可以不顾后果地疯狂地编写代码,不管程序有多大。程序溢出到磁盘交换区。在没有磁盘的嵌入式系统中,这通常是不可能的。嵌入式系统不需要这种强大的功能。事实上,您可能不希望在实时关键系统中使用它,因为它引入了无法控制的时序因素。该软件必须设计得更加稳健,以适应市场上的物理内存,就像任何其他嵌入

25、式系统一样。请注意,由于 CPU 的原因,在 Linux 中保留虚拟内存代码通常是明智的,因为清除它非常昂贵。另一个原因是它支持共享文本,因此许多程序可以共享一个软件。没有这个,每个程序都会有自己的库,就像 printf 一样。可以关闭虚拟内存的加载功能,只要将交换空间的大小设置为零即可。然后,如果您编写的程序比实际的大,系统会将其视为您的交换空间已用完;程序不会运行,否则 malloc 会失败。在许多 CPU 上,虚拟内存提供内存管理,将不同的程序与写入其他地址空间分开。这在仅支持简单、平坦地址空间的嵌入式系统上通常是不可能的。 Linux 的这一特性有助于它成长。它减少了随机编程导致系统崩

26、溃的可能性。许多嵌入式系统出于效率原因有意识地使用可以在程序之间共享的“全局”数据。 Linux 共享内存特性也可以支持这一点,只共享指定的内存部分。文件系统许多嵌入式系统没有磁盘或文件系统。 Linux 不需要它们来运行。如前所述,应用程序任务可以使用内核编写并在启动时作为映像加载。对于简单的系统,这就足够了。但是,它缺乏上述灵活性。事实上,许多商业嵌入式系统都提供文件系统作为选项。许多是专有文件系统或与 MS-DOS 兼容的文件系统。 Linux 提供了与 MS-DOS 兼容的文件系统,还有许多其他选项。提供了其他选项,因为它们更健壮且容错。 Linux 还具有商业供应商通常不提供的检查和

27、维护功能。这对于通过网络更新的 Flash 系统尤其重要。如果系统在升级过程中失去了功能,那就没用了。维护的功能通常可以解决这类问题。文件系统可以放置在传统的磁盘驱动器、闪存或其他此类介质上。此外,对于临时保存文件,一个小的 RAM 磁盘就足够了。闪存被分成块。这些块可能包括一个引导块,其中包含在 CPU 启动时运行的初始软件。这可能包括 Linux 引导代码。剩余的 Flash 可以用作文件系统。 Linux 内核可以通过引导代码从 Flash 复制到 RAM,或者,内核可以存储在 Flash 的单独部分中并直接从那里执行。对于某些系统来说,另一个有趣的选择是包含一个便宜的 CD-ROM。这

28、比闪存便宜,并且支持通过交换 CD-ROM 轻松升级。这样,Linux 就从 CD-ROM 启动,并像从硬盘中一样从 CD-ROM 中获取所有程序。最后,对于联网的嵌入式系统,Linux 支持 NFS(网络文件系统)。这为网络系统的许多增值功能打开了大门。首先,它内容通过网络加载应用程序。这是控制软件修改的基础,因为每个嵌入式系统的软件都可以加载到一个通用的服务器上。它还可用于在运行时输入或输出大量数据、配置和状态信息。这是用户监督和控制的一个非常强大的功能。例如,嵌入式系统可以创建一个小型 RAM 磁盘,其中包含与当前状态信息同步的文件。其他系统可以简单地将这个 RAM 磁盘设置为基于网络的

29、远程磁盘并通过无线方式访问状态文件。这内容另一台机器上的 Web 服务器通过简单的 CGI 脚本访问状态信息。在其他计算机上运行的其他应用程序包可以轻松访问数据。对于更复杂的监控,可以使用 Matlab (.mathworks./products/matlab/) 等应用程序包在操作员的 PC 或工作站上提供系统操作的图形表示。 LILO 和 BIOS 的引导位置 当微处理器第一次启动时,它开始在预设地址处执行指令。通常那里有一些只读存储器,包括初始化或引导代码。在 PC 上,这是 BIOS。它执行一些低级 CPU 初始化和其他硬件配置。 BIOS 继续识别哪个磁盘具有操作系统,将操作系统复制

30、到 RAM 并转向它。实际上,这很复杂,但对我们的目标也很重要。在 PC 上运行的 Linux 依赖 PC 的 BIOS 来提供这些配置和操作系统加载功能。嵌入式系统中通常没有这样的 BIOS。然后您必须提供等效的启动代码。幸运的是,嵌入式系统不需要 PC BIOS 引导加载程序的灵活性,因为它通常只需要处理一个硬件的配置。这段代码更简单也更无聊。它只是一个指令列表,将固定数字填充到硬件寄存器中。但是,这是关键代码,因为这些值必须与您的硬件相匹配并按特定顺序排列。所以在大多数情况下,一个最小的 POST 模块可以检查内存是否正常运行、闪烁 LED 并驱动其他必要的硬件来启动和运行主 Linux

31、 操作系统。这些启动代码完全由硬件决定,不能随意移动。幸运的是,许多系统都有为核心微处理器和内存定制的菜单驱动硬件设计。通常,芯片制造商有一个样本主板,可以用作与新设计或多或少相同的设计的参考。通常这些基于菜单的设计的启动代码是可用的,可以根据您的需要轻松修改。在少数情况下,需要重写启动代码。要测试此代码,您可以使用包含“模拟存储器”的电路仿真器,该模拟存储器可用于代替目标存储器。您将代码加载到模拟器中并通过模拟器对其进行调试。如果这不起作用,您可以跳过这一步,但这将需要更长的调试周期。这段代码最终会在更稳定的内存上运行,通常是 Flash 或 EPROM 芯片。您需要使用某种方法将代码放在芯

32、片上。如何做到这一点取决于“目标”硬件和工具。一种流行的方法是将 Flash 或 EPROM 芯片插入 EPROM 或 Flash 刻录机。这会将您的程序“烧录”(存储)到芯片中。然后,将芯片插入目标板的插座并打开电源。这种方法需要板上有插座,但有些设备不能配备插座。另一种方法是通过 JTAG 接口。一些芯片具有可用于对芯片进行编程的 JTAG 接口。这是最方便的方法。芯片可以永久焊接到主板上,用一根小电缆从板上的 JTAG 连接器(通常是 PC 卡)连接到 JTAG 接口。以下是 PC 运行 JTAG 接口所需的一些习语。该设备也可用于小规模生产。鲁棒性比政治家承诺的更可靠在 PC 硬件上运

33、行时,Linux 非常可靠和稳定,尤其是与当今流行的一些操作系统相比。嵌入式内核本身的稳定性如何? Linux 非常适合大多数微处理器。移植到新微处理器系列的 Linux 内核与该微处理器一样稳定运行。它通常被移植到一个或多个特定的主板上。这些板包括特定的外围设备和 CPU。幸运的是,很多代码都是特定于处理器的,所以移植的重点是不同之处。其中大部分是在存在管理和中断控制领域。一旦成功移植,它们非常稳定。正如我们前面所讨论的,启动策略很大程度上取决于硬件要求,您必须计划做一些自定义工作。设备驱动程序更令人困惑:一些稳定,一些不稳定。而且选择有限;一旦离开通用 PC 平台,就需要自己编写。幸运的是

34、,周围有很多驱动程序,您也许可以找到一个具有与您的需求相似的修改的驱动程序。此驱动程序接口已定义。许多类型的驱动程序非常相似,因此将磁盘、网络或一系列端口驱动程序从一个设备移植到另一个设备通常并不困难。我发现许多驱动程序都写得很好并且易于理解,但您仍然希望手头有一本关于核架构的书。根据我的经验,Linux 至少与我使用过的著名商业操作系统一样稳定。总之,这些操作系统和 Linux 的问题是对微秒如何工作的误解,而不是代码的难度或基本的设计错误。关于任何操作系统都有很多有争议的故事,这里不需要重复。 Linux 的优势在于源代码是公开的、有良好注释的和有据可查的。这样,您可以控制和处理出现的任何

35、问题。除了基本内核和驱动程序之外,还有其他问题。如果系统有硬盘,那么文件系统的可靠性是个问题。我们有两年多的使用磁盘设计 Linux 系统的经验。这些系统几乎从不正常关闭。电源随时可能中断。使用标准(EXT2)文件系统感觉非常好。标准的 Linux 初始化脚本运行 fsck 程序,该程序在检查和清除不稳定的 inode 方面非常有效。明智的做法是将默认值更改为每 30 秒运行一次更新程序为每 5 或 10 秒运行一次。这减少了数据在进入磁盘之前在高速缓存中花费的时间,从而降低了丢失数据的可能性。如何开发嵌入式 Linux 确实有其缺陷。例如,虽然它并不比它的一些商业竞争对手差多少,但它是一个贪

36、婪的记忆。这可以通过删除一些不必要的功能来弥补,但它可能需要很长时间,如果不小心可能会很烦人。许多 Linux 应用程序使用虚拟内存,这在许多嵌入式系统中没有任何价值,因此不要假设没有磁盘的嵌入式系统可以运行任何 Linux 应用程序。核调试工具不是很好,尤其是在较低级别。 kgdb 可以轻松定位错误,您只需要重新启动即可。不幸的是,打印语句更麻烦。然而,对我来说最糟糕的是心理问题。 Linux 非常灵活。嵌入式系统通常不灵活;它们被严格设计为最有效地执行其预期功能。趋势是保持灵活性,保持整体目标功能,并尽可能少地进行更改。这个目标是崇高的,但要付出的代价将是具体工作的巨大调整。保持灵活性会导

37、致额外的工作、额外的包,有时还会导致性能下降。一个反复出现的例子是配置。考虑在 Web 界面上配置 IP 地址,这通常通过从启动脚本运行 ifconfig 程序来完成。这是一个 28K 的程序,它从配置文件中调用数据,并且可以用几行代码替换以初始化适当的结构。然而,即使这是完全合理的,它仍然是有害的,因为它以一种以前从未使用过的方式扭曲了软件。 Linux在嵌入式系统中的应用是可行的。实用可靠,开发成本与更换相同。随着 CE(消费电子)供应商继续争夺市场份额,消费者要求设计人员在每个新产品或产品升级中加入更多功能。用户不再满足于只提供一种功能的设备。手机、媒体播放器、数码相机、游戏机、收音机和

38、电视机等各种多功能设备都在争夺消费者钱包里的钱。对于这种复杂性,32b 处理器、网络连接、全图形、安全和多线程 HYPERLINK :/ ednchina /word/70724.aspx o 软件 软件已成为新设计的标准。鉴于 CE 产品的体积庞大且利润微薄,设计团队正在研究和利用 Linux 操作系统来解决软件负担。 Linux 的几个特性使其非常适合 CE 项目。 Linux 最初吸引设计师的是它的免费源代码、无许可费和每台设备的版税。与机构开发或商业化的操作系统相比,这些成本相当高,在项目生命周期内增加了数千美元。成本竞争和预算限制迫使软件开发团队为新项目考虑免版税软件,例如 Linu

39、x。 Linux 包括内核、作业控制环境和应用程序。 Linux内核的基本架构包括内存管理、进程调度、文件系统和网络接口。内存管理器使多个程序能够安全地共享系统内存,而进程调度程序确保程序可以公平地访问 CPU。虚拟文件系统隐藏了硬件的细节,为用户提供了一个通用的文件接口。 Linux内核占用RAM比1MB少,作业控制环境提供用户界面,可以简单到命令行,也可以复杂到Windows图形界面。当设计人员从用于 8b 和 16b 处理器的功能有限的“自己构建”操作系统转向超出部门软件团队能力或预算的复杂应用程序时,Linux 应运而生。这些开发人员习惯于维护自己的软件包,Linux 许可协议符合他们

40、的口味。开源 Linux 增加了一些功能,例如内置网络支持和图形,可以在新项目开发中节省大量编码和集成时间。随着新一代高速、低成本 32b 处理器和 Linux 的发展,开发人员发现嵌入式系统的实时性要求不再是负担。尽管数据速率有所提高,但用户 I/O 时序保持相对稳定,程序员有更多时钟周期可用于处理当今高速处理器的 I/O 请求。 Linux 并非旨在提供决定性的性能,而是用于以前需要实时操作系统的某些应用程序中。低开销Linux 是模块化的,内容开发人员构建适合每个设备内存的小型修改软件包,从而消除专用通用操作系统的代码开销。 Linux 还支持大量的微处理器,使其最适合不断变化的消费市场

41、。因为设计人员可以将 Linux 移植到最常见的嵌入式处理器上,所以没有软件限制迫使开发人员改变硬件决策。设计人员可以从仅满足当前需求的低成本微处理器开始生产,并且可以随着设备需求和功能的扩展轻松升级到更强大的 CPU。 Linux 开发人员会定期更新内核以包含来自用户社区的插件和建议。有关最新内核的信息可以在 HYPERLINK :/ / .找到,并且可以下载最新版本。 2.6 版现在包括许多抢占点,内容调度程序暂停工作任务并启动更高优先级的进程。进程调度算法已被重写,以加快多任务应用程序中的作业切换。除了实时改进之外,2.6 版还有一些有益于消费设备应用程序的更新。例如,蓝牙和 USB 2

42、.0 等增强外设选项、ALSA(高级 Linux 声音架构)使应用程序能够处理多个音频流,而 Video4Linux 增加了一个视频子系统。深度嵌入式系统的附加更新也占用很小的空间,适用于容量有限的应用程序。 Linux 许可协议对消费设备开发人员既有积极的影响,也有消极的影响。从好的方面来说,您可以下载免费的 Linux 副本并在您自己的产品中使用它而无需支付版税,而且您可以随心所欲地使用它。 Linux 根据 GNU 的 GPL(通用公共许可证)使用规则获得许可。如果您修改和重新分发 GPL 软件,您的修改也自动符合 GPL 并且必须公开。只要应用程序和设备驱动程序与 Linux 内核无关

43、并且不包含 GPL 代码,它们就可以保持专有。但是代码隔离对于小型消费设备的开发人员来说是一个问题,因为他们将所有软件都保存在一个 ROM 中。除了许可的不确定性,Linux 用户还面临其他非技术因素。例如,SCO(圣克鲁斯行动)组织提出了法律挑战,声称 Linux 包含专有 Unix 代码的残余,并强制更改核心,甚至要求获得专利资金。 2005 年 12 月,SCO 集团对 UNIX 知识产权的原始所有者、现在的 Linux 开发人员 Novell 提起了长期诉讼。 SCO 争议的最新消息和完整历史可以在 Linux Online, HYPERLINK :/ / .上查看。内核补充开发人员预

44、见到在开源 Linux 环境中存在软件损坏的可能性。如果 A 公司决定修改 Linux 内核以解决其产品中的集成问题,而 B 公司进行了类似但不兼容的修改,那么现在有三个 Linux 版本。当下一次官方 Linux 更新发布时,两家公司都必须搜索修改后的代码,重新合并这些更改,或者继续使用旧版本。最聪明的选择可能不是修改内核,而是使用源代码进行调试,或者了解 Linux 的功能。现在,Linux 社区利用复杂系统的升级提案和发布,成功地阻止了多个版本的出现。尽管 HYPERLINK :/ ednchina /word/70721.aspx o Linux Linux是一个免费的 HYPERLI

45、NK :/ ednchina /word/70720.aspx o 操作系统 操作系统,但许多设计人员仍然希望为专业支持、特殊工具、定制服务和预打包配置付费,以促进 HYPERLINK :/ ednchina /word/70723.aspx o 开发 开发过程。商业供应商提供定制的嵌入式配置、用户支持包、开发工具包、应用示例和咨询服务,作为 Linux 的增强功能。但与将用户限制在单一来源的商业专有操作系统不同,Linux 用户仍然可以自由地从任何其他供应商那里获得支持。看到 Linux 在 CE 产品中的日益普及,一些商业 RTOS(实时操作系统)供应商也加入了开源运动, HYPERLIN

46、K :/ ednchina /word/70724.aspx o 软件 为严格实时的应用程序提供定制分发、开发工具、支持和推广他们自己的专有软件.例如,Wind River 产品线经理 Glenn Seiler 这样总结公司的战略:“市场需要一个选择。在某些情况下,市场想要一个 RTOS,但由于严格的实时要求或小尺寸要求,市场需要一些客户仍然讨厌的 RTOS . GPL 概念。其他已经进行了大量现有投资的用户也希望继续使用 RTOS。 Seiler 还描述了其他想要快速创新的好处、免版税模式、想要控制源代码、想要保持相同的供应商独立性并且不担心 GPL 的客户。这些客户的态度更多的是 Linu

47、x他说,“我们希望提供一种能够同时满足 RTOS 客户和 Linux 客户的解决方案。”他解释说,“我们的方法采用了基于 Workbench 工具套件的策略,这是一种万能的生命周期产品它涵盖了从电路板设计到固件开发一直到核心板支持开发、应用程序开发和调试的所有内容。” Wind River 的 Workbench 套件建立在开源 Eclipse 集成开发环境(图 1)之上。同样,MontaVista Software 提供 Linux CEE(消费电子版)、 HYPERLINK :/ ednchina /word/70722.aspx o 设备 嵌入式操作系统和 CE设备的交叉开发环境。该软件

48、包具有动态电源管理、增强的文件系统、用于系统性能调整的新开发工具、处理器和外围设备支持、用于应用程序开发以与示例实用程序、库和驱动程序一起使用的交叉开发工具等。 CEE 支持飞思卡尔、英特尔、瑞萨和德州仪器为消费类设备定制的各种处理器。 MontaVista 还为无线手机和移动产品提供适用于移动设备的 Linux (Mobilinux),满足他们对电源管理、严格的实时性能、快速启动和小尺寸的需求(图 2)。TiVo 领先许多 CE 设备都与 Linux 操作系统相结合,但 TiVo 个人录像机是最广为人知的。 TiVo Linux 也是发烧友最喜欢修改的软件。修改后,您可以使用更大的硬盘或通过

49、添加硬盘来增加存储容量,或者将录制的节目传输到计算机或其他设备。 Linux 可能成为索尼下一代游戏机 PlayStation 3 软件包的一部分,该游戏机预计将于 2006 年春季上市。最近推出的诺基亚 770 互联网平板电脑也使用了 Linux,该平板电脑具有 802.11、USB 和蓝牙功能连接性、800 x 480 像素触摸屏和 64 MB 闪存(图 3)。除了网络浏览器,770 还配备了电子邮件客户端、媒体播放器、文件管理器、游戏和几个通用应用程序。诺基亚 770 可在线购买,售价 360 美元。在今年拉斯维加斯的消费电子展上,Sonos 推出了基于 Linux 的 ZonePlay

50、er ZP80(如图),它是无线系统的一部分,使用户能够将数字音乐流式传输到家中的音频设备。一旦您使用模拟或数字输出将 ZP80 连接到任何音频放大器设备,该设备就会成为无线、多房间数字音乐系统的一部分,您可以使用彩色 Sonos 控制器进行操作。 ZP80 包括一个自动检测的线路输入连接器,可以对任何传入的音频源进行数字编码,例如 Apple iPod、CD 播放器或卫星收音机。 Sonos ZonePlayer ZP80 零售价为 349 美元。如果您对 CE 使用的 Linux 比较陌生,您可以前往 CELF(消费电子 Linux 论坛)获取新闻、讨论和自定义源代码。该论坛的目标是通过公

51、开指定和管理面向 CE 的代码来增强用于 CE 设备的 Linux 的功能。您还可以在 HYPERLINK :/ linuxdevices / .linuxdevices找到有关 Linux CE 产品的信息。这包括有关 Linux 编程的最新新闻、文章和教程、现有分销商以及有关嵌入式系统主题的论坛。当下一代 CE 设备进入市场时,设计人员必须准备好提供具有复杂用户界面、网络连接和实时数据安全功能的定制应用软件。 Linux 提供了一个免版税的开源操作系统,并且内置了一些这样和那样的特性。事实上,互联网上有数百万免费的 Linux 兼容软件支持 CE 开发项目。有了这些好处以及越来越多的技术爱

52、好者,Linux 在 CE 行业一定有一个光明的未来。 HYPERLINK :/ /online/arm/7-1.htm t _blank 第7章嵌入式uClinux及其应用开发(一)本章从为 S 3C4510B 硬件平台构建嵌入式 uClinux 操作系统并在其上开发应用程序入手,逐步介绍如何在 Linux 环境下编写用户应用程序的方法和步骤。介绍在这个平台上使用什么样的工具来编写和编译你自己的应用程序。通过本章的学习,读者可以对嵌入式uClinux有一定的了解,掌握Linux和Windows下嵌入式系统应用开发的基本方法。本章主要包括:- 嵌入式uClinux系统概述- 使用开发工具 GN

53、U- 建立uClinux开发环境- 在uClinux下开发应用程序7.1 嵌入式uClinux系统概述在PC上开发应用程序的用户会有这样的感觉:PC拥有完整的操作系统,并提供了应用程序编程接口(API),开发的应用程序可以直接在操作系统上运行。虽然嵌入式系统的应用程序可以完全在裸板上运行,但为了使系统具备任务管理、定时器管理、内存管理、资源管理、事件管理、系统管理、消息管理、队列管理和中断处理,为了提供多任务处理和更好的系统资源分配,用户需要根据自己的硬件平台和实际应用选择合适的嵌入式操作系统(Embedded Operating System,以下简称EOS)。本节将结合本书中提到的硬件平台

54、S 4510B,介绍一个不带MMU的ARM微处理器的嵌入式操作系统uClinux。3CuClinux 是一个完全符合 GNU/GPL 约定、完全开放代码的操作系统,现在由 Lineo Corporation 支持和维护。 uClinux的发音是“you-see-linux”,它的名字来源于希腊字母“mu”和英文大写字母“C”的组合。 “mu”代表“micro”,字母“C”代表“controller”,所以可以从字面上看,即“微控制领域的Linux系统”。为了降低硬件成本和运行功耗,有一种CPU在设计中取消了内存管理单元(Memory Management Unit,以下简称MMU)功能模块。最

55、初,这些没有 MMU 的 CPU 运行在一些非常简单的单任务操作系统上,或者更简单的控制程序,甚至完全不使用操作系统直接运行应用程序。在这种情况下,系统无法运行复杂的应用程序,或者效率低下,所有应用程序都需要重写,并且需要程序员非常了解硬件特性。这些都阻碍了应用于此类 CPU 的嵌入式产品开发的速度。然而,随着 uClinux 的诞生,这一切都改变了。uClinux源自Linux 2.0/2.4内核,继承了主流Linux的大部分特性。它专门用于没有 MMU 的 CPU,并为嵌入式系统做了很多小型化。对于没有虚拟内存或内存管理单元 (MMU) 的处理器,例如 ARM7TDMI。它通常用于内存或闪

56、存很少的嵌入式系统。 uClinux 是对标准 Linux 的修正,以支持没有 MMU 的处理器。它保留了操作系统的所有特性,为硬件平台更好地运行各种程序提供了保障。在 GNU 通用公共许可证(GNU GPL)的保证下,运行 uClinux 操作系统的用户可以使用几乎所有的 Linux API 功能,而不受缺少 MMU 的影响。由于uClinux在标准Linux的基础上进行了适当的裁剪和优化,形成了高度优化、紧凑的嵌入式Linux。虽然体积很小,但uClinux仍然保留了Linux的大部分优点:稳定、可移植性好、网络功能优秀、对各种文件系统的支持完整、标准API丰富。图 7.1 显示了 uCl

57、inux 的基本架构。图 7.1 uClinux 的基本架构Boot Loader:负责Linux内核的启动,用于初始化系统资源,包括SDRAM。这部分代码用于搭建Linux内核运行环境,从Flash加载初始ramdisk。内核初始化:Linux内核的入口点是start_kernel()函数。它初始化内核的其他部分,包括捕获、IRQ 通道、调度、设备驱动程序、校准延迟循环,最重要的是能够派生“init”进程以启动整个多任务环境。系统调用函数/捕获函数:在“init”程序执行后,检查器不再直接控制程序流程,此后,它的作用只是处理异步事件(如硬件中断)并为系统调用。设备驱动程序:设备驱动程序占据了

58、 Linux 内核的很大一部分。与其他操作系统一样,设备驱动程序为它们控制的硬件设备和操作系统提供接口。文件系统:Linux 最重要的特性之一是它支持多个文件系统。此功能使 Linux 可以轻松与其他操作系统共存。文件系统的概念使用户能够查看存储设备上的文件和路径,而不管实际物理设备的文件系统类型如何。 Linux 透明地支持多种不同的文件系统,将各种已安装的文件和文件系统以完整的虚拟文件系统的形式呈现给用户。下面介绍一些与uClinux相关的知识。1. MMU(内存管理单元)和VM(虚拟内存)许多嵌入式微处理器不支持虚拟内存,因为它们没有 MMU。没有内存管理单元的好处是可以简化芯片设计,降

59、低产品成本。由于大多数嵌入式设备没有磁盘或内存空间非常有限,因此不需要复杂的内存管理机制。但是由于没有MMU管理,操作系统不保护内存空间,所有程序访问的地址都是实际的物理地址。但从嵌入式系统一般实现某种功能的角度来看,对于存储管理的需求可以由程序开发者考虑。2.实时支持uClinux 本身不支持实时,有两种不同的解决方案可以为 uClinux 提供实时支持,它们是 RTLinux (RTL) 和 RTAI (Real Time Application Interface)。通过这两种方案,uClinux可以应用于实时性要求高的场合。3.平台支持开发uClinux的工具链:uClinux 的开发

60、通常使用标准的 GNU 工具链。修改后的工具链支持一些高级特性,如 XIP(Execute-In-Place)技术、共享库支持等。用于 uClinux 的微控制器:uClinux适用于Motorola的ColdFire/Dragonball、ARM系列(如Atmel、TI、Samsung等生产的芯片)、Intel i960、Sparc(如没有MMU的LEON)、NEC v850,甚至可以开放综合(到CLPD) CPU 内核,例如 OPENcore。4.与标准Linux的兼容性除了 uClinux 不能实现 fork() 而是使用 vfork() 之外,其余 uClinux 的 API 函数与标

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论