嵌入式 Linux 应用概述.docx

上传人:b****3 文档编号:4368053 上传时间:2023-05-07 格式:DOCX 页数:15 大小:28.22KB
下载 相关 举报
嵌入式 Linux 应用概述.docx_第1页
第1页 / 共15页
嵌入式 Linux 应用概述.docx_第2页
第2页 / 共15页
嵌入式 Linux 应用概述.docx_第3页
第3页 / 共15页
嵌入式 Linux 应用概述.docx_第4页
第4页 / 共15页
嵌入式 Linux 应用概述.docx_第5页
第5页 / 共15页
嵌入式 Linux 应用概述.docx_第6页
第6页 / 共15页
嵌入式 Linux 应用概述.docx_第7页
第7页 / 共15页
嵌入式 Linux 应用概述.docx_第8页
第8页 / 共15页
嵌入式 Linux 应用概述.docx_第9页
第9页 / 共15页
嵌入式 Linux 应用概述.docx_第10页
第10页 / 共15页
嵌入式 Linux 应用概述.docx_第11页
第11页 / 共15页
嵌入式 Linux 应用概述.docx_第12页
第12页 / 共15页
嵌入式 Linux 应用概述.docx_第13页
第13页 / 共15页
嵌入式 Linux 应用概述.docx_第14页
第14页 / 共15页
嵌入式 Linux 应用概述.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式 Linux 应用概述.docx

《嵌入式 Linux 应用概述.docx》由会员分享,可在线阅读,更多相关《嵌入式 Linux 应用概述.docx(15页珍藏版)》请在冰点文库上搜索。

嵌入式 Linux 应用概述.docx

嵌入式Linux应用概述

嵌入式Linux应用:

概述

DarrickAddison(dtadd95@)

高级软件工程师/顾问,ASCTechnologiesInc.

2001年8月

在对嵌入式Linux的应用及其环境做了一番考察之后,接下来DarrickAddison将一步步地教您如何建立开发这些应用的软、硬件环境。

现在Linux广泛用于各类计算应用,不仅包括IBM的微型Linux腕表、手持设备(PDA和蜂窝电话)、因特网装置、瘦客户机、防火墙、工业机器人和电话基础设施设备,甚至还包括了基于集群的超级计算机。

让我们看一下Linux用作嵌入式系统需要提供哪些功能,以及它在目前可用的选择中最具吸引力的原因所在。

嵌入式系统的出现

用于控制设备的计算机,也叫做嵌入式系统,它的历史几乎和计算机自身的历史一样长。

它们最初于六十年代晚期在通讯中被用于控制机电电话交换机。

由于在过去的十多年里,计算机产业不断朝着更小的系统方向发展,嵌入式系统也与之一起为这些小型机器提供了更多的功能。

渐渐地,就需要把这些嵌入式系统连接到某种网络上,因而也就产生了对网络栈的要求,这提高了系统的复杂程度并要求更多的存储器和接口,还有,您猜对了,操作系统的服务。

七十年代晚期出现了用作嵌入式系统的现成的操作系统,现在有许多可行的选择方案。

其中,一些主要的竞争者开始崭露头角,比如,VxWorks、pSOS、Neculeus和WindowsCE。

在嵌入式系统中使用Linux的优点和缺点

虽然大多数Linux系统运行在PC平台上,但Linux也可以作为嵌入式系统的可靠主力。

Linux流行的“back-to-basics”方法使得它的安装和管理比UNIX更加简单灵活,这对于那些UNIX专家们来说又是一个优点,他们已经因为Linux中有许多命令和编程接口同传统的UNIX一样而赏识它了。

典型的压缩包装Linux系统经过打包,在拥有硬盘和大容量内存的PC机上运行,嵌入式系统可不要这么高的配置。

一个功能完备的Linux内核要求大约1MB内存。

而Linux微内核只占用其中很小一部分内存,包括虚拟内存和所有核心的操作系统功能在内,只需占用PentiumCPU系统的100K内存。

只要有500K的内存,一个有网络栈和基本实用程序的完全的Linux系统就可以在一台8位总线(SX)的Intel386微处理器上运行的很好了。

由于内存要求常常是需要的应用所决定的,比如Web服务器或者SNMP代理,Linux系统甚至可以仅使用256KBROM和512KBRAM进行工作。

因此它是一个瞄准嵌入式市场的轻量级操作系统。

与传统的实时操作系统相比(RTOS),采用象嵌入式Linux这样的开放源码的操作系统的另外一个好处是Linux开发团体看来会比RTOS的供应商更快地支持新的IP协议和其它协议。

例如,用于Linux的设备驱动程序要比用于商业操作系统的设备驱动程序多,如网络接口卡(NIC)驱动程序以及并口和串口驱动程序。

闪存

快闪RAM内存是大多数Palm设备用来存储操作系统的专用的存储器。

它具有允许操作系统升级的优点,还可以用于数字式蜂窝电话、数字式照相机、LAN交换机、PC卡、数字式机顶盒、嵌入式控制器和其它小型设备。

嵌入式系统,如嵌入式Linux,不要求有磁盘驱动器,尽管可能使用其它的内存组织方式。

因此如果,打个比方,Linux用完了闪存,它就可以将其中一部分作为只读的文件系统来存储额外的程序和静态数据。

核心Linux操作系统本身的微内核体系结构相当简单。

网络和文件系统以模块形式置于微内核的上层。

驱动程序和其它部件可在运行时作为可加载模块编译到或者是添加到内核。

这为构造定制的可嵌入系统提供了高度模块化的构件方法。

而在典型情况下该系统需结合定制的驱动程序和应用程序以提供附加功能。

嵌入式系统也常常要求通用的功能,为了避免重复劳动,这些功能的实现运用了许多现成的程序和驱动程序,它们可以用于公共外设和应用。

Linux可以在外设范围广泛的多数微处理器上运行,并早已经有了现成的应用库。

Linux用于嵌入式的因特网设备也是很合适的,原因是它支持多处理器系统,该特性使Linux具有了伸缩性。

因而设计人员可以选择在双处理器系统上运行实时应用,提高整体的处理能力。

例如,您可以在一个处理器运行GUI,同时在另一个处理器上运行Linux系统。

在嵌入式系统上运行Linux的一个缺点是Linux体系提供实时性能需要添加实时软件模块。

而这些模块运行的内核空间正是操作系统实现调度策略、硬件中断异常和执行程序的部分。

由于这些实时软件模块是在内核空间运行的,因此代码错误可能会破坏操作系统从而影响整个系统的可靠性,这对于实时应用将是一个非常严重的弱点。

另一方面,现成的RTOS完全是为实时性能而设计的,它通过在由用户而非系统级进程启动时分配给某个进程以高于其它进程的优先级的方式来实现可靠性。

进程在操作系统看来就是在内存里或硬盘驱动器上执行的程序。

给他们指定进程ID或者数字标识符为的是让操作系统跟踪正在执行的程序和这些程序的相关联的优先等级。

这样的方式保证了RTOS时间能比Linux提供更高的可靠性(可预见性)。

但最重要的,这还是一种更加经济的选择。

不同类型的嵌入式Linux系统

已经有许多嵌入式Linux系统的示例;可以有把握地说,某种形式的Linux能在几乎任一台执行代码的计算机上运行。

例如,ELKS(可嵌入Linux内核子集)方案计划在PalmPilot上使用Linux。

下面列出了一些更加广为人知的小型嵌入式Linux版本:

ETLinux—设计用于在小型工业计算机,尤其是PC/104模块上运行的Linux的完全分发版。

LEM—运行在386上的小型(<8MB)多用户、网络Linux版本。

LOAF—“LinuxOnAFloppy”分发版,运行在386上。

uClinux—在没有MMU的系统上运行的Linux。

目前支持Motorola68K、MCF5206和MCF5207ColdFire微处理器。

uLinux—在386上运行的tinyLinux分发版。

ThinLinux—面向专用的照相机服务器、X-10控制器、MP3播放器和其它类似的嵌入式应用的最小化的Linux分发版。

软件和硬件要求

许多的用户接口工具和程序增强了Linux基本内核的多功能性。

就此而论,可以把Linux看作是这样一个连续范围,从只有存储器管理、任务转换和定时器服务最小化的微内核一直到完整的一系列文件系统和网络服务的功能完善的服务器。

最小的嵌入式Linux系统仅需要三个基本元素:

∙引导实用程序

∙Linux微内核,由内存管理、进程管理和定时服务构成

∙初始化过程

要实现最低限度的工作能力,您还需要添加:

∙硬件驱动程序

∙一个或多个应用进程,以提供所需功能

随着要求的增加,您可能还需要:

∙一个文件系统(可能是在ROM或者是RAM里)

∙TCP/IP网络栈

∙储存半瞬态数据和提供交换空间的磁盘

∙32位内置CPU(所有完全的Linux系统都需要)

相关的硬件方案

下面是一些现有的为Linux操作系统定制的嵌入式硬件方案。

PLEB:

带有ARMSA-1100/ArmLinuxUcsimm/UclinuxFlashEPROM的袖珍Linux嵌入式机器。

LinuxLab:

LinuxLab方案旨在帮助人们开发Linux数据采集和过程控制软件。

它计划提供从硬件支持到应用开发的广阔范围内应用的标准化开发环境。

控制器域网:

LinuxGPIB的控制器域网(CAN)总线驱动程序;LinuxGPIB包是一个对普通GPIB(IEEE488.1)硬件的支持包。

驱动程序支持NationalInstrumentsAT-GPIB、TNT488.2以及PCII和PCIIa板。

这个包里有完整的开发环境,包括测试和配置工具、库以及对tcl和python语言的支持。

硬件平台选项

挑选最佳硬件的过程会相当复杂,问题起源于公司内部政策、成见、其它方案的遗留问题、缺乏全面的或者精确的信息以及成本—需考虑总的产品成本,而不仅仅是CPU本身。

有时,一旦把CPU使用其它外围设备所必需的总线逻辑和延迟时间考虑在内,那么快速而廉价的CPU也可能变得昂贵。

要计算任意给定的项目所需的CPU速度,首先要现实地看看为了完成一个给定的任务CPU得运行多快然后再乘以三。

还要确定总线需要运行多快。

如果还有二级总线,比如PCI总线,那么将它们也考虑在内。

一条慢的总线(即一条被DMA通信阻塞的总线)将会显著降低高速CPU的速度。

下面是一些嵌入式Linux应用的最佳硬件解决方案。

BrightStarEngineering:

BrightStarEngineering的ipEngine-1是支持嵌入式Linux的信用卡大小的单片机。

它利用了基于PowerPC的CPU,并提供了一组板上外设,有Ethernet、LCD/视频控制器、USB、串口I/O以及一个16K门的可由用户配置的FPGA。

BSE的嵌入式Linux配置允许Linux从ipEngine的板上4MB闪存中引导。

Calibri:

CalibriTM-133是将嵌入式Linux作为其操作系统来使用的网络设备,它方便使用、紧凑,并且可以用于多种用途。

它为防火墙、VPN和路由要求提供了一种高效、低成本的解决方案。

EmbeddedPlanet:

EmbeddedPlanet创造了后PC时代的计算机,它出现时就装有MontaVista的HardHatLinux。

由基于PowerPC的计算引擎和匹配的I/O卡驱动,LinuxPlanet装在一个彩色的透明盒子里并且带有触摸屏,还可以访问数字及模拟I/O。

Eurotech:

Eurotech提供了嵌入式PCSBC并资助了ET-Linux,一个为在小型工业计算机上运行而专门设计的基于glibc2.1.2的完全的Linux系统。

MicroprocessIngenierie:

Microprocess为产业和嵌入式市场开发、生产以及销售标准的和定制的产品。

Microprocess在实时软件方面活动范围遍及全球,并具有系统集成的专业知识。

它的产品,比如740PowerPCcompactPCI板可以与标准的Linux分发版或者嵌入式Linux版本一起订购。

MoretonBay:

MoretonBay发布基于Linux的Internet路由器,其范围在NETtel2520和NETtel2500之间。

这些小型的、易于连接的智能路由器解决方案设计旨在为平面网络提供简便、安全和价格适中的外部网友好的虚拟私有网络(VPN)。

NETtel路由器系列运行的是嵌入式Linux内核。

现有一套开发工具能够把定制代码存在闪存中并在NETtel内部执行。

代码可能含有特定的加密或者身份验证协议,或者在NETtel被用作远程控制设备代码时,会含有一些本地监视脚本。

MatrixOrbital:

这是个可选的、但不是推荐的附加项。

MatrixOrbital生产的一系列串行LCD和VFD被许多Linux用户添加到了他们的嵌入式系统中。

这条生产线的范围包括了8x2到40x4的字符LCDs、20x2和20x4的VFD加上240x64图形LC(128x128还在生产之中)。

运用显示器的通信不是通过RS232就是通过I2C实现的,两者都是其所有模块上的标准。

模块的BIOS中包含一个全面的命令集。

实时嵌入式Linux应用

有关嵌入式系统最重要的事务之一就是要求有一个实时操作系统。

这里实时有好几种定义。

对有些人来说,实时意味着在1微秒的时间内对事件作出反应,但对另外一些人来说,那就可能是50毫秒了。

实时的硬度也各不相同。

一些系统需要硬实时响应,在很短的时间内对事件作出确定性响应。

但是,当我们对许多系统进行仔细分析时,我们发现事实上对响应时间的要求只是接近实时。

实时的要求常常是时间和缓冲空间的折衷。

随着内存越来越便宜,CPU速度越来越快,现在接近实时比硬实时更加常见,许多商用的所谓实时操作系统远非硬实时。

通常情况下,当您进入这些系统的详细设计部分时,就需提高警惕必须非常仔细地设计驱动器的中断和应用以满足实时要求。

RT-Linux(实时扩展的Linux系统)里含有时间紧要的函数可以用中断管理器来精确控制中断处理,从而很好地确保了关键性中断可以在需要时得到执行。

这种方法的硬度主要取决于CPU中断结构和环境转换的硬件支持。

这种方法可以满足广泛范围内的实时要求。

即使没有实时扩展,Linux也能很好地处理多个事件流。

例如,运行于低端Pentium上的LinuxPC系统能让多个10BaseT接口有效地执行,同时又以全速的56KBPS运行字符级串口,而不会丢失任何数据。

值得考虑的实时硬件和软件LinuxAPI有RTLinux、RTAI、EL和Linux-SRT。

RTLinux是一个最初在新墨西哥理工学院开发的硬实时LinuxAPI。

RTAI(DIAPM)是由PolytechnicPolitecnicodiMilano(DIAPM)航天工程部的程序员们开发的RTLinux实时API的副产品。

EL/IX是一个计划中的基于POSIX硬实时LinuxAPI,由RedHat发起。

Linux-SRT是个实时API的软实时替代品,它可以使所有的Linux程序无需修改或者重新编译即可增强性能。

请参阅本文后面的参考资料部分,查找有关前面内容的资料和一些Web站点,那里提供了用于不同类型的标准Linux操作系统的软件扩展、开发工具、支持以及培训课程。

短暂的确定性响应时间

某些实时嵌入式系统需要迅速对外部事件作出响应,以完成一项特定任务。

比如,嵌入一枚导弹的一个定制的微控制器在指引导弹瞄准它周围环境的一个特定目标之前,需要迅速对诸如移动目标、天气和人等的外部事件作出迅速响应。

短暂的确定性响应时间是指嵌入式系统可以确定它对外部事件作出响应的时间。

配置步骤

现在让我们来看一下如何makeLEM,它是一个小型的可嵌入Linux分发版,既提供网络又提供X服务器。

您可以下载该分发版,尽管它并非必需。

您需要一个完全的Linux分发版来建立自己的嵌入式Linux操作系统,其中将包括您所需要的一切(实用程序、源代码、编译器、调试器和文档)。

下面是能用来makeLEM的软件列表:

TinyLogin:

TinyLogin是一套tinyUNIX实用程序,它用于登录嵌入式系统、接受其验证身份、为其修改密码,并能维护其用户和用户组。

为了增强系统安全性它还支持影子口令。

正如它的名字所暗示的,TinyLogin非常小,对嵌入式系统上的BusyBox是极好的补充。

BusyBox:

BusyBox是一个多调用的二进制文件,它提供了POSIX式的命令和专用函数的最小子集。

它适合于非常小的嵌入式系统,比如引导磁盘等等。

特别用于Debian拯救/安装系统(它激发了对最初的BusyBox的开发)、LinuxRouteur方案、LEM、lineo及其它地方。

Busybox是由ErikAndersen维护的。

Ash:

Ash是个非常小的Bourneshell。

Sysvinit:

Sysvinit是Linux最常用的init包。

我们将会用到init和C语言版start-stop-daemon。

请参阅参考资料部分以获得更多相关信息。

创建引导磁盘

引导磁盘本质上是一张装有微缩的、自含式Linux系统的软盘。

它可以执行许多和完全的Linux系统相同的功能。

下面的材料基于Bootdisk-HOWTO(请参阅参考资料)。

第1步:

Bios

所有的PC系统都是通过执行ROM(明确地说,BIOS)中的代码从引导磁盘的0柱面0扇区加载扇区,从而开始引导过程。

引导驱动器通常是第一个软盘驱动器(在DOS下指定为A:

,而Linux下指定为/dev/fd0)。

然后BIOS试图执行这个扇区。

大多数可引导磁盘的0柱面0扇区上包括了以下两种内容中的一种:

∙来自加载程序,比如LILO的代码,该加载程序定位、加载并运行内核以开始正常引导

∙一个操作系统,比如Linux的内核,的开头部分

如果Linux内核直接裸拷贝到磁盘、硬盘驱动器或者其它介质上,那么磁盘的第一个扇区将是Linux内核本身的第一个扇区。

第一个扇区从引导设备上加载内核的其余部分继续引导过程。

第2步:

引导加载程序

您可以用一个象LILO这样的加载程序执行引导过程。

它允许开发和生产平台在同一硬件上共存,并且允许通过重新引导来实现从一个平台到另一平台的切换。

LILO引导加载程序是由bios加载的。

然后它加载内核或者其它操作系统的引导扇区。

它还提供了一个简单的命令行接口,以根据其选项交互地选择要引导的项。

请参阅参考资料,获取更多关于LILO的信息。

第3步:

内核

内核检查硬件并加载根设备,然后查找根文件系统的init程序并执行该程序。

第4步:

Init

Init是将要在您的Linux操作系统上运行的所有其它进程的父进程。

它会观察其子进程,并在需要的时候启动、停止、重新启动它们。

Init从/etc/inittab获取所有信息。

第5步:

Inittab

/etc/inittab文件通过引用名为/etc/rc...的脚本安装系统。

它还拥有getty工具的条目用来处理登录过程。

第6步:

登录过程

对于每个允许用户使用的控制台,inittab文件里都有一个getty。

getty会启动/bin/login来验证用户口令。

第7步:

创建新的分区

摘自LFS-HOWTO(请参阅参考资料):

在安装新的Linux系统之前,我们需要一个空的Linux分区来安装新系统。

如果您已经有一个LinuxNative分区可用,您就可以跳过这一步和下面一步。

选择合适的硬盘(如/dev/hda,如果您想在基本的主IDE磁盘上建立新的分区的话)启动fdisk程序(或者cfdisk,如果您更喜欢cfdisk的话)。

创建一个LinuxNative分区,写入分区表并退出(c)fdisk程序。

如果您被通知需要重新引导系统以确保分区表被更新,那么请在继续下面的步骤之前重新引导系统。

第8步:

在新的分区上创建一个ext2文件系统

摘自LFS-HOWTO(请参阅参考资料):

我们用mke2fs命令创建一个新的ext2文件系统。

把$LFS作为唯一的选项,这样文件系统就建立了。

从现在起,我将把这个新建的分区称作$EMBPART。

$EMBPART应该被换成您创建的分区。

第9步:

加载分区

为了访问这个新建的文件系统,您必须安装它。

要安装分区,您要建立一个/mnt/hda?

目录并且在shell提示符下输入下列内容:

mkdir/mnt/hda?

mount$EMBPART/mnt/hda?

如果您在/dev/hda4建立了分区并把它安装到/mnt/hda4上,那么您需要返回到把文件复制到目录$EMBPART/usr/sbin下的那一步,并把那个文件复制到目录/mnt/hda4/usr/bin下。

完成了第14步的最后一个命令后再执行这一步(复制$EMBPART/usr/sbin目录下的文件)。

第10步:

填充文件系统

根文件系统必须包括支持一个完全的Linux系统所需的全部内容。

我们将要建立一个与文件层次标准(参见参考资料)相去不远的目录结构。

第11步:

目录

新安装的文件系统的mkdir命令建立了以下目录:

/proc

proc文件系统要求的目录存根

/etc

系统配置文件

/sbin

关键的系统二进制文件

/bin

被视为系统组成部分的基本的二进制文件

/lib

提供实时支持的共享库

/mnt

维护用的安装点

/usr

附加的实用程序和应用软件

∙cd/mnt/hda/

∙mkdirbindevhomeprocsbinusrbootetclivmntroottmpvar

∙mkdir-pusr/binusr/sbinusr/shareusr/lib

∙mkdir-petc/configetc/defaultetc/init.detc/rc.boot

∙mkdir-petc/rc0.detc/rc1.detc/rc2.detc/rc3.detc/rc4.detc/rc5.detc/rc6.detc/rcS.d

/dev

dev目录是执行设备输入/输出要求的存根。

这个目录下的每个文件都可以用mknod命令建立。

您可以用下面的指令从您的桌面Linux直接复制要求的dev条目以节省时间:

cp-dpR/dev/mnt

安装TinyLogin以及登录从属需求

TinyLogin(请参阅参考资料部分进行安装)将为您安装不足35kb的下列工具:

/bin/addgroup、/bin/adduser、/bin/delgroup、/bin/deluser、/bin/login、/bin/su、/sbin/getty、/sbin/sulogin和/usr/bin/passwd。

请参阅主要的发布文档或者手册页以获得关于这些命令的详细说明。

第12步:

配置TinyLogin

摘自TinyLoginREADME:

TinyLogin模块化后可以帮助您只配置必需的组件从而缩小二进制长度。

要关闭不想要的TinyLogin组件,只需编辑tinylogin.def.h文件并用C++风格的(//)注释将您不想要的部分注释掉。

第13步:

安装TinyLogin

在编译完成以后,生成了一个tinylogin.links文件,它随后被makeinstall用来为所有的内编译函数创建指向tinylogin二进制文件的符号连接。

缺省情况下,makeinstall会在pwd/_install中放入一个符号连接林,除非您已经定义了PREFIX环境变量。

第14步:

安装Sysvinit和start-stopdaemon

在内核加载完成后,它会运行init程序来结束引导进程。

现在:

1.解压缩Sysvinit归档文件

2.进入src目录

3.复制$EMBPART/sbin目录下的init可执行文件

Sysvinit包在contrib目录下也有C

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2