资源描述
标题: 浙大毕业论文:基于Linux的嵌入式操作系统研究摘 要 在以计算机技术、通讯技术相结合的信息时代的快速发展和互联网的广泛应用的形势下,3C(Computer、Communication、Consumer)合一的趋势已经形成,其结果必然就是将计算机工业的中心从计算产品转移到信息产品,从而出现信息电器的概念。在信息电器的应用开发领域,由于需要的功能不断的增加,嵌入式系统也就将成为软件业的新宠儿。同时在计算机本身的领域里面,微型化和专业化成为了发展的新趋势,同样也需要嵌入式系统的支持。因此,研究与嵌入式系统有关的关键技术嵌入式操作系统有着相当重要的实际意义。 本论文详细论述了作者在学士学位论文工作期间在基于Linux的嵌入式操作系统研究工作领域里所做的研究和实践,主要围绕着论证使用Linux改造成符合嵌入式操作系统条件的几点要求展开讨论。首先,我对嵌入式系统的概念和信息电器的概念做出表述,并且说明Linux的特点、发展状况河开发环境。紧接着,分三个方面论述使用Linux进行嵌入式系统开发的便利,包括Linux的实时变种RTLinux的原理、实现方案和编程方法;Linux网络设备驱动程序的分析和利用到嵌入式系统中的方案;实现Linux和RT Linux的内核在线调试环境的途径。其中还讲到了如何利用现有的工作设计出一个嵌入式Linux系统。最后,针对现有的工作,提出进一步开发出完整的、具有市场竞争力的产品提出开发展望。 关键词:嵌入式系统,Linux,信息电器,RTOS,RT Linux,Linux网络驱动程序,在线调试环境 Abstract With the development of Computer technology and Communication technology in Information times and the board application of Internet, it is clear that 3C (Computer, Communication and Consumer) will converge in the near future which will lead the focus of Computer Industry from the Compute product to Information product. It is the concept of Information Appliance. In the application and development field of Information Appliance, Embedded Operating System will be the most favorite thing in Software Development field. At the same time, in the field of computer science itself, the micromation and specialization is the new direction of the computer world. It also want the support of Embedded System. So, the research of the key technique of embedded systemEmbedded Operating System is the most important thing. This thesis presents the authors work in research of the Linux-based Embedded Operating System for his bachelor degree. Most of the thesis focus the requirement of transforming Linux to Embedded System. Firstly, it describes the concepts of embedded system and Information Appliance, and presents the characteristic and development environment of Linux. Then describe three aspects of the key techniques of using Linux as the development tools of Embedded system Including the real-time variant of LinuxRT Linux and its principle, implementation and the programming; the network coding in Linux kernel and the analysis of Linux network device drivers and the online debug environment of Linux Kernel and RTLinux Kernel. I have also involved the implementation of embed Linux/RTLinux in a floppy to simulate the embedded environment. In the last part of this thesis, I give the suggestions and prospect of the development of a mature embedded system which have the most competition ability in China market base on the current work. Keyword: Embedded Operating System, Linux, Information Appliance, RTOS, RT Linux, Linux Network Device Drivers, Online Kernel debug environment 目 录 摘 要 1 Abstract 2 目 录 3 第一章 绪论 6 1.1 嵌入式系统的历史、现在和未来 6 1.2 信息电器的概念 7 1.3 国内外嵌入式系统的相关产品、水平、现状和技术发展趋势 8 1.3.1 国际上相关产品、水平、现状和技术发展趋势。 8 1.3.2 国内相关产品、水平、现状和技术发展趋势。 10 1.4 Linux的历史和现状 12 1.5 论文的组织介绍 14 第二章 嵌入式系统的特点 16 2.1 嵌入式处理器的要求 16 2.2 RTOS的要求 17 2.2.1 RTOS的概念 17 2.2.2 RTOS的分类方法 18 2.2.3 RTOS的体系结构 18 2.2.4 RTOS的衡量标准 20 2.3 网络要求 20 2.4 用户交互环境界面 20 2.5 小结 21 第三章 采用Linux作为嵌入式系统开发的原因 22 3.1 嵌入式处理器支持 22 3.2 实时支持 22 3.3 网络支持 23 3.4 GUI开发支持 24 3.4.1 利用X Windows的便利 24 3.4.2 利用SVGALib和pThread函数库 25 3.5 小结 26 第四章 实时Linux 27 4.1 实时Linux(RTLinux)介绍 27 4.2 RTLinux特征 28 4.2.1 小而精巧的实时内核 28 4.2.2 模块化的设计方案 28 4.2.3 和Linux内核的结合 29 4.2.3.1 利用Linux内核的好处 29 4.2.3.2 和Linux进行通信的方法 29 4.3 RTLinux的实现机理 30 4.4 RTLinux的编程接口(API) 31 4.5 RTLinux的编程方法示例 32 4.5.1 需要用到的API函数: 32 4.5.1.1 任务生成和调度函数 32 4.5.1.2 时间控制函数 33 4.5.1.3 FIFO控制函数 33 4.5.2 程序原理 34 4.5.3 程序实现 34 4.5.3.1 实时部分代码 34 4.5.3.2 非实时部分 38 4.5.3.3 公用头文件 39 4.5.4 程序执行结果 39 4.6 嵌入式RTLinux的设计 40 4.6.1 将RTLinux嵌入EPROM中。 40 4.6.2 通过网络启动的方法设计嵌入式RTLinux。 42 4.7 小结 42 第五章 Linux对TCP/IP网络支持 43 5.1 Linux网络概述 43 5.2 Linux网络设备驱动程序的分析 44 5.2.1 Linux中网络驱动程序介绍 45 5.2.2 网络驱动程序中需要用到的重要的数据结构 46 5.2.2.1 struct device 46 5.2.3 重要的驱动过程 46 5.2.3.1 模块驱动方法 47 5.2.3.2 内核启动的驱动方法 47 5.2.3.3 网卡初始化函数分析 49 5.3 在嵌入式系统中实现网络协议栈 51 5.3.1 重用Linux网络协议栈代码 52 5.3.2 重写网络协议栈 52 5.3.3 网络驱动程序的编写 52 5.4 小结 53 第六章 调试环境的搭建和定制 54 6.1 远程调试环境的搭建原理 55 6.1.1 GDB介绍 55 6.1.2 GDB远程调试功能介绍 55 6.1.3 GDB远程调试建立的条件 56 6.1.3.1 远程主机上stub要实现的函数接口 56 6.1.3.2 调试双方数据包的传送格式 57 6.1.3.3 调试步骤的介绍 58 6.2 Linux的内核调试环境的搭建 58 6.2.1 串口驱动程序模块和数据包传送函数 59 6.2.2 stub程序的函数接口 60 6.2.3 内核进入调试状态的路径 61 6.2.3.1 系统启动的时候向内核传递参数 61 6.2.3.2 使用gdbstart将系统控制权交出 63 6.2.4 Linux内核调试过程示例 64 6.3 RTLinux的调试环境的开发设想 65 6.4 小结 66 第七章 总结与展望 67 参考文献 69 第一章 绪论 1.1 嵌入式系统的历史、现在和未来 在当前的数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式系统已经广泛的渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术、娱乐业以及人们的日常生活等方方面面中。随着国内外嵌入式产品如车载电脑、机顶盒等等的进一步开发和推广,嵌入式技术越来越和人们的生活紧密结合。在PC时代,可能有人从来没有接触过计算机;但是在Post-PC时代,他就不可能会接触不到嵌入式系统,因为嵌入式系统可能存在于生活的方方面面中,从家里的洗衣机、电冰箱,到作为交通工具的自行车、小汽车,到办公室里的远程会议系统等等,都属于可以使用嵌入式技术开发和改造的产品。 实际上嵌入式系统这个概念很早以前就已经存在了。在通讯方面,嵌入式系统在1960年就被用于对电子机械电话交换的控制,当时被称为“存储式程序控制系统”(Stored Program Control)。那个时候,计算机一词却还不是很普遍,而存储式程序主要是指用于存储程序及日常讯息的内存部分。存储这些逻辑数据,而不是将其写入硬盘,这个概念的确具有突破性的意义。 这个时候还没有出现操作系统的概念,对每一个应用都需要提供一整个计算机的设计。后来微处理器的出现,它用来提供一个中央计算引擎。利用微处理器,组成了一个基于由总线连接起来的计算机硬件体系结构,并且提供了一个通用功能的编程模型,从而简化了编程。 嵌入式系统的概念是在1970年左右出现的。不过在当时,大部分都是由汇编语言完成的,而且这些汇编程序只能用于某一种固定的微处理器。当这种微处理器过时之后,这种嵌入式系统就没有用了;并且还要开始对新的微处理器写新的嵌入式系统。 这个时候的嵌入式系统很多都不是操作系统,他们只是为了实现某个控制功能,使用一个简单的循环控制对外界的控制请求进行处理。不可否认,这对一些简单的系统而言是足够的。但是当我们的系统越来越复杂,利用的范围越来越广泛的时候,没有操作系统就成为了一个最大的缺点了,因为需要添加一项新功能都可能需要从头开始设计,否则只能增加开发成本和系统复杂度。 C语言的出现使得我们的操作系统开发变得越来越简单。我们可以利用C语言很快的写出一个小型的、稳定的操作系统。众所知之,C语言的作者Dennis M. Ritchie 和Brian W. Kernighan利用它写出了著名的UNIX操作系统,直接影响了这三十年计算机业的发展。同时,对开发嵌入式系统来说,在效率和速度上都提高了很多。 从上世纪八十年代开始,开始出现各种各样的商业用嵌入式操作系统,这些操作系统大部分都是为专有系统而开发,从而形成了现在多种形式的商用嵌入式操作系统百家争鸣的局面。如VxWorks,pSOS,Neculeus和Windows CE等等。 现在,网络在人们生活中的应用越来越广泛,自然而然,在嵌入式系统中使用网络系统也成为了一项基本的要求。把网络协议栈实现在嵌入式系统中,对日常生活中的需要极有意义。利用嵌入式系统中的网络功能,可以实现下面我将要描述的信息电器这一即将取代PC在后PC时代占据市场主体的商品。我们知道,如果在上面所说的那种采用循环控制的嵌入式系统中加入网络协议栈,复杂度会呈指数级增长。这种情况下,在嵌入式操作系统中增加网络协议模块要方便得多,并且还能方便各种网络应用程序的不同平台移植。 在未来的社会里面,使用嵌入式系统的情形会越来越多,人可以不接触电脑,但是不接触嵌入式系统的情况是不存在的。嵌入式系统可能存在于您生活的各个角落:您家里可能就是通过一个嵌入式系统控制的中心,管理您家里的所有家电,控制家庭和外界网络的连接,让您的生活更为方便;您出门旅行的时候,在饭店的门把手里面安装有电子识别控制系统,利用嵌入式系统根据您手上的特征,判断时候应该给您开门;在坐车的时候,汽车电脑可以通过GPS(全球卫星定位系统)来判断自己的具体位置,利用嵌入式智能系统判断应该走哪条路比较方便;如果您一不小心生病住院,在医院的设备仪器里面都可能存在有嵌入式系统,用来选择和控制仪器,提高您手术的成功率和方便程度。 1.2 信息电器的概念 在嵌入式系统发展到现在这个程度,利用的范围除了在自动化控制、军事技术、工业生产、科学研究等方面的应用之外,现在逐步在向日常生活中渗透。而PC的发展现在也正在减缓趋势。据有关报道,PC的增长率由九十年代中期的年递增率35%下降到去年的15%。用市场的观点来看,PC的已经从高速增长进入到平稳发展的市场顶峰时期,单纯由PC机带领的电子产业蒸蒸日上的时代已经成为历史,现在的电子产业的发展需要寻找一个新的“战略转折点”。这个时候,根据PC时代的概念,美国Business Week杂志提出了“后PC时代”的概念。在这个时代,占电子市场主体的不再是PC和家用电器,而是具备视听功能、信息处理和双向网络通信功能的信息电器。 信息电器,英文称Information Appliance。它具备有高品质的视听功能、交互式的信息处理功能、网络浏览功能和收发邮件等功能。它适应信息时代的要求,具有很强的网络功能,是人们用来访问和获取网上信息的工具,也是消费类电子技术和计算机技术相结合的产物。作为信息电器,一般具有三个特征: 1)是家用电器。它适合广泛的普通家庭使用,功能和操作都比传统的电脑少而简单。 2)是信息设备。能够接入公共信息网络,主动获取交互信息。 3)配置简单。组成部分比传统的电脑少,没有硬盘等永久存储设备,设备价格比较低廉。 信息电器的品种很多,就我国来说,信息电器的应用范围主要是在消费、娱乐、通讯、信号处理等领域。典型的产品是机顶盒、移动通讯、掌上电脑、可视电话、PDA(个人数字助理)等等。 信息电器的如火如荼的发展和应用,需要发展嵌入式系统来支持。信息电器的产品开发离不开利用网络协议栈,离不开实现实时性能,也离不开提供用户友好的接口。这些都需要利用嵌入式系统进行开发。 目前嵌入式系统的主要应用范围是在信息电器领域里面。根据信息电器的开发特点,开发出一个具有实时、多任务特征的,提供测览器、网络通信和图形窗口等服务的,可进行一定的定制或二次开发,并可对应用软件的开发提供有效支持的嵌入式系统。 信息技术的快速发展和互联网的广泛应用,使得信息电器具有广泛的前景,从而使得嵌入式操作系统的快速发展成为可能。伴随着以计算机技术、通讯技术为主的信息技术的快速发展和互联网的广泛应用,3C(Computer, Communication, Consumer)合一的趋势已经形成,三者合一的产物就信息电器。在信息电器领域里面,嵌入式软件必然成为重要成员,嵌入式操作系统也就必然成为软件业的新热点。 1.3 国内外嵌入式系统的相关产品、水平、现状和技术发展趋势 1.3.1 国际上相关产品、水平、现状和技术发展趋势。 从八十年代起,国际上就开始进行一些商用嵌入式系统和专有操作系统的开发。他们开发嵌入式系统已经有二十多年的经验,目前的应用范围也比较广泛,下面介绍一些著名的嵌入式系统。 l Windows CE: Microsoft Windows CE是一个简洁的,高效率的多平台操作系统。它不是削减的Windows95版本,而是从整体上为有限资源的平台设计的多线程,完整优先权,多任务的操作系统。它的模块化设计允许它对于从掌上电脑到专用的工业控制器的用户电子设备进行定制。操作系统的基本内核需要至少200K的ROM。从SEGA的DreamCast游戏机到现在大部分的高价掌上电脑,都采用了Windows CE,但是无奈价格太高,使得整个产品的成本急剧上升。 l VxWorks: 去年VxWorks所在的公司WindRiver兼并了pSOS的ISI公司,使得该公司现在有两大RTOS系统。VxWorks是目前嵌入式系统领域中使用最广泛,市场占有率最高的系统。它支持多种处理器,如x86,i960,Sun Sparc,Motorola MC68xxx,MIPS RX000,POWER PC等等。使用的是和UNIX不兼容的环境,大多数的VxWorks API是专有的。采用GNU的编译和调试器。 l pSOS: ISI公司已经被WinRiver公司兼并,现在是属于WindRiver公司的产品。这个系统是一个模块化,高性能的实时操作系统,专为嵌入式微处理器设计,提供一个完全多任务环境,在定制的或是商业化的硬件上提供高性能和搞可靠性。可以让开发者将操作系统的功能和内存需求定制成每一个应用所需的系统。开发者可以利用它来实现从简单的单个独立设备到复杂的、网络化的多处理器系统。 l QNX: QNX是一个实时的,可扩充的操作系统,它遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具)、部分遵循POSIX.1b(实时扩展)。它提供了一个很小的微内核以及一些可选的配合进程。其内核仅提供4种服务:进程调度、进程间通信、底层网络通信和中处理,其进程在独立的地址空间运行。所有其它OS服务,都实现为协作的用户进程,因此QNX内核非常小巧(QNX4.x大约为12Kb)而且运行速度极快。这个灵活的结构可以使用户根据实际的需求将系统配置成微小的嵌入式操作系统或是包括几百个处理器的超级虚拟机操作系统。 l Palm OS: 3Com公司的Palm OS在PDA市场上占有很大的市场份额,它有开放的操作系统应用程序接口(API),开发商可以根据需要自行开发所需要的应用程序。目前已经有总共3500多个应用程序可以运行在Palm Pilot上,其中大部分应用程序均为其他厂商和个人所开发,使得Palm Pilot的功能得以不断增多。这些软件包括计算器、各种游戏、电子宠物、地理信息等等。在开发环境方面,可以在Windows 95/98,Windows NT以及Macintosh下安装Palm Pilot Desktop;PlamPilot可以与流行的PC平台上的应用程序如Word,Excel等进行数据交换。 l OS-9: Microwave的OS-9是为微处理器的关键实时任务而设计的操作系统,广泛应用于高科技产品中,包括消费电子产品,工业自动化,无线通讯产品,医疗仪器,数字电视/多媒体设备中。它提供了很好的安全性和容错性。与其他的嵌入式系统相比,它的灵活性和可升级性非常突出。 l LynxOS: Lynx Real-time Systems的LynxOS是一个分布式、嵌入式、可规模扩展的实时操作系统,它遵循POSIX.1a、POSIX.1b和POSIX.1c标准。LynxOS支持线程概念,提供256个全局用户线程优先级;提供一些传统的,非实时系统的服务特征;包括基于调用需求的虚拟内存,一个基于Motif的用户图形界面,与工业标准兼容的网络系统以及应用开发工具。 l Linux: Linux是一套以UNIX为基础发展而成的操作系统。自1991年诞生至今,Linux在很多方面已经赶上甚至超过了很多商用的UNIX系统。它充分利用了x86CPU的任务切换机制,实现了真正的多任务、多用户环境。Linux对硬件配置的要求相当低,能够在4M内存的386机器上很好的运行。而且可以支持很多种处理器芯片。此外更为重要的是,很多高手愿意在Linux上开发程序,而且有很多高手随时对Linux的开放内核进行升级和修补,很多bug可以很快得到检测和修复。 在应用于嵌入式系统方面,Linux小得可以放在一张软盘上运行;为实时系统而开发的变种RT Linux(Real-Time Linux),可以让Linux支持硬实时任务;Linux的开放式开发原则使得Linux下的驱动和升级变得越来越多和越来越快。 1.3.2 国内相关产品、水平、现状和技术发展趋势。 国内的嵌入式系统开发也已经取得了一定的成绩,包括中科院的EEOS,凯思昊鹏的HOPEN OS等等。但是国内的产品很大程度上只是外国公司的附属和扩充,国内的技术含量很低。比如说中科院计算所嵌入式系统研究组的EEOS,是根据ECOS的开发环境下面做简略介绍: l EEOS: EEOS是中科院计算所组织开发的开放源码的嵌入式操作系统。该嵌入式操作系统重点支持p-Java,要求一方面小型化,一方面能复用Linux的驱动和其他模块。计算所将在2-3 年内持续投入,以建立扩展能力强,功能完善,且稳定、可靠的嵌入式操作系统平台。包含E2实时操作系统,E2工具链及E2仿真开发环境的完整环境。 E2实时操作系统包含RTOS内核系统和一些支持组件,是一个扩展能力强,功能完善的操作系统,支持POSIX标准。E2实时操作系统强调模块化(其API 接口标准,底层支持清晰),其各模块解决方案可移植、可互换。此外E2实时操作系统提供开放源码。 E2工具链基于GNU系列的交叉编译环境,开放多平台,能够支持大多数硬件平台。E2实时操作系统同时支持MSDEV等桌面环境的工具链,能够方便WIN32程序员使用。 E2仿真开发环境使用Win32系统仿真目标机或做远程调试的主机。E2仿真开发环境能够仿真扩展的目标机设备或借用NT系统的设备,并提供扩展工具进行性能,行为可视化,评估系统的性能。其仿真速度快,能够方便地容易建立开发环境。 EEOS采用先进的内核仿真调试技术,能够使普通C程序员能快速熟悉实时系统的结构和开发过程,大幅度降低学习,研究,开发实时系统的代价。EEOS专为嵌入式系统设计,代码尺寸小,同时EEOS结构上考虑了实时需求,很高的实时响应速度,因而能够在各种环境下工作,具有良好的可伸缩性。 l HOPEN OS: HOPEN OS是凯思集团自主研制开发的嵌入式操作系统,由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。其内核Hopen Kernel一般为10KB左右大小,占用空间小,并具有实时、多任务、多线程的系统特征。使用者可以很容易地对这一操作系统进行定制或作适当开发,该系统不仅可以广泛应用于:移动计算平台(PDA)、 家庭信息环境(机顶盒,数字电视)、 通讯计算平台(媒体手机)、 车载计算平台(导航器)、 工业、商业控制(智能工控设备,POS/ATM机)、 电子商务平台(智能卡应用,安全管理)等信息家电上,还可应用于与Internet相联接的一切接入设备,是未来信息家电的核心。 该系统目前已能在:X86、PA-RISC、Power PC、ARM、Strong ARM、MIPS、68XXX等多种芯片上运行。 从国内外的嵌入式系统发展状况来说,嵌入时系统的应用正在从传统的单一应用范围、狭窄应用对象、简单实现功能向现在和未来社会需要的应用需要进行转变。社会对嵌入时系统的需求正在慢慢扩大,特别是最近几年来国际互联网的发展,信息时代从PC时代步入到后PC时代,对信息电器的需求越来越明显,正如我在第二节所描述的那样,信息电器是国际互联网发展到一定阶段,进入到千家万户的一种必要有效的手段。嵌入时系统在信息电器里面的应用,则是对嵌入式系统概念和应用范围的一个变革,从而打破过去PC时代被单一微处理器厂家和单一操作系统厂家垄断的局面,而应该会出现一个由多芯片、多处理器占领市场领域的局面。国内厂商应该抓住这个机会,从而可以向该类行业的核心领域靠近,取得和国际竞争组织竞争的机会。PC机和信息电器,就象是电影和电视一样,在一段时期内会共同存在下去,谁也无法取代谁。但是,就市场角度来看,信息电器却可以占领很大一部分的可能使用PC的客户,虽然两者的定位不全相同,市场的范围有所重叠,但是发展的余地还是很大。 1.4 Linux的历史和现状 Linux是一种在网络上产生的操作系统,他的产生来自于一名芬兰学生Linus Torvalds的业余爱好。在网络上Linux的开发成为一些高手热衷的项目,使得Linux在短期内就成为了一个稳定、成熟的操作系统。重要的是,Linux的开发都是在GPL(GNU Public License)的版本控制之下,因此Linux内核的所有源代码都是采取开放源代码的方式。我们缺乏对操作系统的开发经验,这样的条件对我们来说是一个很大的契机,利用Linux作为我们开发嵌入式系统成为可能。 Linux内核的开发是由Linus Torvalds领导的内核开发小组进行开发的。世界各地的高手们将自己对Linux内核需要做的改动交给Linus小组,由这个小组进行统一控制,随时对内核进行更新升级。整个开发的过程遵循CVS版本控制,保证开发的质量。目前在他们的公共站点http:/www.kernel.org/上几乎每三天进行一次内核的升级,目前最新的内核是即将开发出来的Linux2.4内核。已经推出了测试版本,具体有关Linux2.4内核的介绍可以参看微电脑世界5月22日Linux内核2.4一文。 将Linux作为一个嵌入式操作系统具有许多的优点: 1) 系统稳定、功能强大、支持多种硬件平台、应用软件多、简单易用 Linux 在许多方面与UNIX类似,但是它是一个完全独立的操作系统,它可以非常稳定地运行在许多种体系结构的处理器上。最新的Linux内核支持Intel x86、Motorola/IBM PowerPC、Compaq(DEC)Alpha、IA 64、S/390、SuperH等微处理器体系结构,这种操作系统的广适性可见一斑。 Linux又可以说是一个很小的系统。用来启动只需要小到500K字节不到的目标代码。完全可以把Linux内核和root文件系统放在一张软盘上,启动一台硬件条件最小的机器。也可以利用Linux实现从网络启动,实现网络无盘图形工作站。(在4.6节有详细介绍) Linux的系统界面和编程接口和传统的UNIX类似,大量在UNIX下的程序员可以很方便的从UNIX环境转移到Linux环境下来。而不像从UNIX环境转移到Windows开发环境那样复杂。 在Linux平台上的应用软件也不断得到扩充。许多著名的商业软件都有了Linux下的版本:Applix公司和Star公司提供了多种字处理、电子表格、图形处理的应用软件;Corel WordPerfect 8、Adabas D 和Oracle 8数据库、Netscape Navigator 6.0网络浏览器、Apache 1.3.12网络服务器、Adobe Acrobat Reader 4.0等等Linux下的应用程序都已经纷纷推出。Linux下将来不再是高手的领域,这种操作系统将来也必然走进千家万户,成为Windows强而有力的竞争者。 在网络服务器市场上,近几年商用UNIX系统在往大而复杂的方向发展,使得UNIX的复杂性不断增加,管理整个UNIX系统也就变得越来越复杂。Linux简单易用,系统管理也比较容易上手,从而成为在服务器高端的一个重要选择,并且有不断上升的趋势,大有取代昂贵、复杂的商用UNIX的趋势。 2) 使用成本低 几乎所有的商业用操作系统如Microsoft公司的Windows98/NT Server/NT Workstation系列,都需要为每一个拷贝支付相当数量的费用。在其下的应用软件每一个都需要大量的支出来获得。商用操作系统下建立一个开发工具链,除了要为操作系统本身付费之外,还要为组成工具链的应用软件工具包支付大量的费用。但是Linux是免费软件,只要遵守GPL(GNU General Public License)的规定,就可以免费获得拷贝。Linux下有同样遵循GPL规定的C、C+、Java等等一系列的软件工具开发包,从功能角度上看并不亚于商用开发包,同时可以极大的降低开发成本。这点优势是其他商用操作系统无法比拟的。 3) 文档完善 Linux有非常多的文档支持,从为初学者准备的各种教程到非常详细的联机帮助文档。Linux是互联网充分发展的产物,许多关于Linux的文档都可以在Internet上找到和下载。Linux Document Project是为Linux提供系统化的文档支持的项目,在世界上许多程序员和用户的帮助下,它已经收集了非常详细的系统文档和使用文档。而且,各种关于Linux的书籍和杂志正如雨后春笋般地出现,大量的英文资料也正在翻译成中文,方便中文使用者。 4) 强大的网络功能 Linux操作系统最突出的是网络部分,基本上所有的网络协议和网络接口都可以在Linux上找到,Linux内核比标准的UNIX更加高效地处理网络协议,系统的网络吞吐性能非常好,这也是为什么Linux在网络服务器市场上占据越来越大市场份额的一个原因。 5) 支持X Windows系统 X Windows是一个在大多数UNIX工作站上使用的图形用户界面,它是一种与平台无关的客户/服务器(Client/Server)模型,可以让用户在一台机器上调用另一台机器的X windows库,打开另一台机器上的窗口,而并不需要考虑这两台机器自己本身的操作系统类型。正是这种特性使得UNIX和Linux系统上的用户和应用程序非常自然地通过网络连接在一起。 当然,最重要的是Linux不是某个公司的私有财产,它是一个开放软件,是免费的和源代码公开的。Linux在这几年不断成熟,越来越多的人加入了Linux的行列,以前Linux只是一群黑客的玩具和专家的实验用操作系统,而现在即使是电脑的普通用户也在用Linux。为Linux提供服务的公司也开始出现,为客户提供专业化的技术支持。但实际上不用花钱也可以通过Internet新闻组得到强大的Linux技术支持和帮助。Linux有一个庞大的支持者群体,其中许多人都编写驱动程序和其它的更新程序并且免费的通过Internet网络进行分发。这意味着对新硬件的Linux驱动程序甚至比用于其它的UNIX 系统如Solaris的驱动程序还来得及时。Linux的庞大的志愿者网络在生产“补丁”程序方面反应很快。如,当Pentium II的bug(97年Pentium II处理器的微指令发现设计问题)被发现以后,Linux就是最早提供解决这个问题的方案的操作系统。如果一个Linux应用程序流行起来,用户一般都可以通过Linux新闻组得到很好的支持。有许多Usenet新闻组可供Linux用户寻求帮助。对一般Linux问题的回答时间可同一些厂商的E-mail支持(甚至是电话支持)相比。对Linux的支持绝大部分是通过用户团体在Usenet新闻组上提供的。这上面广泛收集有大量的FAQ,其内容包括Linux安装、配置和故障定位的方方面面。在Usenet上提供的许多这方面的材料现在已经被一些出版商如Walnus Creek等公开出版了。所有的这些,都是现有的嵌入式操作系统所无法比拟的。 1.5 论文的组织介绍 本文对基于Linux的嵌入式系统开发进行解释,并且针对几个关键技术做出讨论。论文的组织结构为: 第一章是对嵌入式系统的综述、Linux的特点以及介绍。 第二章是介绍嵌入式系统的特点,从处理器、实时系统、网络、用户交互接口等方面进行介绍。 第三章是说明采用Linux作为我们嵌入式系统开发的原因,从嵌入式系统的特点的角度进行讨论。 第四章是Linux的实时系统变种RTLinux的原理、实现和编程的介绍。 第五章是介绍Linux的网络功能,并且介绍对Linux网络设备驱动程序的分析,说明如何利用Linux网络协议栈来用于嵌入式系统中网络模块。 第六章是介绍如何利用GDB的远程调试功能搭建跨平台的Linux内核调试环境。 第七章在总结整个毕业设计的基础之上,展望进一步进行开发的几点内容。 第二章 嵌入式系统的特点 2.1 嵌入式处理器的要求 嵌入式系统的核心部件是嵌入式处理器。市场上形成竞争力的嵌入式处理器比PC使用的微处理器的垄断局面要好的多。几乎每个半导体厂家都生产自己的嵌入式处理器,越来越多的公司都有自己的嵌入式处理器设计部门。嵌入式处理器的功能跨度很广,寻址空间从64KB到16MB,处理速度从0.1MIPS到2000MIPS,常用封装从8个引脚到144个引脚。目前,嵌入式处理器主要可以分为如下几类: 1)嵌入式微处理器 嵌入式微处理器就是和通用计算机里面对应的CPU。在应用中,一般是将微处理器装配在专门设计的电路板上,在母板上只保留和嵌入式相关的功能即可。这样可以满足嵌入式系统体积和功耗大幅度减小的要求。 目前的嵌入式处理器主要包括有AM186/88、386EX、SC-400、PowerPC、Motorola 68000、MIPS、ARM系列等等。 2)嵌入式微控制器 嵌入式微控制器又称单片机。它是将一整个计算机系统集成到一块芯片上。一般在单片机里面以一块嵌入式微处理器内核为核心,然后集成上ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、Watchdog、I/O、串行口、脉宽调制输出、A/D、D/A、Flash RAM、EEPROM等等必要的产品和功能外设。因为这些功能外设是集成在这块单片机芯片中的,因此需要生产出一系列的产品方便用户的定制。 目前的嵌入式微控制器主要有8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16、68300等等。目前的嵌入式市场由单片机占领了约70%的市场份额。 3)嵌入式DSP处理器 在DSP(Digital Signal Processor)里面专门为系统结构和指令系统进行设计,提高了编译效率和执行速度。在数字滤波、FFT、谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。 因为现在嵌入式系统的智能化,例如需要推出各种带有智能逻辑的消费类产品,生物信息识别终端,ADSL接入等等都需要实现运算量较大的智能的化算法。这些正是DSP的强项。 目前采用最多的是TI公司的TMS320系列和Motorola的DSP56000系列。 2.2 RTOS的要求 开发嵌入式系统需要一个支持实时多任务的操作系统(RTOS)内核来支持。因为嵌入式的应用不仅仅局限于原来的只是面对系统级的需求,而是需要面对用户级的应用,满足在各个层次上尤其是消费电子产品的需求。在这个方面,嵌入式的应用系统的开发和定制变得越来越重要。传统的使用循环控制的嵌入式系统不能满足足够的需求。目前在中国大多数的嵌入式软件开发还是在基于处理器直接编写,而没有采用商品化的RTOS,那么在开发嵌入式系统时无法将系统软件和应用软件分开处理,每次开发的时候都要特别定制系统软件和应用软件,开发的代价太大,成本过高。 使用RTOS内核,可以针对使用的处理器进行优化设计,做成一个高效率的实时多任务内核。并且在上面可以根据不同处理器体系结构设计出不同的API接口,这些是RTOS基于设备独立的应用程序开发基础。 在RTOS基础上可以编写出各种硬件驱动程序、专家库函数、行业库函数、产品库函数,和通用性的应用程序一起,可以作为产品销售。这个角度说,RTOS又是一个软件开发平台。 在RTOS里面最关键的部分是实时多任务内核,需要实现任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理、旗语管理等等。实现出效率高,体积小,移植功能强大、易于定制的RTOS是开发嵌入式系统的关键问题。 2.2.1 RTOS的概念 从表现上讲,RTOS是实时嵌入式系统在启动之后运行的一段背景程序。应用程序是运行在这个基础之上的多个任务。RTOS根据各个任务的要求,进行资源(包括存储器、外设等的管理、消息管理、任务调度、异常处理等工作。在RTOS支持的系统中,每个人任务都有优先级别,RTOS根据各个任务的优先级来动态的切换各个任务,保证对实时性的要求。这种体系结构简化了编程结构,比过去的循环控制的体系结构有了很大的改进。 从性能上讲,RTOS和普通的OS存在的区别主要是在“实时”二字上。“在实时计算中,系统的正确性不仅仅依赖于计算的逻辑结果而且依赖于结果产生的时间。”4从这个角度上看,我们可以把实时系统定义成“一个能够在实现指定或者确定的时间内完成系统功能和对外部或内部、同步或异步时间做出响应的系统”。4这个定义要求了: 1 系统应该有在事先定义的时间范围内识别和处理离散事件的能力; 2 系统能够处理和存储控制系统所需要的大量的数据。 2.2.2 RTOS的分类方法 开发RTOS,需要更多的关注到将来在其上设计出合适的应用相关的考虑。根据不同的应用,可以有很多种不同的侧重点,不同的侧重点对应了不同的分类方法。下面介绍两种主要是按照实时调度算法来分类方法。 1 周期性和非周期性 周期性就是系统通过传感器或者其他周期性设备对外部环境的变化做出探测,对在这个周期内探测到的变化做出反应。比如在化工厂中反应炉的温度探测控制,如果探测到温度升高一定水平,需要添加某种材料,保证化学反应的效率,并且将温度下降。 非周期性就是外部事件是循环性发生的但不是有规律性的,或者是突发事件。比如说,一架客机飞入一个进行空中交通管制的管制范围内所产生的事件。使用非周期性的检测就比周期性检测要好一些。 2 硬实时和软实时 硬实时和软实时的区别就在于对外界的事件做出反应的时间。硬实时系统必须是对及时的事件做出反应,绝对不能错过事件处理的deadline情况。在硬实时系统中如果出现了这样的情况就意味着巨大的损失和灾难。比如说核电站中的堆芯温度控制系统,如果没有对堆芯过热做出及时的处理,后果不堪想象。 软实时系统是指,如果在系统负荷较重的时候,允许发生错过deadline的情况而且不会造成太大的危害。比如说程控电话系统允许在105个电话中有一个接不通。 硬实时系统和软实时系统的实现区别主要是在选择调度算法上。选择基于优先级调度的算法足以满足软实时系统的需求,而且可以提供高速的响应和大的系统吞吐率;而对硬实时系统来说,需要使用的算法就应该是调度方式简单,反应速度快的实时调度算法了。 2.2.3 RTOS的体系结构 RTOS的体系结构可以用下图来表示: 1)硬件抽象层(HAL)包含了所有和硬件平台相关的代码,如上下文切换和I/O寄存器访问等等。它存在于RTOS的最底层,直接访问和控制硬件,对其上层的RTOS的机器无关代码提供访问和控制服务。这样可以简化RTOS内核的移植工作,除了设备驱动程序之外,在移植的时候只需要修改HAL的代码就可以了。 2)RTOS内核(Kernel)是用来为大多数程序乃至OS(网络、文件系统、驱动程序)构建一系列在抽象的文件上工作的抽象机,使用户程序及上层OS组件对系统设备透明。 在这个内核里面需要实现如下的接口界面: l 多线程支持(线程管理,线程同步原语) l 内存分配原语函数, l 文件操作接口函数 l 中断、异常及定时器函数 l 其它标准C库函数 l 程序动态装载/卸载 3)在提供的RTOS接口上需要有对用户程序提供的函数接口,专门为用户定制网络、图形、视频等接口。并且提供驱动程序开发界面,方便开发者对不同需求的设备定制驱动程序。 一般来说,RTOS内核的实现都为微内核的体系结构。所谓微内核技术是指将必需的功能(如进程管理、任务通信、中断处理、进程调度)放在内核中,而将那些不是非常重要的核心功能和服务(文件系统、存储管理、网络通信、设备管理)等等作为内核之上可配置的部分。这样,整个操作系统就是由提供一些基本服务机制的微内核加上一些服务进程构成,系统的各个系统调用和服务都是由内核发消息到不同的服务进程,服务进程执行相应的操作,然后以消息的方式返回内核。 使用微内核的体系结构,使得RTOS体积很小,便于直接放在ROM中,实现ROM固化;同时方便进行模块化的扩展。 使用微内核的结构也存在很多的缺点,如操作系统的服务模块在独立的地址空间运行,虽然可以将不同模块间的内存错误隔离开来,但是使得进程间通信和上下文切换的时间和开销大大增加,降低了系统效率。 2.2.4 RTOS的衡量标准 用来作为RTOS性能衡量标准的指标主要有如下几种: 1)系统响应时间(System Response Time):系统在发出处理要求到系统给出应答信号的时间; 2)任务切换时间(Context-Switching Time):多任务之间进行切换而花费的时间; 3)中断延迟时间(Interrupt Latency Time):从接收到中断信号到操作系统做出响应,并完成进入中断服务程序的时间。 2.3 网络要求 嵌入式系统是开发信息电器在软件系统方面的关键技术。信息电器是网络时代的产物,那么对于用来开发信息电器的嵌入式系统来说嵌入一个网络协议栈必然会作为开发嵌入式系统中必要考虑的问题。 在RTOS核心界面上实现网络协议栈,通过网络协议栈提供对嵌入式系统上网络应用程序的接口。需要能够处理标准的协议,如TCP/IP协议以及相应的应用系列,网络上的设备也需要提供安全、授权的功能。这些在网络协议栈里面都需要实现。当然,也增加了嵌入式系统的开发复杂度,提高了开发成本。 在网络协议栈的开发过程中,如果能够利用现成的代码,选用高性能、低价格、稳定的软件平台,提高开发效率,尽量降低开发成本。 2.4 用户交互环境界面 开发嵌入式系统应用于信息电器上,不得不考虑的问题是如何取得在市场竞争实体中的一席之地。提高市场竞争力不仅仅需要提供稳定、高效的嵌入式系统,更需要提供易学易用的用户交互界面接口。因为信息电器市场的一大部分是利用它替代PC上网的用户,他们缺乏必要的计算机知识,也没有必要花费太多的时间学习使用。如果能够提供一个有限资源需求,并且可以给用户提供友好交互界面的图形界面,市场竞争力必然会升高。 因此,这也作为研究嵌入式系统的一个重要论题。 2.5 小结 本章主要介绍了嵌入式系统的主要特点,开发出嵌入式系统的四点重要需求:嵌入式处理器的支持、RTOS的概念、网络方面的需求和用户交互界面需求。 第三章将分四个部分介绍使用Linux能满足这四个方面的需求,并且在后面的章节将详细介绍Linux是如何满足这些条件的。 第三章 采用Linux作为嵌入式系统开发的原因 从我们现在对嵌入式系统开发的需求来看,我们准备采取Linux作为开发嵌入式系统的工具,依靠Linux,实现我们的实时系统,并且可以通过Linux本身的不断升级,自动扩充升级我们的嵌入式系统。Linux下面已经有了Real-Time Linux或者RTAI,他们的做法是在Linux已经有的内核上面提供一个小型的实时内核。由这个实时内核来控制实时任务,由Linux原来的内核来控制非实时任务。Linux本身的内核作为实时内核可抢占的一个任务,因为这个实时内核实现得相当简单,那么在任务运行和切换的过程中,运行效率上可以达到硬实时的要求。 Linux提供了很多优点,在第一章已经描述。这些优点都可以被Real-Time Linux所利用。尤其是在第二章里面描述的那些嵌入式系统必需的要求上,Real-Time Linux可以很轻松的满足。下面针对这些需求阐述我们使用Linux的原因。 3.1 嵌入式处理器支持 Linux内核提供对多种处理器的支持,并且正在进一步增加对嵌入式微处理器的支持。Linux目前的内核支持Intel x86、Motorola/IBM PowerPC、Compaq(DEC)Alpha、IA 64、S/390、SuperH等处理器体系结构,如果使用这些系列的微处理器作为嵌入式系统的处理器,并不是不可能。 今年的EPF(Embedded Processor Forum)将在六月12日至16日于San Jose CA举行。这次论坛上将对嵌入式Linux支持的嵌入式处理器做专门的讨论,关心Linux对嵌入式处理器支持的问题。 3.2 实时支持 Linux本身不是一个实时系统,Linux的内核并不提供对事件优先级的调度和抢占支持。但是可以利用Linux的特性给Linux增加实时调度的能力。这里需要提出的实时系统实现的设想虽然在很早以前就提出过,但是仍然是具有创造性的,并且尤其在Linux时代这样的实时系统更是显得游刃有余。这种实现方案是双内核系统,即利用Linux内核,同时增加一个实时内核,两个内核共同工作,获得别的实时系统所不能达到的优势。 其实,双内核的解决方案在很早以前就已经提出。大概在20年前,贝尔实验室的开发人员就准备开发一种名为MERT的实时操作系统。这种操作系统就准备运行两个内核
展开阅读全文