华恒的 嵌入式LINUX 入门

更新时间:2023-10-12 12:51:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

嵌入式LINUX解决方案

华恒公司是国内最早进行嵌入式Linux技术研发的公司之一。华恒公司先后推出了国内第一个嵌入式Linux的SOHO路由卡;国内第一个手持设备、PDA用的嵌入式Linux开发板;国内第一块工控应用的嵌入式uCLinux开发板。

华恒公司为客户提供了一个从硬件到系统软件的开放的平台,为客户的应用开发提供了一个低成本、高效易用的Internet接入的全面解决方案。

采用华恒嵌入式LINUX全面解决方案:

◆高性价比:国人自主开发保证了该解决方案的低成本高性能。

◆领先的硬件设计开发能力:华恒公司是能够提供硬件技术的嵌入式Linux供应商,其深厚的电信技术背景及其丰富的嵌入式系统、Linux系统的设计开发经验赋予客户强大的信心及可靠的技术支持。 ◆提供全中文软硬件开发培训:为客户带来嵌入式处理器的开发调试技术、板级硬件设计及软硬件系统整合技术能力。

◆华恒公司与著名高校的研究机构有着长期合作的协议,并与微处理器制造的业界领导厂商进行深入合作。这些良好的资源,也为我司客户的最终产品设计提供了强有力的支持。

◆丰富的资源:华恒公司长期支持并不断发起多项基于其嵌入式Linux开发平台的开源项目,并将源代码及时公布在技术网站上,对客户的开发进行技术指引及代码支持。

嵌入式Linux

随着微处理器的产生,价格低廉、结构小巧的CPU 和外设连接提供了稳定可靠的硬件架构,那么限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有Vxwork、pSOS、Neculeus和Windows CE。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。另外,结合国内实情,当前国家对自主操作系统的大力支持,也为源码开放的Linux的推广提供的广阔的发展前景。还有,对上层应用开发者而言,嵌入式系统需要的是一套高度简练、界面友善、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。在不久的将来,从冰箱到收音机都会内置处理器。因为Linux的开放性,许多人认为Linux非常适合多数Internet设备。他们认为Linux可以支持不同的设备,支持不同的配置。Linux对厂商不偏不倚而且成本极低,能够很快成为用于各种设备的操作系统。如今,业界已经达成共识:即嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。

嵌入式操作系统主要有 Palm OS,Windows CE,EPOC,LinuxCE,QNX,ECOS,LYNX,高端嵌入式系统要求许多高级的功能,如图形用户界面和网络支持 。很多高端RTOS供应商已经提供了这些功能,但其价格也很高端,一般人难以接受。微软的Windows CE也有此类功能,却不具备大多数嵌入式系统要求的实时性能,而且难以移植,也曾经有人想以DOS为基础用单独的第三方工具拼凑一个系统,但这种努力将是白费。现在需要的是一个便宜、成熟并且提供高端嵌入式系统所必须特性的操作系统,嵌入式Linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为新兴的力量,所以,众多商家纷纷转向了嵌入式linux。

Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix相似、以核心为基础的、完全内存保护、多任务多进程的操作系统。支持广泛的计算机硬件,包括X86 ,Alpha, Sparc, MIPS, PPC, ARM, NEC, MOTOROLA 等现有的大部分蕊片。程式源码全部公开,任何人可以修改并在GNU通用公共许可证(GNU General Public License)下发行,这样,开发人员可以对操作系统进行定制,再也不必担心像MS Windows 操作系统中\后门\的威胁。同时由于有GPL的控制,大家开发的东西大都相互兼容,不会走向分裂之路。Linux 用户遇到问题时可以通过Internet向网上成千上万的Linux开发者请教,这使最困难的问题也有办法解决。Linux 带有Unix 用户熟悉的完善的开发工具,几乎所有的Unix系统的应用软件都已移植到了Linux 上。

Linux还提供了强大的网络功能,有多种可选择窗口管理器(X windows)。其强大的语言编译器gcc、g++等也可以很容易得到。不但成熟完善、而且使用方便。

选择linux的原因

◆可应用于多种硬件平台。Linux 已经被移植到多种硬件平台,这对受开销、时间限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发然后移植到具体的硬件上,加快了软件与硬件的开发过程。

◆Linux可以随意地配置不需要任何的许可证或商家的合作关系。

◆它是免费的,源代码可以得到。这是最吸引人的。毫无疑问,这会节省大量的开发费用。 ◆它本身内置网络支持。

◆Linux的高度模块化使添加部件非常容易。

◆Linux在台式机上的成功,使大家看到了linux在嵌入式系统中的辉煌前景。

嵌入式系统及如何开发自己的嵌入式系统

--由JoelR.Williams提供

多数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毫秒内(±98%)内、或20毫秒(±0)内进行处理。

这种软要求是比较容易满足的,包括环境转换时间、中断等待时间、任务优先级和排序。环境转换

时间曾是操作系统的一个热门话题。总之,多数 CPU 这些要求处理得很好,而且CPU的速度现在已经快了很多,这个问题也就不重要了。

严格的实时要求通常由中断例程或其他内核环境驱动程序功能处理,以确保稳定的表现,等待时间,

一旦请求出现要求服务的时间很大程度上取决于中断的优先及其他能暂时掩盖中断的软件。

中断必须进行处理和管理以确保时间要求能符合,如同许多其他的操作系统。在IntelX86处理器中,

这工作很容易由Linux实时扩展处理。这是提供了一个以后台任务方式运行Linux的中断处理调度。关键的中断响应不必通知Linux。因此可以得到许多对于关键时钟的控制。在实时控制级和时间限制宽松的基本Linux级之间提供接口,这提供了与其他嵌入式操作系统相似的实时框架。因此,实时关键代码是隔开的、并“设计”成满足要求的。代码处理的结果是以更一般的方法也许只在应用任务级。

嵌入式系统定义

一个观点是如果一个应用没有用户界面,它必须是嵌入式的,因为用户不能直接与之交互。当然这

是简单化的。一个电梯控制的电脑被认为是嵌入式的:按键选择楼层指示灯显示电梯的停层。对于联网的嵌入式系统,如果系统包含监视和控制的网络浏览器,这种界限就更加模糊了。更好些的定义注重系统的集中的功能和主要的目的。

因为Linux提供了完成嵌入功能的基本的内核和你所需要的所有用户界面,它是多面的。它能处理

嵌入式任务和用户界面。将Linux看作是连续的统一体,从一个具有内存管理、任务切换和时间服务及其他的分拆的、微内核到完整的服务器,支持所有的文件系统和网络服务。 一个小型的嵌入式Linux系统只需要下面三个基本元素: 引导工具

Linux微内核,由内存管理、进程管理和事务处理构成 初始化进程:

如果要让它能干点什么且继续保持小型化,还得加上: 硬件驱动程序

提供所需功能的一个或更多应用程序。 再增加功能,或许需要这些

一个文件系统(也许在ROM或RAM中) TCP/IP网络堆栈

存储半过渡数据和交换用的磁盘。

硬件平台

选择最好的硬件是一个复杂的工作、充满了公司其他项目的政治、偏见、传统,缺乏完整或精确的

信息。 成本经常是关键的议题。当考虑成本时、确信你在考虑产品的整个成本、不仅是CPU。有时快的、便宜的CPU一旦加上总线逻辑和时延使之与外设一起工作,能变成一个昂贵的狗的产品。如果你在寻找软件,首先是硬件已经有产品了。如果你是系统设计者,由你决定制定实时的预算及硬件的工作是否满意。

现实中需要多快的CPU来完成一项工作,然后放大三倍。奇怪,CPU理论上的速度竟与现实中一

样,别忘了应用程序将会充分利用cache。

想象总线的速度需要多快,如果有其他总线如PCI总线,包括进来。慢的总线或产生DMA阻塞的

总线会降低CPU的速度造成拥挤。 有集成设备的CPU是好的,因为只须调试很少的设备,并且支持通用CPU的驱动程序通常都很容易获得。在我的项目中,芯片与外设的联接经常出问题或不满足我们所需的兼容性。因为外设是集成的,不要认为这会便宜。

将10斤重的Linux塞入只能装5斤的袋中

对于Linux一个共同的认识是它用于嵌入式系统简直是神奇极了。这可能不大对,典型的PC上的

Linux 对PC用户来说功能有多。

对初学者而言,可以将内核与任务分开,标准的Linux内核通常驻留在内存中,每一个应用程序都

是从磁盘运到内存上执行。当程序结束后,它所占用的内存就被释放,程序就被下载了。

在一个嵌入式系统里,可能没有磁盘。有两种途径可以消除对磁盘的依赖,这要看系统的复杂性和

硬件的设计。

在一个简单的系统里,当系统启动后,内核和所有的应用程序都在内存里。这就是大多数传统的嵌

入式系统工作模式,它同样可以被Linux支持。

有了Linux,就有了第二种可能性。因为Linux已经有能力“加载”和“卸载”程序,一个嵌入式系统就

可以利用它来节省内存。试想一个典型的包括一个大概8MB到16MB的Flash Memory和8MB内存的系统。Flash Memory可以作为一个文件系统。Flash Memory驱动程序用来连接Flash Memory和文件系统。作为替代,可使用Flash Disk。这Flash部件用软件仿真磁盘。其中一个例是M-Systems的DiskOnChip,可以达到160MB。(http://www.m-systems.com)。所有的程序都以文件形式存储在Flash文件中,需要时可以装入内存。这种动态的、“根据需要加载”的能力是支持其它一系列功能的重要特征:

它使初始化代码在系统引导后被释放。Linux同样有很多内核外运行的公用程序。这些通常程序在

初始化时运行一次,以后就不再运行。而且,这些公用程序可以用它们相互共有的方式,一个接一个按顺序运行。这样,相同内存空间可以被反复使用以“召入”每一个程序,就象系统引导一样。这的确可以节省内存,特别是那些配置一次以后就不再更改的网络堆栈 如果Linux可加载模块的功能包括在内核里,驱动程序和应用程序就都可以被加载。它可以检查硬件环境并且为硬件装上相应的软件。这就消除了用一个程序占用许多Flash Memory来处理多种硬件的复杂性。

软件的升级更模块化。你可以在系统运行的时候在Flash上升级应用程序和可加载驱动程序。 配置信息和运行时间参数可以作为数据文件储存在Flash上。

非虚拟内存

标准 Linux 的另一个待征是虚拟内存的能力。正是这种神奇的特征使应用程序员可以狂热的编写代

码而不计后果,不管程序有多大。程序溢出到了磁盘交换区。在没有磁盘的嵌入式系统里,通常不能这么做。

在嵌入式系统里不需要这种强大的功能。实际上,你可能不希望它在实时的关键系统里,因为它会

带来无法控制的时间因素。这个软件必须设计得更加精悍,以适合市面上物理内存,就象其它嵌入式系统一样。

注意由于CPU的原因,通常在Linux中保存虚拟内存代码是明智的,因为将它清除很费事。而且还

有另外一个原因是它支持共享文本,这样就可以使许多程序共享一个软件。没有这个,每一个程序都要有它自己的库,就象printf一样。

虚拟内存的调入功能可以被关掉,只要将交换空间的大小设置为零。然后,如果你写的程序比实际

的内存大,系统就会当作你的运行用尽了交换空间来处理;这个程序将不会运行,或者malloc将会失灵。

在许多CPU上,虚拟内存提供的内存管理可以将不同程序分开,防止它们写到其它地址的空间上。

这在嵌入式系统上通常不可能,因为它只支持一个简单、扁平的地址空间。Linux的这种功能有助于其发

本文来源:https://www.bwwdw.com/article/6eqf.html

Top