在当前的数字信息技术和网络技术高速发展的PC(Pos+-PC)时代,嵌入式系统已经广泛的渗入到人们的生产,生活等各个方面中。随着国内外嵌入式产品的进一步开发和推广,嵌入式技术越来越和人们的生活紧密相结合。嵌入式系统技术涉及到硬件软件技术,已经成为目前最热门的技术之一。 1 ARM与ARM7TDMI处理器ARM即Advanced RISC Machines的缩写,由英国Advanced RISC Machines (ARM) Limited公司设计。ARM公司是设计公司,本身不生产芯片,只提供知识产权(IP)。ARM公司是32 bit嵌入式RISC微处理器领域的领先供应商,在世界范围内有超过100个合作伙伴——包括半导体工业的著名公司,从而出现了大量的开发工具和丰富的资源,它们共同保证了基于ARM处理器核的设计可以很快投入市场。
ARM处理器的出色性能使系统设计者可以得到完全满足其确切要求的解决方案。借助于来自第三方开发者广泛的支持,设计者可以使用丰富的标准开发工具和ARM优化的应用软件。
ARM32 bit体系结构目前被公认为是业界领先的32 bit嵌入式RISC微处理器结构。所有ARM处理器共享这一体系结构。这可确保当开发者转向更高性能的ARM处理器时,在软件开发上可获得最大的回报。
当前ARM体系结构的扩充包括:
① Thumb: 16 bit指令集,用以改善代码密度。
② DSP:用于DSP应用的算术运算指令集。
③ Jazeller:允许直接执行Java字节码的扩充。
ARM处理器本身是32 bit设计,但也配置Thumb16 bit指令集,以允许软件编码为更短的16 bit指令。与等价的32 bit代码相比,占用的存储器空间节省高达35%,然而保留了32 bit系统所有的优势(例如,访问一个全32 bit地址空间)。Thumb状态与正常的ARM状态之间的切换是零开销的。ARM的Jazelle技术提供了Java加速,可得到比基于软件的Java虚拟机(JVM)高得多的性能。与同等的非Java加速核相比,功耗降低80%。
根据内核的不同,ARM处理器分为ARM7、ARM9、ARM9E、ARM10、SecurCore。
ARM7系列为低功耗32 bit核,最适用于对价位和功耗敏感的消费类应用。ARM7具有:
① 嵌入式ICE-RT逻辑;
② 非常低的功耗;
③ 能提供0.9MIPS/MHZ的三级流水线和冯·诺依曼结构
ARMT系列包括:ARM7TDMI、ARM7TDMIS,ARM7EJ、ARM720T结构
ARM7TDMI是世界上广泛使用的32 bit嵌入式RISC处理器。它是目前用于低端的ARM处理器核,且应用范围很广。
ARM7TDMI各字原义如下
① ARM7: ARM6 32整型核的3V兼容版本
② T: 16 bit压缩指令集Thumb
③ D:在片调试(debug)支持下,允许处理器响应调试请求暂停。
④ M:增强型乘法器(multiplier),与以前处理器相比性能更高,产生全64 bit结果。
⑤ I:嵌入式ICE硬件提供片上断点和调试点支持。
2 硬件设计本项目测试板采用Samsung公司的S3C4510B芯片,再配合8 M SDRAM和2 M Flash以及外围接口芯片。
Samsung公司的S3C4510B 16/31 bit RISC处理器为网络设备提供了高性价比和高性能的微处理器解决方案。为了降低整个系统的成本,S3C4510B将外围设备和处理器内核集成在一块芯片上。S3C4510B提供以下外围设备:8 k bit内部cache/SRAM,2个通道UART,2个通用DMA,18个可编程I/O口,2个通道HDLC,1个通道MII接口Ethernet控制器,还有是DRAM/SDRAM控制器,ROM/SRAM控制器,I2C串行总线,中断控制器,PLL时钟发生器,2个可编程定时器。
S3C4510B采用ARM7TDMI核,208个脚QFP封装。最高时钟50 MHz,它的低功耗、强大的网络性能使其特别适用于网络设备领域。
3 ARM开发工具——ARM SDT硬件测试板开发完成以后,需要对硬件系统进行测试。本项目采用ARM公司的ARM Software Development Kit 2.5软件。它是ARM公司为方便用户在ARM芯片上进行应用软件开发而推出的一整套集成开发工具。
ARM SDT包括一套完整的应用软件工具:
① armcc:ARM C编译器,具有优化功能,兼容ANSI C。
② tcc:Thumb的C编译器,同样具有优化功能兼容ANSI C。
③ armasm::支持ARM和Thumb的汇编器
④ armLink:ARM链接器,链接1个和多个目标文件,最终生成ELF格式的可执行映像文件。
⑤ APM:Application Project Manager,ARM工程管理器,图形界面,负责管理源文件,进行编辑、编译、链接,并最终生成可执行映像文件。
⑥ ADW:Application Debugger Windows,ARM调试工具。
其中ADW提供一个C和汇编文件源文件的源代码级调试环境。在此环境下也可以执行汇编指令级调试,同时可以察看寄存器,存储器和栈等调试信息。
ARM SDT还提供一些实用程序,如fromelf、armprof、decaxf等。这些实用程序可以将ELF文件转换为不同的格式,执行程序分析,以及解析ARM可执行文件格式等。
ARM SDT提供指令集模拟器,可以方便用户在PC上完成简单的调试工作。但是由于指令集模拟器与真实的硬件环境相差很大,即使模拟器通过的程序,也有可能无法在真实的硬件环境下运行。用户最终必须在硬件平台上完成整个应用开发。
经过测试,硬件测试板满足嵌入式uClinux的各项硬件要求。由于ARM SDT不支持uClinux操作系统,在移植uCliuux时,将采用GNU交叉编译调试工具。
4 uClinux的嵌入uClinux是专为无存储器管理单元(MMU)的微控制器打造的嵌入式Linux操作系统。uClinux首先被移植到摩托罗拉的MC68328 DragonBall集成微处理器上。从那以后, uClinux越来越受到业界的青睐, 被移植到更多的无MMU芯片上。目前,uClinux已成功移植到ARM7TDMI微处理器上。由于uClinux主要是针对无MMU 微处理器开发的,大多数内核的二进制代码和源代码都被重写,但保留了Linux 操作系统的主要优点:稳定性、优异的网络能力以及优秀的文件系统支持。
uClinux的内存管理与传统Linux区别最大的地方在标准Linux是针对有MMU的处理器设计的。在这种处理器上,虚拟地址被送到MMU,把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟物理地址转换映射,支持不同任务之间的保护。对于uCLinux来说,其设计是针对没有MMU的处理器,即uCLinux不能使用处理器的虚拟内存管理技术。uCLinux仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页,在加载应用程序时程序分页加载。但是由于没有MMU管理,所以uCLinux实际上是采用实存储器管理策略的。这一点影响了系统工作的很多方面。uCLinux系统对于内存的访问是直接的,所有程序中访问的地址都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。
移植uClinux主要需要解决以下四个问题
① 交叉编译环境的建立
对于不同体系结构,GNU都提供了相应的开发软件包。这可以到网上查找,有些是源代码包,下载后要经过GCC的编译才能应用;有些是应用程序包,安装后即可使用。安装完了arm-elf-tool工具包以后,Linux中就有了基于arm体系结构的编译器、链接器、调试器以及一些实用程序,以后编译内核,制作文件系统都要依赖交叉编译系统。
② uCLinux的内核加载方式的问题
uCLinux的内核有两种可选的运行方式:可以在Flash上直接运行;也可以加载到内存中运行。后者可以减少内存需要。
Flash运行方式是把内核的可执行映像文件烧制到flash上,系统启动时从Flash的某个地址开始逐句执行。这种方法实际上是很多嵌入式系统采用的方法。
内核加载方式是把内核的压缩文件存放在Flash上,系统启动时读取压缩文件在内存里解压,然后开始执行,这种方式相对复杂一些,但是运行速度可能更快(RAM的存取速率要比Flash高)。同时这也是标准Linux系统采用的启动方式。这里需要编写一个Bootloader软件。Bootloader软件实现的功能包括开机寄存器的配置、内核与文件系统的加载、传递硬件与启动参数给内核。网上有许多Bootloader可以下载,但是都需要根据自己测试板硬件的信息进行改写。与PC机上的加载过程做对比,Bootloader的功能类似BIOS+Linux LILO。
③ uClinux内核的编译
网上有许多uClinux源代码,最著名的就是uClinux官方网站。从网上下载一个uClinux的源代码,一般是压缩格式的。将其解压,例如解压在/home目录下,这时就会产生一个/home/uClinuxdist目录,进入/home/uClinux-dist目录,然后依次键入:
makemenuconfig
makedep
make
最后在/home/uClinuxdist/image目录中产生Image.rom,Image.ram,Romfs.Img。它们分别是内核的映像、内核的调试文件、文件系统的映像文件。
在makemenuconfig时,程序会依次出现开发平台,内核配置,文件系统应用程序的配置界面,可以根据自己的需要进行配置。
④ uCLinux的根(root)文件系统及其加载
uCLinux系统采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。空间的节约来自于两个方面:首先内核支持romfs文件系统比支持ext2文件系统需要更少的代码;其次romfs文件系统相对简单,在建立文件系统超级块(superblock)需要更少的存储空间。Romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。同时uClinux内核也支持各种文件系统,例如,网络文件系统,在需要时可以进行mount。
解决了上述问题,uClinux可以成功的被移植到测试板中。基于Linux的应用程序较多且源代码开发,因此基于uClinux的产品可以进行快速开发。
uClinux的主要特色包括:通用的Linux API;uClinux kernel < 600 kB;文件系统 < 600 kB;完整的TCP/IP 协议堆栈;支持大量其它的网络协议;支持各种文件系统,包括 NFS、ext2、ROMfs、JFFS、MS-DOS以及FAT16/32。
5 小结
uClinux是Linux操作系统的一个分支,它保留了Linux稳定和优异的网络能力以及优秀的文件系统支持的特点,同时又克服了Linux必须依赖与MMU的不足,是一种优秀的嵌入式操作系统。同时ARM7TDMI又是一种高效、低功耗的RISC处理器。二者的结合将使基于ARM7TDMI和uClinux的嵌入式产品有更高的竞争力。
致谢:对同一项目组的李江,万晨研,袁爱军同学在此表示感谢。
参考文献[1]马忠梅、马广云、 徐英慧、 田泽编著。ARM嵌入式处理器结构与应用基础[M]。北京:北京航空航天大学出版社,2002
[2] Samsung Electronics。CPUS3C4510BREV1.pdf
[3] Samsung Electronics。CPUANS34510B.pdf
[4] ARM Limited。ARM Software Development Toolkit Version 250 Reference Guide
[5] ARM Limited。ARM Software Development Toolkit Version 250 User Guide
[6] 王云飞著。uClinux+Coldfire.2002-5-08。
[7]uClinux源代码README文件
[8]uClinux源代码Documents目录