序言
在过去的两年中,随着嵌入式设备的发展改进,linux操作系统受到了越来越多的青睐,尤其是用于消费产品、电讯路由器和交换机、网络产品、工业和汽车等应用。
最近,一些大的消费电子公司达成协作,建立消费者电子linux论坛(celf),以进一步开发家庭数字电子设备的linux平台。celf的发起者(matsushita electric、sony、hitachi、nec、royal philips electronics、samsung、sharp和toshiba)将重点放在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。
表1:blackfin处理器家族
其它封装也是可选的 所有的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的软件(可在上找到此类软件)能够直接在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硬件板上进行开发(访问获取原理图和产品文件)。然后他们可以开始编写驱动程序,通过拷贝已有的bsp并调整一些参数来制作bsp。
大多数的开发工作包括选择合适的驱动程序,去除项目不需要的内核特征,然后选择特征库和用户程序空间。
uclinux的安装套件中提供广泛的实用程序和电脑程序供选择。他们是根据大小和效率的要求特别设计的,例如busybox(),一种多重调用二进位,该程序包括一系列小程序,用正确的名字调用它们时就能发挥相应的作用。例如:如果busybox链接到/s(dos中的目录命令)并包含/s代码,那么它的作用就和/s一样。这样做的优点是busybox节省了唯一二进位的管理费用,并且那些小的模块可以共享相同的代码。
在所有的选项均选取并且正确编译后,可以在visualdsp++?.的帮助下,将linux内核和ramdisc图像调到目标硬件中。操作成功后就可进行下一步开发了。
下一步是使用串口或网络激活的bootloader取代jtag界面来调入。
例如,u-boot (/projects/uboot/)提供一系列的特征,可以用于嵌入式闪存(flash target="_blank" >analog 在线模拟设备的用户,可以选择低价的jtag硬件和软件操作 (/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(要获取更多信息,请参考 )。
图2:ad1885接线图
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、 target=_blank >xiangxueqin