当前位置:文档之家› ARMLinux在嵌入式手持设备上的移植及驱动开发

ARMLinux在嵌入式手持设备上的移植及驱动开发

南开大学

硕士学位论文

ARMLinux在嵌入式手持设备上的移植及驱动开发

姓名:杨威

申请学位级别:硕士

专业:计算机应用

指导教师:白刚

20040520

摘要

隧港诗算搬技寒懿发震,嵌入式系统己成为专}冀掇领域熬一个璧簧缀残部分,劳或走近年来新兴的研究熟点。ARM720T燧一种高效,低功耗的RISC处理器。以此为核心的NMS7210A燕一获集成了谗多辨嚣设锯静芯片,适合麓雅嵌入式产品鹣楚理籍。ARMLinux由于代码开放憔以及强大的网络功能,在ARM系列处理器中有着广泛的应用。ARMLinux和其他的嵌入式操作系统相魄,具有徽多优势。本文逸择ARMLinux作为嵌入式搡{#系统,NMS7210A作为嵌入斌处理器,天津嬲:球磁卡公司的GMCC.SDB作为开发平螽,详细介绍了ARMLinux的移植过程及驱动程序开发概要。

繁一章摄括论述了嵌入式系统、嵌入式磷传平台、嵌入式Linux淤及ARMLinux瓣一些基本概念。

第二章详缀分爨了嵌入式擎台翡疆辞帮分,毽括审央楚臻器子豢绫、存镰器子系统、输入输出子系统和通信子系统四大模块。在中央处理器子系统中重点介绍了ARM720T的体系鳐梅。

第三章主要介绍了ARMLlinux的内核基本原理、腐动过稷,对ARMLinux的文件系统进行了分析;对文件系统中的嗣录组织方式也进行了扼要的阐述。

第四章详细阐述了硬件调试的基本过程以及lRMLiilux移植的详细过程。

第五章概述了ARMLinux下驱动稷序的一般概念,并分析了一个简单的字符设备驱动程序的实铡。阕时还终会具体矮曩,分缀了足个实际驱动程廖熬牙发概要。

关键词:嵌入式系统ARMLinuxNMS7210A嵌入式操作系统嵌入式处理器

Abstract

Withthedevelopmentofcomputerembeddedsystemhasbecomeanimportantpartofcomputerscienceandresearchingfocus.ARM720Tisanefficientlow-powerRISCcore.NMS7210A,whichisbasedonthiscoreandintegratedwithmanydevices,issuitableinembeddedsystem.hRMLinux,asabranchofLinux,hasbeenportedtomanyARMseriesCPUforitsopeningsourcesandstrongnetworkfactionsinembeddednetworkfacilities.WechooseARMLinuxasembeddedoperationsystem,NMS7210AasembeddedprocessorandGMCC—SDBassoftwaredevelopmentboard.ThisarticledescribestheportingprocedureofARMLinuxtoNMS7210Aandtheprocedureofdevicedriverdevelopment.

Inchapterl,acomprehensivedescriptionabouttheconceptionofembeddedsystem,hardwareplatform,embeddedLinuxandArmLinuxisgiven.Inchapter2,theembeddedhardwareplatform,includingCPUsubsystem,memorysubsystem,I/Osubsystemandcommunicationsubsystemisdiscussedindetail.ThearchitectureofARM720Tismentionedindetail.

Inchapter3,adescriptionofthebasicroutineofARMLinuxkernelandthestartupofARMLinuxisgiven.Thefilesystemanditsdirectionmanagementisalsodiscussed.

Inchapter4,thehardwaredebugandtheportingprocedureofARMLinuxarediscussedindetai1.

Inchapter5,thegeneralconceptionofdevicedriverofARMLinuxismentionedfirst,andasimplecharacterdevicedriverisdiscussed.Severaldriverinthisprojectarealsodiscussed.

Keywords:EmbeddedSystem,ARMLinux,NMS7210A,EmbeddedOS,EmbeddedProcessor

ARMLinux在嵌入式手持设备上的移植及驱动开发

第一章绪论

计算机经过短短几十年的发展,现在己经进入了后PC时代。人们对计算机的认识正随着各种新技术的出现而变得越来越深刻。计算正逐步从桌面走进设备里面,计算机系统也从各种有形的外观也变为无形。大到航天航空领域、小到手中的一个PDA,都植入了计算机系统,人们把这样一个系统叫做嵌入式系统。随着CPU以及存储器的大幅降价,这种把一个计算机系统植入设备的方法将变得更加普遍。这一类应用正是现在计算机领域研究的热点,也是我国rr行业扶植的重点。

1.1嵌入式系统及其发展现状

所谓嵌入式系统(EmbeddedSystems)是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。这一类系统通常被植入设备里面,在外表看不出来,它里面运行的程序能够自动控制和管理设备,有的甚至具备自适应能力,有若高度的智能,因而这种技术具有极其广泛的应有价值。

随着计算机技术的发展,嵌入式系统己不仅仅属于计算机领域的一个研究热点,在电子、工业控制、航天等领域都有很广泛的应用。嵌入式设备是指具有计算机功能,但又不称为计算机的设备或器材,它几乎包括了我们周围的所有电器设备:PDA、手机、机顶盒、汽车、微波炉、电梯、安全系统、自动售货机、医疗仪器、立体音响、自动取款机等。同样在通用计算机不适合应用的场合嵌入式系统也有很大的发展空间。和通用计算机不同,嵌入式系统是针对具体应用的专用系统。消费品中的嵌入式应用一般具有成本敏感性,它的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能。但是在航天等高技术中应用的场合,嵌入式系统更需要安全可靠。好的嵌入式系统可以根据任务的具体情况灵活地增减硬件和软件。

1.1.1嵌入式系统硬件概述

嵌入式硬件系统的核心部件是各种类型的嵌入式处理器。目前据不完全统计,全世界嵌入式处理器的品种总量已经超过1000多种,流行体系结构有30几个系列,其中8051

俸系的占裔多半。联入式鲶毽器静溥垃窒阏一般款64kB搦64MB,楚理速度麸e.1MIPS到200MIPS。根据其现状,嵌入式计算机可以分成下面几旋。

嵌入式锾处理器09mbeddedMicroprocessorUnit,瑚㈣

嵌入式微处理器酶基础是通用计算枫中的CPU。在应用中,将微处理嚣装配农专门设计的电路板上,只僳留和嵌入式应用有关的母板功能,这样可默大幅度减小系统体积和功裁。为了淡足嵌入戏应用蠡孽特殊要浓,嵌入式微处理器虽然在功辘上和振璨徽处理器基本是~样的,但在工作温度、抗电磁干扰、可靠性等方面一般都做了各种增强。

嵌入式赴理器瓣蓠圭娶骞X86,PowcrPC,68000,Mn,S,ARM系歹l等。

嵌入式微控制糕(Miero-ControllerUnit,MCU)

嵌入式缀控审l嚣又称革舜褪,鬏名恿义,就燕将整个诗算祝系统集成弼~块蕊片牵。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、Watchdog、I/O、串符口、脉宽调帚《输出、A/D、D/A、FlashRAM、EEPROM等各种必要功能胸外设。为适应不同的皮用簧求,一般一个系列的单片机鼹有多种衍生产晶,每种衍生产鼯的处理器内核都是一样的,不同的是存储器j}珏外设的配爨及耋}装。这样霹戳霞攀片枫最大限度她鄹应用游求援黩醚,功戆虿多不少,从露减少功耗和成本。

嵌入式缀控嘉l器嚣蓠鹣鑫耪释数量最多,魄较毒代表毪懿遴鼹系列包摄8051,MCS-96/196/296,MC68HC05/ll/12/16,68300等。粥外还肖许多半通用系列如:支持USB餐掰髂MCU8Xe93Q国3l,C540,C541;支持12C,CAN-Bus,LCD及众多专蘑MCU葙兼容系列。目前MCU占嵌入式系绕约70%的市场份额。

嵌入式DSP处理糨_anbeddedDi萝嘲Signal

Processor,EDSP)

DSP处理爨对襞统结孛龟稠指令进行了特殊设计,使其邋合于执符DSP爨法,编译效率较高,指令执行速殿也较高。在数字滤波、FFT、谱分析等方面DSP算法难在大爨进入嵌入建攫域,DSP应爝芟放农遗趸摹片规孛以普逶搔令实理DSP秘戆,过渡受|采鼷嵌入式DSP处理器。

嵌久式DSP憝蓬器魄较有钱袋睡懿产熬是TexasInstruments豹TMS320系舞霸Motorola的DSP56000系列一TMS320系列处理器包括用于控制的C2000系列,移动通信懿C5000系列,敬发经麓更高的C6000鞍C8000系残。DSP56000目前已经发震成为DSP56000,DSP56100,DSP56200和DSP56300等几个不同系列的处瓒器。

嵌入式芹上系统(SystemOnChiF,soc)

随着EDA的推广和VLSI设计的普及化,及半导体工艺的迅速发展,在一个硅片上实现一个更为复杂的系统的时代己来临,这就是SystemOnChip(SOC)。用户只需定义出其整个应用系统,仿真通过后就可以将设计图交给半导体工厂制作样品。这样除个别无法集成的器件以外,整个嵌入式系统大部分均可集成到一块或几块芯片中去,应用系统电路板将变得很简洁,对于减小体积和功耗、提高可靠性非常有利。

SOC可以分为通用和专用两类。通用系列包括Siemens的TriCore,Motorola的M—Core,某些ARM系列器件,Echelon和Motorola联合研制的Neuron芯片等。专用SOC一般专用于某个或某类系统中,不为一般用户所知。一个有代表性的产品是Philips的SmartXA,它将XA单片机内核和支持超过2048位复杂RSA算法的CCU单元制作在一块硅片上,形成一个可加载JAVA或c语言的专用的SOC,可用于公众互联网如Intcraet安全方面。

后两种的嵌入式处理器即嵌入式DSP处理器((EDSP)和嵌入式片上系统(soc)基本上算是专用的嵌入式平台,使用的广泛性不如前两个系统。

嵌入式微处理器(0iMPU)和工业控制计算机相比,具有体积小、重量轻、成本低、可靠性高的优点。与嵌入式微控制器(MCO)相比较,它在运行速度、所支持外设的广泛性以及寻址空间的大小上又占据了绝对的优势。从技术上看,MCU代表的是八十年代的技术。EMPU则代表的是九十年代的技术。MCU往往是8位,16位的,而EMPU则往往是32位和64位的。

尽管MCU在体积、功耗以及成本上比EMPU有很大的优势,但是,为开发一个实用而且功能强大的嵌入式系统,EMPU还是不错的选择。

在EMPU中,ARM系列、MIPS系列属于RISC;摩托罗拉的68K,POWERPC系列,X86系列等属于CISC。EMPU市场上,各类内核应用十分广泛,没有那一家可以一统天下。

在综合比较了多个嵌入式处理器内核以后,我们选择了ARM内核作为项目的硬件内核。

1.1.2嵌入式操作系统概述

简单的嵌入式系统一般并不使用操作系统,只包含一些控制流程,但是当嵌入式系统所提供的功能复杂化之后(如:图形用户界面和网络支持等),简单的流程控制就不能满足System,EOS)黼T。嵌入式操作系统的产生为应用程序的开发带来了方便,使开系统的要求,这时就必须考虑使用操作系统。这时,嵌入式操作系统门BnlbeddedOperation

发人员不必关心硬件资漏所有的硬件资源都由嵌入式操作系统管理。

随着EOS的广泛应用,业界已推出一些应用比较成功的EOS产品。随着各种应用的出现,EOS也从单一的弱功能向高专业化的强功能方向发展。归纳起来EOS应该有以下几个特点:小的系统内核;较强的实时性、多任务功能;能够提供各种设备驱动程序;提供图形界面:提供TCP/IP,PPP等网络协议支持。

作为硬件资源的管理者,嵌入式操作系统最小构成应包含下列各部分:

1)任务调度

在当前的嵌入式应用中,特别是对一个复杂的嵌入式应用而言,用单任务来实现是不可能的,而只能采用多任务实现,因此任务调度策略的优劣是至关重要的:虽然有各种各样的任务调度方法,但概括起来可以分为优先级调度、轮转调度、时间片调度三种。优先级调度又可以分为两种:优先级抢占和优先级不抢占。优先级抢占是指当有高的优先级进程被激活后,则立即终止当前运行的进程,使其抢占CPU运行。优先级不抢占是指当有高的优先级进程被激活后,并不立即终止当前运行的进程使其抢占CPU,而是将其放到进程就绪队列中,在当前运行的进程结束后,从进程就绪队列中选择优先级最高的进程运行。轮转调度是进程管理者按照一个固定的时间间隔让就绪进程轮流运行。时间片调度是根据每个进程各自的实际情况在不同数量的单位时间的时间片内运行。

在一般的操作系统中,固定采用其中的一种或几种方法进行任务调度。例如在Unix和Linux中,采用了优先级不抢占、轮转和时间片三种方法,而在实时操作系统中,优先级抢占则是必不可少的。

无论是在一般的操作系统中还是在嵌入式操作系统中,任务调度都是操作系统的核心。在嵌入式操作系统设计中,很难说哪一种方法最好,而是要根据被嵌入的实际系统的需求进行优化选择。由于线程的切换速度快于进程的切换速度,因此,在实时嵌入式应用中,多采用单进程多线程调度来提高实时性。在嵌入式操作系统中一般都配有上述三种调度算法的库函数,以满足不同用户的不同需求。在用户开发完自己的应用系统后,没有使用到的代码是不会被连接到最终系统中的,这一点是与一般的操作系统非常重要的区别。一般的操作系统则是将所有有关代码都加载到计算机系统中,而不论应用时是否会使用这些代码。

在实时嵌入式应用中还有一种调度方法,即期限(d∞dli∞)调度法。这种调度方法是设法保证每一个进程(或线程)能在它的期限之前被调度执行完,这种方法目前正在研究之中。

2)存储管理

嵌入式操作系统的存储管理通常比较简单。在具体的嵌入式应用中,进程(或线程)的数量和各自可能使用的内存容量是可以在开发时预测的,因此嵌入式操作系统通常采用静态内存分配。尤其是在实时嵌入式应用中,如果采用虚拟存储技术,因为页交换的时间不可预测,所以是不可取的。对于动态内存分配通常的做法也是从缓冲区中动态分配一块固定大小的内存,在使用完毕后就释放。一般地说,嵌入式操作系统的存储管理没有垃圾收集的功能。在一个复杂的应用系统中,可能会有几种情况的组合,应视具体情况处理。例如,在一个有多个处理器,且既有硬实时应用,又有软实时应用和非实时应用的嵌入式系统中。设计时可以在硬实时部分采用静态内存分配,软实时部分采用动态内存分配,而在非实时部分采用虚拟存储技术,并且使这三种应用分别运行在不同的处理器上。

在内存分配的策略上,嵌入式操作系统强烈地依赖于实际的被嵌入系统。一个通用嵌入式操作系统可以提供几种分配策略,而用户在开发自己的实际系统时可以选择,这就再次强调了前文提到的嵌入式操作系统的可裁剪性。存储管理的另一个重要特性就是内存保护。在一般的操作系统中,每个应用程序都有自己的地址空间,不能任意访问其它应用程序的地址空间。这样,当一个应用程序崩溃时,不会对其它程序产生影响。尽管存储器芯片价格已经很便宜,但因受应用环境的限制,不能大量使用存储器,这时嵌入式操作系统的代码量就受到严格限制。例如有的嵌入式操作系统只有几KB,它在处理内存保护方面就非常薄弱;这样的嵌入式操作系统一般应用于一些即使系统崩溃,也不致造成重大损失的领域,例如手持式电话。但某些嵌入式应用则对内存保护有非常严格的要求,例如在武器系统中,就要求嵌入式操作系统具有内存保护的功能。

3)中断

计算机系统接受事件有二种方法:查询和中断。在多任务操作系统中,由于采用查询方式处理事件或I/O请求会消耗大量的系统资源一一cPu时间。因此无论在一般的操作系统还是嵌入式操作系统中都采用中断方式来处理事件或I/O请求。

在操作系统中,中断是同中断处理程序联系在一起的。以I/O操作为例,一般的过程是:任务A发出I/O请求后被挂起一操作系统切换到其它任务运行一№I设备完成相应的操作并发出中断请求一操作系统调用相应的中断处理程序一解挂任务。

在嵌入式操作系统中,对中断处理十分重视,可以说多数嵌入式操作系统都是事件驱动的。在嵌入式操作系统中,中断处理程序引发的任务切换如下所示:

任务A运行一响应中断并执行中断处理程序,切换到任务B一任务B运行退出后,切换到任务A一任务A继续运行。在中断处理程序(IsR)中仅执行一些必要的状态转换,对于

事件的真正处理则利用中断任务(如上述的任务B)完成。这样使得中断处理程序的运行时间尽可能短,以便系统可以处理其它中断事件。同时,在ISR中不能执行有关信号量的操作。因为ISR具有最高优先级,如果在ISR中执行了信号量操作而被挂起,则整个系统将会死锁。在中断处理上,一般的操作系统与嵌入式操作系统的不同之处是现场保护。~般的操作系统的中断现场保护是由操作系统来完成的,在中断处理完成之后,也由操作系统恢复现场。在嵌入式操作系统中,有时由于受到代码量的限制,中断现场的保护往往由中断处理程序来完成。

在中断处理程序的入口要保护在中断处理程序中用到的寄存器,在中断处理完成后恢复。这样一方面减少了代码量,另一方面提高了中断响应时间,但是却损失了系统的安全性,同时也增加了调试的难度。这是在嵌入式操作系统的设计中应该予以关注的问题。

4)操作系统与用户的接口

操作系统提供给用户使用的有二类接口。一类是人机界面,无论是视窗形式还是命令行形式,这个接口确切地说并不能作为操作系统的一部分,而仅仅是操作系统的一个外壳。这个界面是为了方便用户使用操作系统,而这个接口在嵌入式操作系统中是不存在的。这里要讨论的是另一个接口,操作系统提供给用户开发自己的应用程序接口(API),也就是系统调用。无论是一般的操作系统还是嵌入式操作系统都应具有这个接口。每一个操作系统提供的系统调用的功能和种类都不同。当然,对于一个操作系统来说,它提供的系统调用越多,则功能越强,对于应用程序的开发,也就越能提供高效而简单的支持,同时也会减少应用程序的维护量。相反,一个操作系统的系统调用越少越单一,那么应用程序相对就要做更多的工作,应用程序也就越复杂。为了适应不断复杂的应用程序开发的需求,操作系统中设计的系统调用也就越来越多,越来越复杂、功能越来越强大。但是这一规律并不适用于嵌入式操作系统。嵌入式操作系统的应用领域非常广,简单的可以应用在调制解调器上,复杂的可以应用在卫星地面通信接收站。这就决定了嵌入式操作系统所提供的系统调用的数量和功能是因应用不同而不同的。尽管可裁剪性是嵌入式操作系统的一个非常重要的特性,但是任何一个嵌入式操作系统都不可能从具有各种完善功能、代码达几百KB的操作系统,裁剪到只具有实时调度和信号量操作的几KB代码。所以嵌入式操作系统只能面向实际的被嵌入系统的具体需求,确定系统调用,以便达到在提供最有效的系统调用的同时具有最小的代码量。

最后,在系统调用的形式上要提到POSIX。由于各个操作系统提供自己的系统调用,其类型、功能和调用格式各不相同,这样给应用程序的移植带来了很大困难。POSIX标准

的提出正是试图解决这一问题的。POsⅨ试图定义一些标准的系统调用接口和功能,尽管各个操作系统的实现方式各不相同。POSIX是以类Linmx为基础开发的;同时,它试图将实时和非实时的情况统一化,这样就丧失了一定的效率和增加了代码量。所以有些操作系统在提供POSIX兼容的系统调用的同时,也提供了非POSIX兼容的系统调用。

1.1.3几种嵌入式操作系统的比较

目前市场上流行的,使用最多的EOS产品包括WindowsCE,LYNX,Vxwork,Nucleus,PalmOS,pSOSystem等。除了商业化的操作系统外还有一些非商业化的嵌入式操作系统可以使用,其中嵌入式Linux将成为完全可以和WindowsCE等EOS相抗衡的嵌入式操作系统。

WindowsCE是一种32位的多任务操作系统,它经过压缩,可以移植,能够开发多种企业和客户类设备。由于它是微软公司的“维纳斯计划”的核心,包含了InteractExplorer的版本,可以和Intemet实现连接、同步交换信息。如果开发者熟悉Windows开发环境,就可以很快地开发出所需的基于WindowsCE的应用程序。

Lynx当今32位微处理机均可用于台式机和工业计算机市场,将其电路的30%.50%都用于存储器管理部件(MMU)。但是大部分实时操作系统产品并没有利用这个关键技术,导致在MMU硅片以浪费功率而告终。Lynx充分利用了这些CPU提供的基于MMU的存储器保护和虚拟寻址。另外它还具有很好的实时响应能力,因而具有非常优良的性能。

Vxwork是WindRiverSystem公司开发研制的一种高性能的嵌入式实时操作系统。它包括了操作系统本身和其集成开发环境。Vxwork以其优良的可靠性、开放性、实时性和易用性赢得了大量的客户。

PalmOS是一种专为掌上设备设计的32位操作系统,它运行在一个抢占式的多任务内核之上。同一时刻用户界面仅仅允许一个应用程序被打开,这个被打开的程序将控制整个屏幕,应用程序始终运行在单用户界面进程上。也就是说,它们不允许所谓的MDI(多文档接口)存在,所有的程序必须以sDI(单文档接口)的形式存在。与WindowsCE相比,PalmOS显然更为紧凑。

pSOS系统是一个模块化、高性能的实时操作系统,专门用来设计嵌入式微处理器。它提供了一个基于开放系统标准的,彻底的多任务环境。pSOS操作系统拥有集成的开发工具平台,这些开发工具可以驻留在UNIX或DOS的计算机上,通过串行口或TCP/IP网络

与其相连。它是一个多任务内核。它提供一种及时应答、高效的机制与用户的实时应用系统协调合作。现阶段,全世界范围内有超过二千万的嵌入式设备运行着pSOS。

QNX是QuanummSoftwareSystem公司研制的基于Pc的实时多任务的、可扩展的操作系统,它具有微内核结构,用户可根据需要选择其中一些组件来定制操作系统。

国内开发的Hopen是一个按嵌入式系统要求设计的操作系统,它是由一个很小的内核及一些根据需要进行定制的系统模块组成。该系统在处理中文及联网方面都很有特色。

Linux主要用作服务器操作系统,但它也逐渐应用于工作站及桌面PC。同样,Linux也因为它继承了服务器OS的特性而成为下一个智能型嵌入式设备的理想操作系统。

1.2嵌入式硬件平台概述

1.2.1硬件平台的选择

目前市场上有许多嵌入式芯片,如何选择一种芯片来设计开发调试平台非常重要。与全球PC市场不同的是,没有一种微处理器可以主导嵌入式系统市场。仅以32位的CPU而言,就有100种以上嵌入式微处理器。嵌入式系统设计的差异性极大,这也因而成了100余种微处理器存在的原因。

在微处理器市场上,某些公司很有名气如Motorola,Intel;而有一些小的公司如QED(SantaClamCA)虽然名气很小,但也生产很优秀的微处理器。另外有些公司,如ARM,MIPS等,只设计而不生产CPU,而把生产权授予世界各地的半导体制造商。

Motorola传统的68K结构仍是32位CPU的主流。虽然它起源于80年代初,但在1997年依然销售了8000万个,并基本上是传统680xx芯片,另外就是683xx以及Coldfire。

68K嵌入式微处理器最大的挑战者是MIPS的授权制造商。众所周知,MIPS属于SGI公司,而MIPS主要做嵌入式系统,SGI工作站只是MIPS芯片销售额的一部分;紧跟在MIPS后的另一个RISC芯片制造商是Hitachi的SH,SH主要在远东销售(日本最多),北美则很少有人使用。

ARM是另外一种近年来在嵌入式系统有影响力的微处理器制造商,ARM的设计非常适合于小的电源供电系统。Apple在Newton手持计算机中使用ARM,另外有几款数字无线电话也在使用ARM。

除MIPS,sH和ARM之外,就数PowerPC和X86了。这两款微处理器在桌面系统用

量极大,但在嵌入式系统中的影响却不够大。1997年,Intel,AMD及其他X86兼容厂商共生产了900万个X86嵌入式CPU。实际上,在嵌入式X86CPU方面,AMD的工作远比Intel多,如AMDl86/188系统和AMD基于386,486Elan系统(把整个PC基成在单个芯片上)。

选择芯片要考虑芯片的性能,功耗,专业化水平。考虑到各种因素,我们选择了NeoMagie公司的NMS7210A芯片,该芯片是一款基于ARM720T的微处理器。ARM720T集成了ARM71DMI微处理器内核、8K的Cache、写缓冲区及存储管理单元M讯,。ARM720T在成本上比较便宜,比较适合作消费类产品,且功耗很低,是手机、PDA的良好选择。NMS7210A芯片集成了许多外围设备接口,这对于快速开发是很有帮助的。

我们采用天津环球磁卡股份有限公司(GMCC)开发的嵌入式开发平台(以下简称GMCC—SDB,GMCC—Softwaredevelopmentboard),它是一个具备无线通信技术、网络技术、图像采集技术、指纹识别技术、手写汉字识别技术和智能卡技术的高科技集成嵌入式系统。

1.2.2ARM与ARM720T处理器

ARM即AdvancedRISCMachines的缩写,ARM系列芯片由英国AdvancedRISCMachines(ARM)Limited公司设计。ARM公司是设计公司,本身不生产芯片,只提供知识产权(璩)。ARM公司是32位嵌入式R.ISC微处理器领域的领先供应商,在世界范围有超过100个盼合作伙伴—包括半导体工业的著名公司,从而导致了大量的开发工具和丰富的第三方资源,它们共同保证了基于删处理器核的设计可以很快投入市场。

ARM处理器的出色性能使系统设计者可以得到完全满足其确切要求的解决方案。借助于来自第三方开发者广泛的支持,设计者可以使用丰富的标准开发工具和ARM优化的应用软件。

ARM32位体系结构目前被公认为是业界领先的32位嵌入式RISC微处理器结构。所有ARM处理器共享这一体系结构。这可确保当开发者转向更高性能的删处理器时,

在软件开发上可获得最大的回报。

当前删体系结构的扩充包括:

Thwnb:16位指令集,用以改善代码密度。

DSP:用于DSP应用的算术运算指令集。

Jazelle:允许直接执行Java字节码的扩充。

ARM处理器本身是32位设计,但也配置Thumbl6位指令集,以允许软件编码为更短

的16位指令。与等价的32位代码相比,占用的存储器空间节省高达35%,但仍然保留了32位系统所有的优势(例如,访问一个全32位地址空间)。Thumb状态与正常的ARM状态之间的切换是零开销的。ARM的JazeUe技术提供了Java加速,可得到比基于软件的Java虚拟机(JVM)高得多的性能。与同等的非Java加速核相比,功耗降低80%。

根据内核的不同,ARM处理器分为ARM7,ARM9,ARM9E,ARMl0,SecurCore。

ARM7系列为低功耗32位核,最适用于对价位和功耗敏感的消费类应用。ARM7具有嵌入式ICE.RT逻辑、非常低的功耗、能提供0.9MIPS/MHZ的三级流水线和冯?诺依曼结构等特点。

ARM7系列包括:ARM7TDMI,ARM7TDM/.S,ARM7EJ.S,ARM720T结构。其中的ARM720T集成了ARM7TDMI微处理器内核、8K的Cache、写缓冲区及存储管理单元MMLT。

1.3嵌入式Linux操作系统概述

嵌入式Linax由于代码开放性以及强大的网络功能,在中、低端的嵌入式网络设备中的应用,比起pSOS,VxWorks有许多优势。IAnux现在还支持蓝牙技术。开发嵌入式Linux产品,从产品上市时间到产品系列化,所需的投入比较少。相对于W'mdowscE'QNX以及国内的HOPEN等嵌入式操作系统,嵌入式Linux以其特有的开放性、与生俱来的网络特性格成为嵌入式操作系统的主流之一。

1.3.1嵌入式Linux操作系统的优势

l、便于扩充实时性要求

操作系统实时性的决定因素与中断例程本身、内核中的驱动程序还有内核中任务调度程序有关:而响应延迟时间主要受中断的优先级和其他进程暂时地关闭中断响应的影响。因此管理和驱动中断的机制必须保证实时要求。根据这个要求,大多数嵌入式系统并不具备严格的实时性,而windowscE基本上不具备实时性的特点。但是,嵌入式Linux可以很好得满足实时性要求。对于Intelx86处理器,RTLinux就是很好的实时扩充例子。它提供了一个精巧的实时性内核,并把标准Linux内核作为实时性内核的一个进程同用户的实时进程一起调度。因此实时性要求很高的任务不受非实时的Linux的干扰,从而实时性得以满足。,

2、具有很强的适应性和可靠性

嵌入式Linux不仅支持x86芯片,而且广泛支持多种平台,到目前为止可以支持二、三十种CPU。很多CPU包括家电业的芯片,都开始做Linux平台的移植工作,且移植的速度非常迅速。同时,嵌入式Linux在网络支持方面是非常完善的,提供了对十兆、百兆、干兆的以太网络以及无线网络、TokenRing(令牌环)、光纤甚至卫星的支持。

此外,高可靠性是嵌入式Linux领先于其他嵌入式操作系统最明显的地方。Linux原先用于服务器领域,故有较高的可靠性。嵌入式Linax中虽然对内核进行了一些裁减,但是仍然保持了原Linux高可靠性的特点。基于Linux应用的产品中一般很少会出现系统崩溃的现象。

3、具有成熟的开发工具

开发嵌入式系统的关键是需要一套好用的开发和调试工具,而且在开发不同阶段还需要不同的工具。

传统的开发调试工具是Ic卜即在线仿真器,它取代目标板的微处理器,给目标程序提供仿真环境,同时可以连接监视器,允许开发者调试和监视程序的运行。但这种设备价格非常贵。如果使用嵌入式Linux,不用ICE也可以很好地开发和调试工作了,同时还降低了开发费用。

嵌入式Linux利用GNU项目的C编译器来编译程序,使用gdb调试器进行源代码级调试程序。它们提供了合适的手段来使客户能够开发嵌入式Linux的各种应用程序。开发时在Pc上交叉编译应用程序,调试时通过串口telnet登陆硬件平台,利用NFS调试程序。

4、可以灵活地配置内核

一般说来,需要使用嵌入式操作系统的存储容量都十分有限,不能像一般的计算机那样采用海量存储器来进行数据存储。一般是采用软件固化的方法,将程序和操作系统嵌入到整个产品里面。在此过程中减少操作系统的体积是关键。我们很难想象在一个紧凑的硬件设备外面再接一个通用的硬盘,或是将几十兆上百兆的操作系统输入到硬件的ROM或者RAM里面去。因此,对于嵌入式系统来讲,功能强和体积小常常是鱼和熊掌不能兼得的。

pSOS以及其他的一些操作系统,虽然内核只有几十K,但是要为相关的产品添加额外的功能才能使用,比如网络功能,及应用程序包;但这样一来总体积往往变大很多。嵌入式Linux除了本身体积较少以外,用户还可以根据不同的任务来选定特定内核模块,而将不用的部分去掉。这样就能减少体积,从而很好地解决了功能和体积之间的矛盾。

1.3.2嵌入式Linux的分支—一ARMI。innx

目前,国内外不少大学、研究机构和知名公司都加入了嵌入式Linux的研发工作,较成熟的嵌入式Linux产品不断涌现,AR_MLmux便是嵌入式Linux的一个分支。ARMLinux项目开始于1994年的夏天。该项目计划将Linuxl.0.x的内核移植到AcornA5000上,但当时的I..inux内核并没有可移植性,也还不支持诸如SPARC、MIPS、Alpha和M68K等体系结构的处理器,相应的交叉编译器GCCforARM也不具备,配置和编译内核都非常困难。1995年初,GcC2.6.1开始支持ARM处理器,之后ARMLinux获得了较快的发展。

目前,ARMLinux支持包括ARM610、ARM710、ARM720Tcores、ARM920Tcores、

StrongARMll0、S打ongARMll00、XScale-等系列的ARM处理器,这些处理器都是具有内存管理单元(MMU,MemoryManagementUnit)的,与之相对应是NOMMU的uClinux,

主要是支持AItM7TDMI系列的微处理器。在ARMLinux的基础上,很多开发者将其移植到了自己的硬件平台上,并提交相应的MachineType。从网站上得到的数据表明,目前移植成功的MachineType已经多达三百余种。

ARMLinux官方网站是htt9://www.arm.1inux.org.uk/,主要的负责人是RusseUKing,他目前在ARM公司,从事将LinuxKernel移植到最新的ARM平台上,他同时也是ARMLinux的主要维护者。

IA.ARMLinux的移植

标准Linux的内核源码可以在fIp://fIp.kernel.org上下载,也可以在很多的镜像邱站点上下载,建议使用2.4以上版本的内核。ARMLinux是基于标准Linux内核为ARM做的补丁,它可以从fIp://ftp.tll'/n.1inux.org.uk上下载。下面介绍一下在移植ARMZinux中会遇到的一些关键问题。

1、交叉编译环境的建立

移植ARMLinux需要有一台安装了Linux操作系统的PC机,同时还要有一块开发板。开发板的体系结构ARMLinux必须支持。

对于不同体系结构,GNU都提供了相应的开发软件包,这可以到网上查找。其中有些是源代码包,下载后要经过GCC的编译才能应用;有些是应用程序包,安装后即可使用。安装完了工具包后,Ij删x中就有了基于该体系结构的编译器,链接器,调试器以及一些

实用小工具,例如反汇编,反编译等,以后编译ARMLinux内核、制作文件系统和开发应用程序都要依赖交叉编译系统。

2、ARMLmux的内核加载方式的问题

ARMLinux的内核有两种可选的运行方式:可以在Flash上直接运行,也可以加载到内存中运行。前者可以减少内存使用。

Flash运行方式:把内核的可执行映像文件烧到Flash上,系统启动时从Flash的某个地址开始逐句执行。这种方法实际上是很多嵌入式系统采用的方法。

内核加载方式:把内核的压缩文件存放在Flash上,系统启动时读取压缩文件在内存里解压,然后开始执行,这种方式相对复杂一些,但是运行速度可能更快(gAM的存取速率要比Flash高)。同时这也是标准Linux系统采用的启动方式。这里需要编写一个Boofloader软件。Bootloader软件实现的功能包括开机寄存器的配置,内核与文件系统的加载,传递硬件与启动参数给内核。网上有许多Bootloader可以下载,但是都需要根据自己开发板硬件的信息进行改写。与Pc机上的加载过程做对比,Boofloader的功能类似BIOS+LinuxL几O。

3、ARMLinux内核的编译

从网上下载一个标准Linux源代码和ARMLinux补丁的源代码,将标准Linux源代码上打上ARMLinux的补丁,根据自己的需要对内核进行裁减,用交叉编译器对内核进行编译。

4、ARMLIau,x的根(ra00文件系统制作及其加载

ARMLinux采用RAMdisk的方式来装载根文件系统,所以在运行内核之前,需要先制作RAMdisk,将必须的文件和设备加入到RAMdisk中。

由于基于Linux的应用程序较多且源代码公开,因此基于ARMLinux的产品可以进行快速开发,只要能够找到相应的源代码,在制作文件系统时编译进去就可以了。

1.S研究工作及本论文内容

ARMLimtx在具有MMU的嵌入式系统中具有较好的技术优势,而ARM720T又是一种高效,低功耗的KISC处理器。基于此,本论文将AR_MLinux嵌入式操作系统移植到了一款基于ARM720T内核的嵌入式系统平台中,并在这个系统中实现了删Lin_11)【操作系

统的一些驱动的开发。在此基础上可以开发各类嵌入式应用程序,并可以在该平台上研究

嵌入式操作系统。

在本论文下面的篇章中将详细介绍以下内容:第二章介绍了嵌入式操作系统的硬件平台,包括处理器,及各种外设接口。第三章介绍了ARMLinux的基本原理及嵌入ARMLinux过程中所用到的基本知识。第四章按步骤详细描述了硬件调试、ARMLinux的嵌入式移植过程。第五章讲述了驱动开发的原理和过程。

本章小结

本章是绪论部分,着重介绍了嵌入式系统、嵌入式硬件平台、嵌入式Linux以及ARMLinux的一些基本概述。最后还提出了本文的主要内容。

ARMLimux在嵌入式警持设备上的穆挂及骧稿辩发

第=章嵌入式系统硬件平舞

嵌入式嫒传平静包括孛央娥璎器、赡隧懿控制毫鼹、鼹读存鼹嚣、可读冀存德嚣翔终基泼蛰。京选耩上述瑟转蕊片辩要缘◇考纛它艇骢凌糍、秘载、体羧、成零、胃嚣赣、毫磁菠雾蛙等穷嚣特瞧,骧爱扶众多瓣蕊冀夺选择最逶会瑷瓣黢耀懿芯片。农逡择棼冀霹浚毒羧搿静蕊舞,只鸯簸逶会矮瓣静芯片。遂{羹是免仟么嵌入式系统苍嚣分类镄纂,氆建硬锌乎惫帮纛藏Afl熬原函。壅予酝入式产瑟垒产量和需求豢都缀大,激天姣蕊片成为务个半簿傣厂离之阕竞争静热点。秘通溺计算税不两,嵌入式采统的硬件必颓黼效率城设计,这弹方辘使产蕊更葵青竞争力。

窿我察矮嚣孛靛磁了天津强球磁卡公霹(GMee)开发翡强入式开发平台GMCC-SDB,其硬件系绕主癸包括率爽处灌嚣子系绫、存储予系统、通信予系统和输入输出予系统。如图2,1掰示。

熙2,lGMCC—SDB嵌入式羚发平台系筑溪始框鼹

ARMLJnux在嵌入式手持设备上的移植及驱动开发

2.1中央处理器子系统一NMS7210A

在项目中我们选择了NcoMagic公司的NMS7210A芯片。该芯片是一款基于ARM720T的微处理器,适合使用在移动电话、个人数据助理、手持个人计算机和智能电话中。它的内部

I碱黔阱C溢onnl褂eI…卜霪移i|{jh

mRAM峨.'jIICoMmlI。'IIif

.疆

_。。’。’。’。。m自鲥Ic‘lF—iⅥV“『。IV”077哪‘E-.参iji:}.!_iii参黼。函≯ii;i

≯零量i董;誊:.耋_¨i誊

TI—Ius.lom[C..j。er||||iii1.。}c。m‘叫’_季蒌薹

匹事置≯盛黉r:L———~li,!|;=“i。=

醚…毒.4㈦:

娅三雕f删卜囊_:il==ojji。jii?誊

一Fl…一’l_

曩蘸际CoMmall丑err_盏塑帅lD飘I___l曩墨_}鬻兰竺号霉;i;。漕Il___-__..-_-一

■■■■■■■■■■■_“_¨j^DoI二i_”。i,

r—_

苦蠢嗣.争lI_蛔ma~f_呵——。?篙:『jiiL=■1i

?闷UN:iT3lI....—-Jco帕黼rliP,蓍■:::::::卜j}爨i|::=型崎il|_.一二r_哥’-INss^llrl|雕瓦黼!l矸

峨露,ilrl一一i

.。瞄勰蠢‰。卜-Ll|i誊i:一L!竺竺!I

…=二二]0i

一_ICo网Ikoier。i;i;l。。==::.I¨。。三广百一

…’…r11

图2.2中央处理器NMS7210A内部结构框图

在NMS7210A内部采用ARM高级微控制器总线体系结构AMBA(Adv∞cedMicrocontrollerBusArchitecture)实现系统各个功能块之间的通信,利用这个体系结构存在着两种总线:高带宽多主设备总线——高级系统总线ASB(AdvancedS”t咖B11s)和有效连接低功耗从设备的高级外围设备总线APB(AdvancedPeriph盯alBus),ASB通过总线桥设备驱动APB。

ARMLinux在嵌入式手持设备上的移植及驱动开发

每个总线类型均允许多访问的并行进行,这些总线类型是:

MainASB:该总线有两个主设备:ARM720T和AMBA测试接口控制器。MainASB总线连接静态存储器接口(SMI)、片内静态存储器(SRAMO,从设备接口连接SDRAM控制器、SystemAPB和CommsASB。

Comm5ASB:该总线有三个主设备:从MainASB引出的ASB.to.ASB桥、支持电源管理特性的主设备和外匿设备DMA控制器。CommsASB连接片内启动ROM、GPIoDMA、存储器到存储器的DMA控制器、智能卡接口和CommsAPB。

SystemAPB:该总线连接所有不支持DMA访问的外围设备。当发生DMA操作时,该总线允许处理器访问这些外围设备。

CommsAPB:这种总线连接所有支持DMA访问的外围设备。它也连接控制LCD控制器和DMA控制器的寄存器接口。

Point-to—Pointbuses:框图中也显示出三个其它总线。(1)gAM和LCD控制器之间的总线允许LCD帧缓冲保留在片内静态存储器中;(2)外围设备DMA控制器和SDRAM控制器之间总线(DMA是主设备,SDRAM是从设备);(3)SDRAM控制器和LCD控制器之间的总线允许尽可能有效的高带宽DMA处理,不阻止CPU访问片内的其它外围设备。

2.1.1中央处理器NMS7210A的特性【”1

中央处理器NMS7210A具有如下特性:

1.基于删720T的内置8KBCache的低功耗、高性能、高代码密度的RISC处理器:2.精密的电源管理;

3.片内启动ROM和80KB静态存储器;

4.支持ROM、Flash存储器和Pc卡(使用NMCll21CompactFlash@/PCCard接口芯片)的静态存储器接口;

5.分离的SDRAM存储器控制器支持32MB存储容量:

6.8通道DMA控制器;

7.LCD显示控制器支持连接单色和彩色LCD:

相关主题
文本预览
相关文档 最新文档