




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SHELL设计与实现摘要SHELL的开发与使用是LINUX操作系统日渐普及的产物。而对于微型LINUXSHELL的研究是LINUX研究的重点。利用微型的SHELL,不仅可以让用户更容易操作LINUX,也可以帮助用户理解LINUX工作原理,同时保护内核的安全性。本文对SHELL的研究包括对其功能的了解,并实现对SHELL的列表、管道、输入重定向、输出重定向等命令功能,可以比较全面地认识SHELL解释器,编写出可以实现的各种功能的具体代码,这样来编写一个简易的LINUXSHELL解释器。在本文中所编写的SHELL是专门用于嵌入式设备的,在此类设备中,往往存储量小,功耗较低,但是对要求很苛刻,所以有一定的难度。本文的主要内容现先是介绍了一下SHELL的发展历史、特点和应用前景,紧接着解释SHELL与嵌入式的关系,大致了解一下LINUX与安卓在嵌入式开发中的地位。还罗列了SHELL的开发技术与UNIX系统编程。最终详细设计了SHELL的工作原理,并且附上了相关源代码,使得读者有一个大致了解。本系统全程采用C语言与UNIX系统高级编程开发,由本人独立完成。本系统对嵌入式开发人员操作LINUX系统内核与文件系统有较大帮助。关键词SHELL;程序;设计与实现;嵌入式DESIGNANDDEVELOPMENTOFLINUXSHELLSYSTEMABSTRACTACCOMPANIEDBYTHEPOPULARIZEOFTHELINUX,MOREANDMOREPEOPLEAREDOINGDEEPLYSTUDYINITTHESTUDYOFTHESHELLINLINUXISTHEMOSTIMPORTANTTHINGWHENSTUDYTHELINUXANDHOWTOSTUDYITMAINLYINCLUDESTHEUNDERSTANDOFSOMEKNOWLEDGEANDFUNCTIONOFTHEMICROLINUXSHELLTHROUGHTHESTUDYOFTHEORDERSINSHELLLIKELIST,PIPE,INPUTREDIRECTANDOUTPUTREDIRECT,READERSCANHAVEATHOROUGHSENSEABOUTTHESHELLANDLEARNTOUSETHESEORDERSACCURATELYINSHELLWHICHPLAYANIMPORTANTROLEINPROGRAMMINGLATERCODEACCURATELYANDACHIEVEASIMPLESHELLWITHTHEFUNCTIONSABOVEAFTERANALYZINGTHEDETAILSOFEVERYFUNCTIONSMODULEMOREOVER,INTHEEMBEDDEDFIELD,THEHARDWARERESOURCESARELIMITED,BUTDEMANDISUNLIMITEDTHISMEANSTHEYHAVETOUSELIMITEDRESOURCESTOACCOMPLISHAVARIETYOFNEEDS,ANDEMBEDDEDDESIGNANDPROGRAMMINGINTHETRADITIONALPC,ISVERYDIFFERENT,ANDITOFTENREQUIRESONLYASMALLPARTOFALARGEPROGRAMONMEETITSNEEDS,SOWEHADTOCUTOUTANUMBEROFUSELESSPROGRAMSINEXCHANGEFORSPACEINTHEEMBEDDEDFIELD,ASTHETRADITIONALKSHELL,CSHELL,BOURNESHELLANDOTHERLARGESCALESHELLPROGRAMWILLMAKEOURHARDWARERESOURCESARESTRETCHEDSOWENEEDAMORESUITABLEFOREMBEDDEDSYSTEMSUSEDINTHESHELL,THISISMYANOTHEROBJECTIVEOFTHISDESIGNKEYWORDSSHELLPROCESSDESIGNANDACHIEVEEMBEDDED目录摘要IABSTRACTII前言11绪论211SHELL的使用212嵌入式LINUX213嵌入式LINUX应用特点314发展前景42LINUXSHELL与嵌入式简介521SHELL的定义5211UNIXSHELL6212LINUXSHELL622SHELL的历史723SHELL的作用724SHELL的职责825嵌入式简介826安卓与LINUX103LINUXSHELL的设计及相关技术1331简单SHELL设计思想1332复杂SHELL设计思想13321作业及作业前后调度实现方法13322管道1333相关函数介绍144MYSHELL的实现2041MYSHELL简介2042MYSHELL的具体实现(附代码)20421MAIN主函数的实现20422分功能的实现245效果图25参考文献31致谢32外文原文33中文翻译39前言当我第一次开始使用突然面对各种UNIX程序,会有很多的问题,如“功能”是什么,“我如何使用它们”。其实LINUX中的SHELL很简单,下面我们简单介绍一下LINUXSHELL提供了用户与内核进行交互的机制,是操作系统的命令行界面。它的主要工作是分析用户的指令并调度内核执行。内核的执行是及其小心的,人为干预是很危险的,因此SHELL提供了一个安全的操作内核的途径。直观地来看SHELL是一种解释命令的程序,它可以将用户输入的贴近人类语言的表述解释给内核处理。不但如此,SHELL还有自己语法并以此用于对命令的编辑,用户可以利用它写出由SHELL命令组成的脚本。在编写过程中你会爱发现,SHELL编程语言与很多其他的编程语言风格相似,例如它也有C语言一样的循环逻辑和分支控制等,用此编程语言编写的SHELL脚本程序能达到与其他程序一样的效果。早期的LINUX只有内核和命令行,为了方便用户的使用,LINUX又提供了与WINDOWS相似的友好的可视化图形界面,使得操作变得更加简单方便。这就是XWINDOWS。它像WINDOWS一样为用户提供窗口、图标以及菜单等显示部件。有了它,用户就可以在LINUX环境中从众多的代码行中解脱出来,利用鼠标就可快速对内核和环境进行配置。WINDOWS系统内核自带图形界面,但是LINUX内核不自带界面,因此在LINUX领域中,图形界面主要靠第三方公司进行开发,KDE和GNOME都是很流行的窗口管理器工具。当然SHELL就实现了这一点,利用它可以对系统进行文件管理和事务管理等等的功能。每一位LINUX用户都可以拥有属于自己的或者特制的SHELL版本。这样可以使得他们的特定需求得到满足。与开发LINUX相似,人们在开发了多种版本LINUX的同时,也开发了很多版本的SHELL。比如BOURNESHELL贝尔实验室在1977年底发布的。BASHBOURNEAGAINSHELL的缩写,是GNU操作系统上默认的SHELL。KORNSHELL是对BOURNESHELL的发展,在大部分内容上与BOURNESHELL兼容。CSHELL是SUN公司SHELL的BSD版本。作为一名以UNIX/LINUX系统为主进行C语言程序开发的大学生,我对SHELL的强大功能和编写技巧有所体会。本论文详细介绍了SHELL是怎么样工作和组成的,对SHELL设计做一些简单的研究。虽然达不到原版LINUX系统那样的效果,但是却有自己的独到的见解。可以供广大爱好者参考。1绪论LINUX是一套免费使用和自由传播的类UNIX操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。LINUX继承了UNIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。LINUX操作系统诞生于1991年的10月5日(这是第一次正式向外公布的时间)。LINUX存在着许多不同的LINUX版本,但它们都使用了LINUX内核。LINUX可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,LINUX这个词本身只表示LINUX内核,但实际上人们已经习惯了用LINUX来形容整个基于LINUX内核,并且使用GNU工程各种工具和数据库的操作系统。SHELL是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上SHELL是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,SHELL有自己的编程语言用于对命令的编辑,它允许用户编写由SHELL命令组成的程序。SHELL编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的SHELL程序与其他应用程序具有同样的效果。11SHELL的使用不论是哪一种SHELL,它最主要的功用都是解译使用者在命令列提示符号下输入的指令。SHELL语法分析命令列,把它分解成以空白区分开的符号(TOKEN),在此空白包括了跳位键(TAB)、空白和换行(NEWLINE)。如果这些字包含了METACHARACTER,SHELL将会评估(EVALUATE)它们的正确用法。另外,SHELL还管理档案输入输出及幕后处理(BACKGROUNDPROCESSING)。在处理命令列之后,SHELL会寻找命令并开始执行它们。SHELL的另一个重要功用是提供个人化的使用者环境,这通常在SHELL的初始化档案中完成(PROFILE、LOGIN、CSHRC、TCSHRC等等)。这些档案包括了设定终端机键盘和定义窗口的特征;设定变量,定义搜寻路径、权限、提示符号和终端机类型;以及设定特殊应用程序所需要的变量,例如窗口、文字处理程序、及程序语言的链接库。KORNSHELL和CSHELL加强了个别化的能力增加历程、别名、和内建变量集以避免使用者误杀档案、不慎签出、并在当工作完成时通知使用者。SHELL也能当解译性的程序语言(INTERPRETEDPROGRAMINGLANGUAGE)。SHELL程序,通常叫做命令文件,它由列在档案内的命令所构成。此程序在编辑器中编辑(虽然也可以直接在命令列下写作程序,ONLINESCRIPTING),由UN命令和基本的程序结构,例如变量的指定、测试条件、和循环所构成。您不需要编译SHELL命令档。SHELL本身会解译命令档中的每一行,就如同由键盘输入一样。SHELL负责解译命令,而使用者则必须了解这些命令能做什么。这本书的索引列出了一些有用的命令和它们的使用方法。12嵌入式LINUX嵌入式LINUX是将日益流行的LINUX操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式LINUX既继承了INTERNET上无限的开放源代码资源,又具有嵌入式操作系统的特性。嵌入式LINUX的特点是版权费免费购买费用媒介成本技术支持全世界的自由软件开发者提供支持网络特性免费,而且性能优异,软件移植容易,代码开放,有许多应用软件支持,应用产品开发周期短,新产品上市迅速,因为有许多公开的代码可以参考和移植,实时性能RT_LINUXHARDHATLINUX等嵌入式LINUX支持,实时性能稳定性好安全性好。如果分别让10位工程师给出嵌入式系统的定义,将得到10个不同的答案。一般来说,大部分的嵌入式系统执行特定的任务。我们假定最简单的嵌入式系统包括输入/输出功能,以及一些控制逻辑,该系统基于它的配置执行某些类型的功能。按照这个标准,可以认为一个包含实现控制逻辑74123计数器以及一个状态是一个嵌入式系统。也许可以补充说,该系统必须可通过存储在固件中的软件进行编程。这个新的嵌入式系统定义包括输入/输出I/O,以及存储在系统固件中的控制逻辑。一个带有鼠标、键盘、网络连接并运行图形用户界面GUI,GRAPHICALUSERINTERFACE多任务操作系统的桌面计算机显然满足这些要求,但我们能认为它是一个嵌入式系统吗如果桌面计算机不是一个嵌入式系统,那么手持设备呢它们有I/O功能,可以运行存储在固件中的控制逻辑。有人说,桌面计算机和手持设备都有通用计算机设备,可以运行软件来执行许多不同的任务,与之不同的是,嵌入式系统例如,洗碗机控制器或飞行导航系统主要是为特定任务而设计的。这种特定的功能限定使嵌入式设备有功能上的唯一性。如果是这样,为什么一些嵌入式系统设计成具有附加的功能,如存储在非易失性存储器中的程序,并且具有运行可以完成原始设计范围之外的任务的多任务操作系统的能力呢在过去,区分嵌入式系统和通用计算机比简单得多。例如,可以很容易地区分出一个基于8051的T1分幅卡嵌入式系统和一台SUNUNIX工作站。从功能方面很难区分一台SUN工作站和一个包含POWERPC以及32MB内存和16MB闪存的机顶盒。这样的机顶盒可以运行带GUI的多任务操作系统,可现场升级,可以同时运行多个程序如视频控制器、数字录像和JAVA虚拟机,还可以进行安全的因特网在线交易。很难判断这种机顶盒是否是一个嵌入式系统。显然,硬件性能的提升和价格的下降使通用计算机和嵌入式系统之间的界限变得很模糊,技术的进步使得我们很难定义什么是嵌入式。13嵌入式LINUX应用特点嵌入式LINUX的应用领域非常广泛,主要的应用领域有信息家电、PDA、机顶盒、DIGITALTELEPHONE、ANSWERINGMACHINE、SCREENPHONE、数据网络、ETHERNETSWITCHES、ROUTER、BRIDGE、HUB、REMOTEACCESSSERVERS、ATM、FRAMERELAY、远程通信、医疗电子、交通运输计算机外设、工业控制、航空航天领域等。就是利用LINUX其自身的许多特点,把它应用到嵌入式系统里。LINUX做嵌入式的优势,首先,LINUX是开放源代码的,不存在黑箱技术,遍布全球的众多LINUX爱好者又是LINUX开发者的强大技术支持;其次,LINUX的内核小、效率高,内核的更新速度很快,LINUX是可以定制的,其系统内核最小只有约134KB。第三,LINUX是免费的OS,在价格上极具竞争力。LINUX还有着嵌入式操作系统所需要的很多特色,突出的就是LINUX适应于多种CPU和多种硬件平台,是一个跨平台的系统。到目前为止,它可以支持二三十种CPU。而且性能稳定,裁剪性很好,开发和使用都很容易。很多CPU包括家电业芯片,都开始做LINUX的平台移植工作。移植的速度远远超过JAVA的开发环境。也就是说,如果今天用LINUX环境开发产品,那么将来换CPU就不会遇到困扰。同时,LINUX内核的结构在网络方面是非常完整的,LINUX对网络中最常用的TCP/IP协议有最完备的支持。提供了包括十兆、百兆、千兆的以太网络,以及无线网络,TOKERRING令牌环网、光纤甚至卫星的支持。所以LINUX很适于做信息家电的开发。还有使用LINUX为的是来开发无线连接产品的开发者越来越多。LINUX在快速增长的无线连接应用主场中有一个非常重要的优势,就是有足够快的开发速度。这是因为LINUX有很多工具,并且LINUX为众多程序员所熟悉。因此,我们要在嵌入式系统中使用LINUX操作系统。LINUX的大小适合嵌入式操作系统LINUX固有的模块性,适应性和可配置性,使得这很容易做到。另外,LINUX源码的实用性和成千上万的程序员热切期望它用于无数的嵌入式应用软件中,导致很多嵌入式LINUX的出现,包括EMBEDIX,ETLINUX,LEM,LINUXROUTERPROJECT,LOAF,UCLINUX,MULINUX,THINLINUX,FIREPLUG,LINUX和PIZZABOXLINUX相比微软,LINUX的图形界面发展很快,像GNOME,KDE,UTITY等都是很优秀的桌面管理器,并且其背后有着众多的社团支持,可定制性强,已经在UNIX和LINUX世界普及开来。14发展前景有巨大的市场前景和商业机会,出现了大量的专业公司比如MONTAVISTALINEOEMI等,有行业协会如EMBEDDEDLINUXCONSORTUM等,得到世界著名计算机公司和OEM板级厂商的支持,例如IBMMOTOROLAINTEL等。传统的嵌入式系统厂商也采用了LINUX策略,如LYNXWORKSWINDRIVERQNX等,还有INTERNET上的大量嵌入式LINUX爱好者的支持。嵌入式LINUX支持几乎所有的嵌入式CPU和被移植到几乎所有的嵌入式OEM板。2LINUXSHELL与嵌入式简介21SHELL的定义SHELL是一种专用于用户与操作系统内核交互运行的脚本程序,如图11所示,SHELL是计算机使用者与UNIX/LINUX系统内核进行交流的渠道。内核是操作系统的核心,涵盖资源管理、进程调度等众多内容。内核在开机的时候由BOOTLOADER引导时载入内存,关机之前一直由它管理计算机资源。它的主要功能是进程管理、物理资源管理、文件处理和计算机间及进程间通信等。内核始终运行在内存上,其余的应用程序保存在磁盘上。当用户打开这些应用时,应用程序便统统由内核加载到内存中运行。当用户关闭应用时,便相当于对程序发送信号,内核关闭应用并且进行资源回收。SHELL伴随着用户的登陆而启动。用户在终端中输入SHELL指令。随后便可以解释执行。图21SHELL的模型SHELL是在用户登陆成功后便开始运行的,这时候它会提醒用户开始输入命令并将其进行处理。用户输入完成口令时,SHELL先用词法分析器对其进行词法分析、分割。再将分割处理后的口令交由内核来进行完成。比如管道、重定向、通配符等。内核会逐一匹配,完成任务。广大的LINUX使用者均是通过在终端的键入口令交由SHELL处理来达成与内核的交互。用户在输入一些相似的命令的时候,肯定很乐意看到这些工作可以由计算机自行完成。因此人们发明了SHELL脚本。用一个文件涵盖所有的命令,这就是SHELL脚本,随后运行这个文件,就可实现SHELL命令的自动执行。它的功能相当于系统批处理文件,用一个文件包含所有的SHELL指令,然后通过执行便可完成所有工作。SHELL脚本除了这些功能以外还提供了强大的逻辑处理语句,比如判断、循环、匹配等等。这中逻辑处理与其他的程序设计语言都是相通的,因此对于初学者来说就显得很简单。但是,SHELL的使用并不是懂了语法后就可以进行的,它需要用户对操作系统有一定的了解。要了解内核的工作方式,系统提供了GREP、SED和AWK等工具。学会使用这些工具对处理命令输出和输入文件时会发挥出极大的作用。学会使用SHELL脚本的编写执行后就可以把它看做是一种编程语言了,而内核就是它的编译器。211UNIXSHELL总的来说市场上绝大部分UNIX内核都支持这三种主流的SHELL。在运行的时候虽然他们的功能非常相似,但是毕竟是三种不同的脚本语言,因此语法有区别,运行效率也有很大不同。首先来看BOURNESHELL。它是标准的UNIXSHELL。在系统管理领域的使用尤为广泛。它提供了一种简洁、高效、快速的SHELL脚本编写方式。在该版本SHELL中管理员常以ROOT身份进行操作。它的命令提示符是。然后来看CSHELL。它是由美国加州大学伯克利分校在上世纪八十年代开发的一个版本,开发者为BILLJOY。他的目的是为了让用户更容易地使用交互性SHELL。因此他加入了很多友好的功能,比如命令历史查询、作业控制等新功能。而且由于效率更高,因此广受用户喜爱。它的默认命令提示符是。最后来看KORNSHELL。KORNSHELL的开发是基于了当时的很有趣的一个现象相当长的一段时间里。人们用BOURNESHELL做开发,用CSHELL做交互。因此开发者结合了这两个版本共有的优点,最终贝尔实验室的大卫科恩在上个世纪八十年代末开发出了KORNSHELL。KORNSHELL几乎完全向上兼容BOURNESHELL,所以老的BOURNE程序在KORESHELL中运行良好。NOVELL公司开发了一个KORNSHELL的新版本(以前的版本为KSH93),支持在桌面上进行XWINDOW编程。DTKSHDTKSH是大多数UNIX系统硬件厂商所支持的通用桌面环境(COMMONDESKTOPENVIRONMENT,CDE)的标准部件,KORNSHELL的公共域版本(PACKAGESDEBIANORG/STABLE/SHELLS/PDKSH)称为PSKSH,这种版本也在包括LINUX在内的多种平台上可用。用于WINDOWS的KORNSHELL可以在WWWWIPROCOM/UWIN上找到。它的默认命令提示符是。212LINUXSHELL通常,由于很多LINUX版本已经包含SHELL了,因此用户安装完LINUX之后立马就可以使用GNU的SHELL和其他工具,即非标准UNIXSHELL和工具。LINUX默认的SHELL版本是BASH。这种版本是在BOURCESHELL的基础上进行了进一步的开发而生成的加强版。它扩展了很多的功能,不仅体现在代码的编写上,用户在使用的过程中能够根据自己的需要独立剪裁工作环境,甚至可以建立快捷键完成一些常用操作。由于种种优势,使得BASH当之无愧地成为了当前LINUX用户使用最普遍的SHELL版本。可以到官方网站“WWWGNUORG/SOFTWARE/BASH/BASHHTML”下载。它的默认命令提示符是。TCSHELL也是广大LINUX用户常用的一种SHELL版本。作为CSHELL在LINUX系统中的一个兼容性分支,它已经被注入了新的血液,功能性也大大增强。下载地址为WWWTCSHROG/MOSTRECENTRELEASE。它的默认命令提示符是。另一种LINUXSHELL版本名为ZSHELL,它结合了前三个版本的很多功能。还有一种名为PUBLICDOMAIN的SHELL,这种SHELL是KORNSHELL的克隆版本,使用时需要向美国电报电话付费,即它的发行商。它的默认提示符是。若想了解自己所使用的LINUX有几种版本的SHELL,可以查看/ETC/SHELL目录下的文件。例如在终端中运行如下命令CAT/ETC/SHELL/BIN/BASH/BIN/SH/BIN/ASH/BIN/BSH/BIN/TCSH/BIN/CSH/BIN/KSH/BIN/ZSH在LINUX系统中,/ECT/SHELL目录中的文件便是当前环境中所有可用的SHELL版本。22SHELL的历史BOURNCESHELL是一种编程语言,作为一门语言来讲,它的参照模板是ALGOL,即当时的很流行的程序设计语言。BOURNESHELL是在1977年底被美国电话电报公司所推出,开发者用自己的名字为其命名。二者之间有很强的联系性,语法类似,功能也大致相同。在实际的运用过程中,BOURNESHELL主要被用于操作系统(即当时的UNIX)自动化运行及管理进程,其功能效果与十分强大,因而风靡一时。而且其操作简单,运行高效,备受广大用户的欢迎,但它也不是没有弱点的,最大的缺点便是交互性有所欠缺,缺乏如命令历史、作业控制能相关的友好功能。随后,在二十世纪八十年代早期,加州伯克利大学由BILLJOY率领的开发团队为了改善当前所广泛使用的BOURNESHELL在交互性上的不足,开发了一款新型的SHELL,即CSHELL。与BOURNE相比,它的交互性更强,更加友好,比如增加了命令行历史功能,但是这是以牺牲运行效率为代价的,不论是个人电脑还是高端服务器,它的运行都比较缓慢。当CSHELL被开发出来并在市场上存在了一段时间之后,用户在SHELL的使用方面有了更加明确的选择,不过这激发了人们越来越多的关于二者之间哪一个更好用的讨论。BOURNE的效率更高,但是交互性有限,CSHELL使用更容易,但是运行缓慢。在这种背景下,开发者在CSHELL问世几年后与1986年推出了一个新版的SHELL版本,即KORNSHELL,这次仍然是美国电话电报公司发行的。它是在BOURNESHELL的基础上对其底层代码进行了深度发掘,并且兼容性更好,即能适应多种环境和平台,而不是仅限于UNIX系统。类似于对前辈的拓展吧。于是很自然地,这款设计更加人性化且运行高效的新版本SHELL成为了广大UNIX的首选,在其发行的众多版本中,1988年发行的堪称经典。1988年,PDKSH发布,它是PUBILCDOMAINKORNSHELL的简称。这是一款KORNSHELL的克隆版本。与其母版一样,PDKSH也有极强的适应性和生存能力,适合多种环境,多种操作系统之间可以共享指令代码,符合POSIX标准。ZSHELL预期一样也是KORNSHELL的克隆版本。最后,着重提一下BASH,这也是如今我们大部分用户(包括我在内)正在使用的SHELL。BASH是BOURNEAGAINSHELL的简写,在1988年发行。实际上就是对BOURNESHELL的一个改进版吧。其功能更加完善,交互性也十分成熟,成为了LINUX的默认SHELL。它在变量、文件、函数、运算方面有独到的见解。23SHELL的作用SHELL的一项主要功能是在交互方式下解释从命令行输入的命令,SHELL解析命令行,将其分解为词(也称TOKEN),词之间由空白分隔,空白由制表符、空格键或换行组成,如果词中有特殊的元字符,SHELL会对其进行替换。SHELL处理文件I/O和后台进程。对命令行的处理结束后,SHELL搜索命令并开始运行它。SHELL的另一项重要功能是定制用户环境,这通常在SHELL的初始化文件中完成。初始化文件中有很多定义,包括设置终端键和窗口属性,设置用来定义搜索路径、权限、提示符和终端类型的变量,设置特定应用程序所需的变量,如窗口、字处理程序和编辑语言的库等。KORN/BASHSHELL和C/TCSHELL还提供了更多的定制功能历史添加、别名、设置内置变量防止用户破坏文件或无意中退出,通知用户作业完成。SHELL还能用作解释性的编程语言。SHELL程序(也称SHELL脚本)由文件中的一列命令组成。SHELL程序用编辑器生成(也可以在命令行上直接输入脚本)。他们由UNIX命令组成,命令之间插入一些基本的程序结构,如变量赋值、条件测试和循环。SHELL脚本不需要编译。SHELL会逐行解释脚本,就好像它是从键盘输入一样。SHELL负责解释命令,因此,用户需要了解可用的命令有哪些。24SHELL的职责SHELL负责确保用户在命令提示符后输入的命令被正确执行。其职责包括1读取输入并解析命令行替换特殊字符,比如通配符和历史命令符。2设置管道、重定向和后台处理。3处理信号。4程序执行的相关设置。25嵌入式简介定义IEEE(INSTITUTEOFELECTRICALANDELECTRONICSENGINEERS,美国电气和电子工程师协会)对嵌入式系统的定义“用于控制、监视或者辅助操作机器和设备的装置”。原文为DEVICESUSEDTOCONTROL,MONITORORASSISTTHEOPERATIONOFEQUIPMENT,MACHINERYORPLANTS)。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。从应用对象上加以定义,从右图中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。企业嵌入式开发。嵌入式设计是企业电子产品设计的重要组成,目前国内外中小型企业内部都建立了自己的嵌入式开发团队。团队所需的人员职位构成包括(1)系统设计工程师(2)硬件工程师(3)底层驱动工程师(4)LINUX系统工程师(5)应用设计工程师等。对于企业而言,嵌入式开发越来越朝着敏捷开发、专业操作的方向发展。国内也逐步涌现出一些专门定制开发电子产品、进行嵌入式外包的专业公司。对于企业而言,随时关注嵌入式承载硬件的发展尤其重要,尤其是ARM、FPGA、MCU的结构、工艺、速度正在经历着不断的变革。一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、FLASH等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。硬件层与软件层之间为中间层,也称为硬件抽象层(HARDWAREABSTRACTLAYER,HAL)或板级支持包(BOARDSUPPORTPACKAGE,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。BSP具有以下两个特点。硬件相关性因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。操作系统相关性不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。设计一个完整的BSP需要完成两部分工作嵌入式系统的硬件初始化以及BSP功能,设计硬件相关的设备驱动。特点1)可裁剪性。支持开放性和可伸缩性的体系结构。2)强实时性。EOS实时性一般较强,可用于各种设备控制中。3)统一的接口。提供设备统一的驱动接口。4)操作方便、简单、提供友好的图形GUI和图形界面,追求易学易用。提供强大的网络功能,支持TCP/IP协议及其他协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口。5)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预、这就要负责系统管理的EOS具有较强的稳定性。嵌入式操作系统的用户接口一般不提供操作命令,它通过系统的调用命令向用户程序提供服务。6)固化代码。在嵌入式系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。7)更好的硬件适应性,也就是良好的移植性。8)嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。文件系统通用操作系统的文件系统通常具有以下功能提供用户对文件操作的命令。提供用户共享文件的机制。管理文件的存储介质。提供文件的存取控制机制,保障文件及文件系统的安全性。提供文件及文件系统的备份和恢复功能。提供对文件的加密和解密功能。嵌入式文件系统比较简单,主要提供文件存储、检索和更新等功能,一般不提供保护和加密等安全机制。它以系统调用和命令方式提供文件的各种操作,主要有设置、修改对文件和目录的存取权限。提供建立、修改、改变和删除目录等服务。提供创建、打开、读写、关闭和撤销文件等服务。文件系统的特点1)兼容性。嵌入式文件系统通常支持几种标准的文件系统,如FAT32、JFFS2、YAFFS等。2)实时文件系统。除支持标准的文件系统外,为提高实时性,有些嵌入式文件系统还支持自定义的实时文件系统,这些文件系统一般采用连续的方式存储文件。3)可裁剪、可配置。根据嵌入式系统的要求选择所需的文件系统,选择所需的存储介质,配置可同时打开的最大文件数等。4)支持多种存储设备。嵌入式系统的外存形式多样了,嵌入式文件系统需方便的挂接不同存储设备的驱动程序,具有灵活的设备管理能力。同时根据不同外部存储器的特点,嵌入式文件系统还需要考虑其性能、寿命等因素,发挥不同外存的优势,提高存储设备的可靠性和使用性。26安卓与LINUX安卓ANDROID这个原本陌生的词,如今已经无人不知,无人不晓,不知道什么时候起,安卓已经是智能手机,平板电脑首选的操作系统,而事实上,安卓到底是不是一个操作系统呢安卓开发与嵌入式开发之间又存在什么样的关系呢我们来尝试解开这些疑问,了解安卓与嵌入式之间的关系。实际上,ANDROID安卓并不是一个操作系统,而是一个需要LINUX平台来支撑其运行的大型功能包,或者说是一个平台,一个更易于满足人们对移动互联应用需要的功能集成平台。这个平台由GOOGLE公司开发,维护并不断升级,由于其开源的特性,使得广大移动互联产品厂商更愿意用这个平台作为其自己产品的应用平台,并更容易对其进行修改、完善和二次开发。而谷歌公司在开发安卓的时候,就考虑到了其平台上应用软件开发的难易程度,为了吸引更多的软件开发爱好者在谷歌开发的安卓平台上尽情施展自己的想象力,开发出更多丰富易用的应用软件,GOOGLE选择了JAVA语言作为ANDROID平台应用软件开发的首选语言,因为JAVA语言更易学,开发周期更短,并且熟悉JAVA的人更多,即便没有编程开发经验的人,只需月余便可掌握JAVA开发,更何况大量高级研发程序员,如果有兴趣只需一周便可用JAVA语言上手开发安卓软件,这极大的降低了ANDROID平台上应用软件开发的门槛,从而为迅速丰富谷歌市场、安卓市场提供了可能。日前,谷歌公司已经将安卓开发集成环境打包,只需一键安装,便可进行安卓应用程序开发,这也进一步说明了,GOOGLE希望让安卓开发的门槛越低越好,越多的人能够进行安卓应用软件开发,谷歌的安卓系统就越有长久的生命力,避免SYBAIN一样的命运那么,到底安卓开发是不是嵌入式开发呢安卓开发语言首选是JAVA,但如果想在安卓平台开发大型的游戏、地图、导航、通讯等软件,还是需要更高级的开发语言,如C、C,因为安卓是运行在LINUX系统上面的一个应用平台,因此,在LINUX系统层面,用更高级的编程语言当然可以开发出更有效率的大型应用程序。掌握JAVA语言,可以开发安卓系统平台上大部分简单的应用程序,但是如果想真正开发一个大型安卓平台的项目,恐怕,还是要更高级的研发工程师,而这个研发工程师必须掌握LINUX系统下C、C等程序设计语言,并且精通系统编程技术,网络通讯技术等嵌入式领域核心技术,因此,安卓开发其实如果真的要走向更深层次,是必须要成为嵌入式开发工程师,才能够胜任的。ANDROID从诞生到现在也不过3年的时间,但是也就是在这短短的3年内ANDROID创造了一个迅速被人们知晓并追捧的奇迹。2007年11月5日,GOOGLE与其他33家手机制造商包含摩托罗拉、宏达电、三星、LG、手机晶片供应商、软硬体供应商、电信业者所联合组成的开放手持装置联盟OPENHANDSETALLIANCE,发布了名为ANDROID的开放手机软硬体平台。该联盟的成员宣布日后都会在ANDROID平台上开发他们的新的业务。不久之后的2008年9月24日,TMOBILE公司首度公布第一台ANDROID手机G1的细节,同日GOOGLE也放出了ANDROIDSDK10RC1。这样ANDROID进入了人们的视线。ANDROID以其特有的开放性优势越来越受到人们和智能手机厂商的关注。对于第三放软件开发商来说,ANDROID是一个真正意义上的开放性移动设备综合平台,ANDROID系统是免费向开发人员提供的,这样就避免了开发中专利权的障碍。因此,就能够为第三方软件开发商省下大笔资金。对于设备制造商来说,ANDROID是一个免费的平台。当设备制造商每制造一台手机时,那些支付给手机系统制造商的费用也省去了,这样也降低了每台手机的生产费用,同时就降低了手机的价格,这样在市场上也提高了竞争力。对硬体开发厂商来说,ANDROID也是个开放的平台。使用ANDROID平台的厂商可以更具自己的需求以及能力为ANDROID开发具有该厂商特色的功能,但是这样的增加完全不用考虑版权的问题。同时ANDROID平台支持各种先进的网络、绘图、3D处理能力,可以用来提供更好的使用者体验。GOOGLEANDROID系统作为一个完全开源的操作系统,是由操作系统LINUX、中间件以及核心应用程序组成的软件栈SOFTWARESTACK。通过ANDROIDSDK提供的API以及相应的开发工具,程序员可以很方便的开发ANDROID平台上的应用程序。其整个系统由应用程序(APPLICATION),应用程序框架(APPLICATIONFRAMEWORK),应用程序库(LIBRARIES),ANDROID运行库(ANDROIDRUNTIME),LINUX内核(LINUXKERNEL)五个部分组成。ANDROID操作系统内置了一部分应用程序,包括电子邮件客户端、SMS程序、日历、地图、浏览器、通讯录以及其他的程序,值得一提的是这些所有的程序都是用JAVA编写的。因为应用程序框架使得组件更易于重用,所以开发者的应用程序可以很容易的调用API函数实现我们想要的功能。在遵守应用程序框架的安全机制约束的前提下,开发者开发的一个应用程序可以使用其他程序所开发的功能。虽然ANDROID的应用程序是用JAVA语言开发的,但是ANDROID给应用程序开发者提供了一系列的C/C程序库,通过ANDROID的一些特殊的设计,我们开发者可以使用这些库,这在后面的叙述中将看到。现今,ANDROID操作系统已成为许多手机制造商的宠儿,其中包括HTC、索尼爱立信、SAMSUNG、摩托罗拉以及国内的联想、华为、海尔、华禹等。其中值得一提的是摩托罗拉公司,就在2009年11月凭借其一款搭载ANDROID平台的DROID手机,两个月内就突破百万台,击败了苹果的IPHONE3GS,被时代杂志评选为“年度最佳科技产品”。因此告别了两年多的低迷态势,走出了泥潭。ANDROID是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。作为一个层次结构的软件集,一定有一个层次的系统构架,下图为ANDROID的构架图(见图21)图21安卓架构图3LINUXSHELL的设计及相关技术31简单SHELL设计思想当我们了解SHELL的基本功能之后,编写也就有一定的思想步骤了,编写由简入难,简单的SHELL便成思想可以分为下面几个步骤A对于用户启动终端SHELL后,在终端中输入命令,首先是获取命令。B判断是内部命令还是外部命令。C如果获取的命令是内部命令,则调用自己编写的程序。对于外部命令执行相应的文件。D循环执行上面三个过程。内部命令内部命令由SHELL程序实现。如CD、PWD、JOBS、FG,BG等等,LINUX的内部命令数量有限,而且绝大部分都很少用到。外部命令每一个LINUX外部命令都是一个单独的应用程序,如LS、CP,这些命令都可以执行文件的形式存在,绝大部分放在目录/BIN和/SBIN中。32复杂SHELL设计思想总所周知,一切复杂的实物都是在简单的基础上建立起来,当然复杂的SHELL也不例外,一个复杂的SHELL编程思想,依赖于简单的编程思想首先分析命令,判断在命令中是否存在前后台调度(功能复制文件标示符,可用于重定向。2OPENINTOPENCONSTCHARPATHNAME,INTFLAGS,MODE_TMODE返回值成功则返回文件描述符,否则返回1对于OPEN函数来说,第三个参数仅当创建新文件时(即使用了O_CREAT时)才使用,用于指定文件的访问权限位(ACCESSPERMISSIONBITS)。PATHNAME是待打开/创建文件的POSIX路径名(如/HOME/USER/ACPP);FLAGS用于指定文件的打开/创建模式,这个参数可由以下常量(定义于FCNTLH)通过逻辑位或逻辑构成。3CLOSEINTCLOSEINTFD返回值成功返回0,出错返回1并设置ERRNO。参数FD是要关闭的文件描述符。需要说明的是,当一个进程终止时,内核对该进程所有尚未关闭的文件描述符调用CLOSE关闭,所以即使用户程序不调用CLOSE,在终止时内核也会自动关闭它打开的所有文件。但是对于一个长年累月运行的程序(比如网络服务器),打开的文件描述符一定要记得关闭,否则随着打开的文件越来越多,会占用大量文件描述符和系统资源。4MKDIR函数原型INTMKDIRCONSTCHARPATHNAME,MODE_TMODE函数说明MKDIR函数以MODE方式创建一个以参数PATHNAME命名的目录,MODE定义新创建目录的权限。返回值若目录创建成功,则返回0;否则返回1,并将错误记录到全局变量ERRNO中。MODE方式可多个权限相或,如0755表示S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH代表该文件所有者拥有读,写和执行操作的权限,该文件用户组拥有可读、可执行的权限,其他用户拥有可读、可执行的权限。(见表31)表31各种权限说明S_IRWXU00700权限,代表该文件所有者拥有读,写和执行操作的权限S_IRUSRS_IREAD00400权限,代表该文件所有者拥有可读的权限S_IWUSRS_IWRITE00200权限,代表该文件所有者拥有可写的权限S_IXUSRS_IEXEC00100权限,代表该文件所有者拥有执行的权限S_IRWXG00070权限,代表该文件用户组拥有读,写和执行操作的权限S_IRGRP00040权限,代表该文件用户组拥有可读的权限S_IWGRP00020权限,代表该文件用户组拥有可写的权限S_IXGRP00010权限,代表该文件用户组拥有执行的权限S_IRWXO00007权限,代表其他用户拥有读,写和执行操作的权限S_IROTH00004权限,代表其他用户拥有可读的权限S_IWOTH00002权限,代表其他用户拥有可写的权限S_IXOTH00001权限,代表其他用户拥有执行的权限5READSSIZE_TREADINTFD,VOIDBUF,SIZE_TCOUNT函数说明READ会把参数FD所指的文件传送COUNT个字节到BUF指针所指的内存中。若参数COUNT为0,则READ为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。附加说明如果顺利READ会返回实际读到的字节数,最好能将返回值与参数COUNT作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道PIPE或终端机读取,或者是READ被信号中断了读取动作。当有错误发生时则返回1,错误代码存入ERRNO中,而文件读写位置则无法预期。错误代码EINTR此调用被信号所中断。EAGAIN当使用不可阻断I/O时(O_NONBLOCK),若无数据可读取则返回此值。EBADF参数FD非有效的文件描述词,或该文件已关闭。6WRITESSIZE_TWRITEINTFD,CONSTVOIDBUF,SIZE_TCOU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园物业服务管理制度
- 校园综合安全管理制度
- 校园运营门店管理制度
- 校园预防阵地管理制度
- 汉唐丝路考古发现-洞察及研究
- 学习中的挫折话题讨论作文15篇
- 在线教育课程销售合同
- 农村环保设施维护合作协议
- 秋意渐浓的古镇里风景美如画写景作文12篇
- 开学典礼的发言稿演讲稿类作文7篇范文
- DB37T 2906-2019 运动场地合成材料面层 验收要求
- DB34∕T 451-2017 地理标志产品 舒城小兰花
- 《卓有成效的管理者》Word电子版电子版本
- 三生事业六大价值
- 锆石基本特征及地质应用
- 丝网除沫器小计算
- 制钵机的设计(机械CAD图纸)
- 学校财务管理制度
- 三年级下册美术课件-第15课色彩拼贴画|湘美版(共11张PPT)
- 水稻病虫统防统治工作总结
- 水在不同温度下的折射率、粘度和介电常数
评论
0/150
提交评论