嵌入式系统及如何开发自己的嵌入式系统
多数Linux系统是在PC平台上运行,然而Linux作为嵌入式系统也是非常稳定的。本文描绘了一个嵌入式系统的概览,并展示嵌入式系统产品是如何使用Linux的。
嵌入式系统比摩西还老的故事
电脑用于控制设备或嵌入系统的历史几乎电脑自身的历史一样长。在通讯领域,六十年代晚期,电脑被用于电子电话交换机,称为“存储程序控制”系统。“电脑”这词那时并不普遍,存储程序指内存装有程序和例程信息。存储控制逻辑,而不是将其固化在硬件中,在当时确实是突破性的。今天,我们认为它本来就应如此。
那时的电脑是为每一个应用而定制的,按今天的标准,它们是一些不正常的、由奇怪的特殊指令和I/O设备集成在一部电脑中。
微处理器通过提供构建大系统模块的小型、低成本、CPU引擎改变了这一切。它提出了外设通过总线联接的固定硬件架构及称为编程的一般编程模型。
软件也随着硬件提出。最初,编写和测试软件只有简单的编程开发工具。每个项目实际运行的软件通常来自于草稿的修改。编程常用汇编语言或宏语言,因为编译器常常有缺陷和缺乏完善的调试工具。软件构建模块和标准化库只是到了七十年代才流行起来的概念。
嵌入式系统的商品化操作系统在1970年代后期才出现,许多是用汇编语言写成的,并且只能用于特定的微处理器,当微处理器被淘汰时,它的操作系统除非为新处理器重写,否则也要被淘汰。今天,许多这类早期的系统成了些模糊的记忆;还有谁记得MTOS吗?当C语言出现时,操作系统编写的效率、稳定性、可移植性都提高了很多。这一点在管理上立刻表现出来,它为微处理器被淘汰时保护软件投资带来了希望。对于市场来说这是一个好消息。用C语言写成的操作系统今天越来越普遍。一般来说,可重复使用的软件已经占主导并越做越好。
在八十年代早期,我最喜欢的操作系统是Wendon操作系统,大约150美元就可以得到一个C源码库。它是一个包,你可以通过选择部件建立自己的操作系统,类似在菜单上点菜。例如,你可以在库清单上点工作排程安排和内存管理方案。 很多嵌入式系统的商品化操作系统是在八十年代出现的。这一热潮持续到现在,今天,有很多可行的商品化操作系统可供选择。一些大佬出现了,如VxWorks, pSOS, Neculeus和Windows CE.
许多嵌入式系统根本没有操作系统,只有循环控制。对于一些简单设备这是足够的,但是随着系统越来越复杂,操作系统就很必要了或软件变得不可思议的复杂。不幸的是,有些复杂得可怕的嵌入式系统只因为设计者坚持不要操作系统才那么复杂。
渐渐地,更多嵌入式系统需要与各类网络联接,因此需要网络功能。即便是酒店的门把手也嵌入了微处理器与网络相联。 对于仅仅是编码控制循环的嵌入式系统,增加网络功能将导致系统复杂程度提高以致要求操作系统。
除了商品化操作系统,还有大量专用操作系统。其中大部分来自于草案,如CISCO的IOS;还有是从其他操作系统中派生出来的。例如,许多操作系统是从同一版本的Berkeley Unix系统派生,因为它有完整的网络功能。其他是基于主要操作系统的如KA9Q来自Phil Karn。
Linux作为嵌入式系统是一个带有很多优势的新成员。它对许多CPU和硬件平台都是可移植的、稳定、功能强大、易于开发。
工具包突破ICE的障碍
开发嵌入式系统的关键的是可用的工具包。像任何工作一样,好的工具使得工作更快更好。开发的不同阶段需要不同的工具。
传统上,首先用于开发嵌入式系统工具是内部电路仿真器(ICE),它是一个相对昂贵的部件,用于植入微处理器与总线之间的电路中,允许使用者监视和控制微处理器所有信号的进出。这有点难做,因为它是异体,可能会引起不稳定。但是它提供了总线工作的清晰状况,免了许多对硬件软件底层工作状况的猜测。
过去,一些工作依赖ICE为主要调试工具,用于整个开发过程。但是,一旦初始化软件对串口支持良好的话,多数的调试可以不用ICE而用其他方法进行。较新的嵌入式系统利用非常清晰的微处理器设计。有时,相应工作初始码已经有了能够快速获得串口工作。这意味着没有ICE人们也能够方便地工作。省去ICE降低了开发的成本。一旦串口开始工作,它可以支持各种专业开发工具。
Linux是基于GNU的C编译器,作为GNU工具链的一部分,与gdb源调试器一起工作。它提供了开发嵌入式Linux系统的所有软件工具。这有些典型的、用于在新硬件上开发嵌入式Linux系统的调试工具。{{分页}}
1. 写入或植入引导码
2. 向串口打印字符串的编码,如“Hello World”(事实上我更喜欢“Watson,Come hre I need you”,电话上常用的第一个词。)
3. 将gdb目标码植入工作串口,这可与另一台运行gdb程序的Linux主机系统对话。只要简单地告诉gdb通过串口调试程序。它通过串口与测试机的gdb目标码对话,你可以进行C源代码调试,也可以用这个功能将更多的码载入RAM或Flash Memory中。
4. 利用gdb让硬件和软件初始化码在Linux内核启动时工作。
5. 一旦Linux内核启动,串口成为Linux控制口并可用于后续开发。利用kgdb,内核调试版的gdb,这步常常不作要求,如果你与网络联接,如10BaseT,下一步你可能要启动它。
6. 如果在你的目标硬件上运行了完整的Linux内核,你可以调试你的应用进程。利用其他的gdb或覆盖gdb的图形如xgdb。
什么是实时系统?
嵌入式系统常常被错误地分为实时系统,尽管多数系统一般并不要求实时功能。实时是一个相对的词,纯化论者常常严格地定义实时为对一事件以预定的方式在极短的时间如微秒作出响应渐渐地,在如此短暂时间间隔内的严格实时功能在专用DSP芯片或ASIC上实现了。只有在设计低层硬件FIFO、分散/聚集DMA引擎和定制硬件时才会有这样的要求。
许多设计人员因为对真实的要求设有清晰的理解而对实时的要求焦虑不安。对于大多数的系统,在一至五微秒的近似实时响应已经足够。同样软需求也是可以接受的。如 Windows 98 已经崩溃的中断必须在4毫秒内(
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论