snifer

基于Blackfin处理器的嵌入式操作系统μClinux

0
阅读(2783)

在过去的两年中,随着嵌入式设备的发展改进,Linux操作系统受到了越来越多的青睐,尤其是用于消费产品、电讯路由器和交换机、网络产品、工业和汽车等应用。

   嵌入式Linux的优点在于它的版权免费、源码开放、结构紧凑,这为日益增长的应用软件基础提供了坚实的后盾。Linux是一个全功能的操作系统,支持各种网络和文件处理协议,这对嵌入式系统来说是很重要的,因为它必须"在任何时间任何地点进行计算"。Linux采用模块化结构,通过去除嵌入式系统中不必要的实用程序、工具和其它系统服务,它
可以很方便地实现结构精简。在嵌入式设备市场中,采用Linux的公司可以更迅速地将产品推向市场,更快地增强产品的可靠性。对开发者来说,AD的Blackfin?处理器和uClinux的结合也许很有吸引力。Blackfin?处理器集合了DSP的计算能力和微控制器的功能,满足了数字音频、视频和通信方面的应用需求。
  我们在单块芯片上结合一流的DSP内核和传统微控制器的体系结构,避免了其它传统复合处理器系统的限制性、复杂性和高成本的问题。在已有的外部设备(SPI、带IrDa? 功能的UART、定时器、实时时钟(RTC)、看门狗(watchdog)和事件控制器(event controller))的基础上,所有Blackfin处理器家族提供双通道串行接口(SPORTs)---每个串行接口支持4个立体声I2S通道,数据速率达100 MBits/s。而且Blackfin处理器家族的最新成员(ADSP-BF531、ADSP-BF532、ADSP-BF533和ADSP-BF561) 提供并行外部接口(PPI),实现TFT平板显示器和视频转换器(CCIR-656, 27 MHz)的无缝连接,或者作为AD/DA转换器的并行接口,速率达65MSPS。

  其它封装也是可选的
  所有的Blackfin处理器都艺术地将最先进的信号处理引擎和清晰正交的类RISC微处理器指令集以及支持SIMD单指令多数据的多媒体功能复合成一套单指令集的结构,称之为微信号结构(MSA)。该内核是调整的双-MAC Harvard 结构,这种结构旨在实现音频和视频算法的非并行计算,以及实现操作系统中标准的程序流和常用的仲裁操作。
  Blackfin 的ADSP-BF531/BF532/BF533处理器有两个大的片内存储器块,提供通往内核的高速通道。这些内存块可以适应处理器内核的最高速度。它们位于内核的旁边,称为L1存储器,可以配置为数据或指令静态处理器(SRAM)或高速缓冲存储器。当配置为高速缓存时,处理外部SDRAM的代码的速度非常接近内部存储器直接处理的速度。这个特征特别适用于uClinux内核的运行,因为它没办法被全部装入内部存储器。而且,当使用c语言编程时,可以通过使用高速缓存来最大优化外部存储器到内核之间的存取。
  Blackfin处理器采用低电压,低功耗的设计,具备动态电源管理功能。完全满足目前的移动和电池供电需求,其它的处理器都无法做到这一点。Blackfin处理器配有多重的、高度灵活和独立的直接存取控制器(DMA),用来支持自动数据传输,并使处理器内核受到的间接影响达到最小。
  DMA 的传输操作可以发生在ADSP-BF531/BF532/BF533处理器的内部存储器到与有DMA能力的外部设备之间。而且,DMA传输也能够在DMA外部设备和连接到外部存储器接口的外部设备(包括SDRAM控制器和异步存储控制器)之间进行。

  Linux和uClinux的区别?
  由于Linux和UNIX相似,是多用户、多任务的操作系统,内核必须采取特殊的防范措施,以保证同一系统内来自不同用户的上千个操作正确安全地运行。UNIX的安全模型(即Linux之前的设计)能够保护每个用户操作的自身环境和地址空间。每个用户操作都受到保护,防止被其它用户唤醒,而且,虚拟内存(VM)系统对现代CPU还有另外的要求,比如在个人处理内存中实现动态内存分配和随机内存区域规划。有一些设备,如Blackfin 处理器,没有提供全功能的MMU内存管理单元,因为开发者的应用程序并不使用操作系统,通常也不需要MMU,而且,Blackfin的弱MMU的处理器往往具有更高的效率,其价格也明显低于其它产品。
  为使Linux与这些设备相适应,必须进行一些改动:
  1. 没有实际的存储器保护(一个错误的环节可以让整个系统停机)
  2. 没有交叉(fork)系统调用
  3. 只有简单的内存分配
  4. 其它一些较小的区别
  存储器保护对大多数嵌入式系统来说不是很大的问题。Linux是一个很稳定的平台,尤其是在嵌入式系统中,软件崩溃的情况很少发生。
  第二点的问题要大一些。在为UNIX和Linux编写的软件中,开发者常常使用fork系统调用来实现并行处理,fork调用可以准确拷贝原始程序并同时予以执行。为了提高效率,它使用MMU将父程序映射到子程序,并只拷贝写入子程序的内存区。因此uClinux不能提供fork系统调用。它提供vfork,一种特殊版本的fork,在vfork程序中当子程序执行时父程序即会终止。 因此,使用fork系统的软件在使用uClinux支持的vfork或线程时必须重写,因为他们使用相同的内存空间,包括堆栈。
  就第三点来说
,一般情况下支持uClinux的malloc系统不会有问题,但是,有些时候必须进行小的调整。大部分适用于UNIX和uClinux的软件(可在 http://freshmeat.net上找到此类软件)能够直接在uClinux上编译,其它的则可使用微小的移植或调整(tweaking)。 只有很少的应用软件不能在uClinux上运行,其中大部分不能作为嵌入式应用软件。
  在uClinux上开发
  在选择开发硬件时,开发者不应只考虑价格和可用性方面,同时也应考虑源代码驱动和文档的易获取性。 一个uClinux Blackfin处理器开发环境包括GNU编译器、(gcc交叉编译器 cross Compiler) 和 binutils (链接器linker、汇编器assembler等)。一些GNU工具诸如awk、sed、make、bash . 还有plus tcl/tk是必须的,尽管他们通常在桌面linux的安装套件中。 安装好uClinux安装包的桌面环境和解压后,开发工作就可以进行了。
  第一步,开发者利用图形配置软件,为目标硬件选择合适的板极支持包。开发者要利用自己的硬件,以便在EZ-KIT Lite?评估板 或STAMP硬件板上进行开发(访问 www.blackfin.uclinux.org获取原理图和产品文件)。然后他们可以开始编写驱动程序,通过拷贝已有的BSP并调整一些参数来制作BSP。
  大多数的开发工作包括选择合适的驱动程序,去除项目不需要的内核特征,然后选择特征库和用户程序空间。
  uClinux的安装套件中提供广泛的实用程序和电脑程序供选择。他们是根据大小和效率的要求特别设计的,例如busybox( www.busybox.net),一种多重调用二进位,该程序包括一系列小程序,用正确的名字调用它们时就能发挥相应的作用。例如:如果busybox链接到/s(DOS中的目录命令)并包含/s代码,那么它的作用就和/s一样。这样做的优点是busybox节省了唯一二进位的管理费用,并且那些小的模块可以共享相同的代码。
  在所有的选项均选取并且正确编译后,可以在VisualDSP++?.的帮助下,将Linux内核和ramdisc图像调到目标硬件中。操作成功后就可进行下一步开发了。
  下一步是使用串口或网络激活的bootloader取代JTAG界面来调入。
  例如,U-boot ( http://blackfin.uclinux.org/projects/uboot/)提供一系列的特征,可以用于嵌入式闪存(flash on-board )存储器设备。对于那些不能承担Analog 在线模拟设备的用户,可以选择低价的JTAG硬件和软件操作 ( http://blackfin.uclinux.org/projects/jtagtools/)。这可以用来在程序开始时将bootloader装入到目标存储设备之中。但是要注意到该工作环境不能提供VisualDSP++ 的调试和模拟功能。一旦该内核投入运行,可使用GDB来调试用户应用程序。
  下一步是为目标硬件开发特殊应用软件或附加软件端口。
  一些开发可使用shell脚本或其他语言如Perl 或 Python来完成。当必须使用c语言编程时,linux带有特别的协议和设备驱动支持,能提供强有力的开发环境。
  从图2可以看出AC'97音频CODEC和Blackfin 处理器的接线是相当容易的,它不需要任何附加的硬件设备。
  下面是从codec中读取数据的一个简单的程序(假设AC'97的驱动已经编译到内核中)。
  为什么在嵌入式硬件上使用Linux?
  尽管Linux最初并不是为嵌入式系统而设计,但是却在很多嵌入式设备中得到应用。自从2.0.x版本内核发布后,Linux版嵌入式处理器得到商业支持以来,带操作系统的嵌入式设备出现了爆炸式的增长。几乎每天都会有使用Linux作为操作系统的新设备或器件出现。大部分情况下终端用户是不知道的。 今天大部分宽带路由器,防火墙,终端读取设备,甚至DVD播放器均使用Linux(要获取更多信息,请参考 http://www.linuxdevices.org)。


  Linux和uClinux提供一系列驱动程序,支持所有的硬件和协议,加上Linux是不收版权费的,所以开发者使用Linux进行开发的原因就很清楚了。
  为什么在DSP上使用Linux
  过去,DSP被用在在很多应用程序中,包括声卡、调制解调器、电讯设备、医疗设备、军事设备和其他的纯信号处理设备。那些DSP设备一般是为那些应用软件专门设计的,并且因为成本和规模的限制,只具备基本的功能。当DSP变得更加强大和灵活时,就能够为军事,医疗,通讯等领域的用户提供更高级的服务。但是它们仍然缺乏运行高级操作系统的能力。传统的DSP功能强大、灵活,但是价格很高。他们经常用在特别的信号处理硬件上,这里不需要像Linux这样的在DSP上运行的操作系统。因为在那些系统中,DSP从附近的中央处理单元获取数据,只需要将基本的系统软件写入DSP即可。
  随着多媒体的日益集中和多媒体及通讯设备的增长,新型的DSP有着巨大的市场。目前在市场中广泛使用的常规处理器和用传统DSP作为辅助处理器。这种情况下,操作系统在主处理器上运行,而信号在DSP上处理。这种类型的双处理器不是很理想,因为其在费用、功耗、和大小上均不是很有效。
   uClinux的实时性
  由于最初是为服务器和桌面用户而设计,它没有像其他同等规模和复杂性的操作系统一样严格的实时能力。然而Linux特别是uClinux具有"软实时"能力,这意味着尽管Linux或uClinux不能保证一些中断或调度程序时间,他们同样具有很好的性能特点。如果需要"硬实时"系统来保证调度程序和中断latency时间,可通过下面方法来实现:
  使用另外的操作系统,有很多满足要求的RTOS系统可供选择((VisualDSP++ kernel、 Nucleus PLUS、ThreadX、uITRON)。
  通过实时内核RT-Linux ( http://www.rtlinux.org) 或 RTAI ( http://www.rtai.org).来提供实时能力。两种内核均使用小的实时内核,其作为具有低优先级的实时任务运行Linux。那些需要运行在实时内核上的程序则由特别的编码实现。其他的任务和服务在Linux内核上运行,并可使用Linux提供的一切功能。这种方法可保证确定中断等待时间,同时保留Linux的灵活性。
  改变Linux的内核可改善硬实时中断的等待时间,Bernhard Kuhn开发了一个Linux内核的补丁,可以在( http://linuxdevices.com/articles/AT6105045931.html)上获取。将来有可能加到uClinux Blackfin的目录结构上。
  在很多情况下,硬实时不是必要的,特别是对于多媒体应用程序来说,其时间约束由用户在识别音频或视频中的微小错误的能力来规定。这些可被检测的时间约束要在小达几十毫秒的范围内监测到--这对于像Blackfin处理器这样的高端商业芯片来说不是问题。严格的时间需求可以通过微小调整(tweaking)和调度程序的简单变化来获得。在2.6.x内核中,新的稳定内核已经改进了新的O(1)调度程序和内核抢占权。
  表2和3列出了流行的多媒体通信设备在未使用操作系统的Blackfin处理器上的运行时间。
  很多情况下,有足够的剩余处理能力来保证调度程序有足够的时间来处理通常运行在此类设备上的数字信号程序。 因此,在web servers、snmp、ppp 或pppoe、firewall上使用Perl、Python、和PHP等语言程序是没有问题的,运行程序的同时进行音频和视频解码。
  所以,没有必要采用硬实时操作系统,它没有Linux这样功能强大的操作系统所提供的高级特性。

  Blackfin处理器的uClinux资源
  所有在Blackfin处理器上创建uClinux内核所需的资源和工具(compiler、binutils)都可以从 http://www.blackfin.uclinux.org上获得。为了使用binary rpm,你需要带有Linux安装套件(如Red Hat 或 SuSE)的计算机。
  不能在windows环境下安装Linux的计算机可调整如下:
  购买能够运行Linux的计算机,该计算机能够为公司的整个开发工作提供Linux服务。带有xserver的windows计算机和samba的Linux计算机能够无缝地集成到现有的windows开发工具上。Samba是开放的源代码,所有的Linux安装包里都有提供。免费的xserver可以从cygwin环境里获得( http://www.cygwin.com)。
  在windows机器上使用UNIX:有很多程序允许在windows(2000, XP)环境上使用整个Linux安装包。这些程序在windows操作系统上模拟一个PC,不用调整客户端操作系统就可以执行。例如VMWare 和 Virtual PC。
  使用windows端口开发工具。
  可从 http://www.blackfin.uClinux.org上下载最新的out-of-the-box解决方案。该端口利用cygwin环境并采用完全的Blackfin uClinux安装套件,包括所有的用户空间应用程序和图形化window形式的安装方式。
  系统要求PC配置至少为Windows 2000(NT也许可使用,但是没有经过测试)。采用Uclinux安装包的驱动器应该使用NTFS(FAT32也可使用,不过有一些速度限制)。
  前景展望与总结
  Blickfin处理器有很高的性价比(800 MMAC @ 400 MHz 批发价不超过 $5/片)。有高级的电源管理功能和小型BGA封装。这意味着可以使用低功耗和高空间效率来实施大的项目。
Blackfin的高级DSP和多媒体性能不仅适用于音频、视频应用程序,同样可以用于工厂、汽车、通讯领域的各种设备。结合了uClinux的Blackfin处理器的另外一个优点是适用于广泛的应用程序、驱动程序、协议,通常是充当开放资源和免费软件。在大多数情况下,仅仅只有一些编辑或小的调整(tweaking)需要加载运行。将之与 Perl、Python、和PHP等宝贵的开发工具相集成,开发者就有机会在很短的时间内开发最多性能的应用程序,并留有足够的剩余处理能力,为将来的改进作准备,满足新的性能需求。
  最新的2.6.6版内核即将发布,它采用了新的gcc 3.3.3工具链。Blackfin补丁已经写入uClinux的内核目录结构,并且可以在ADSP-BF531/BF532/BF533 /ADSP-BF535系列Blackfin 处理器上使用。由于Blackfin是一个新结构的品牌,许多其它的单双内核系列都将采用该结构( www.analog.com/processors/blackfin)。
  今年,Blackfin处理器家族将会增添一名带有以太网MAC的新成员。一些人已经开始把uClinux移植到新的双内核处理器ADSP-BF561上。这种做法意在让uClinux在一个内核上运行,同时在另外一个内核上进行高性能的实时视频编码或解码工作。
Baidu
map