首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年12月26日星期四
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
uCLinux在了Blackfin处理器上的应用

uCLinux on the Blackfin PROCESSOR

Analog Devices公司


作为信号处理芯片的主要供应商之一,Analog Devices公司(ADI)一直致力发展高性价比的产品。Blackfin系列处理器是ADI公司的最新的基于微信号体系结构的嵌入式处理器,具有高性能和低功耗等特点。利用内核中的两个MAC运算单元,750MHz的BF533处理器每秒可完成1500M的MAC,而双核的BF561处理器每秒可完成3000M的MAC。同时这两款处理器集成了大量的外围设备和处理器接口,适用于各种音频、视频、通信领域,典型应用为汽车图像系统、宽带无线系统、多媒体消费电子产品、数字视频录像机、多声道VoIP、可视VoIP、安防和监控、机顶盒、视频会议等。

图1 BF533系统框图(略)


Blackfin系列处理器介绍

BF533系统框图

该处理器的核心为16位定点微处理内核、可以实现高达750MHz的频率工作。片内存有148K,其中指令存储器为80K字节、数据存储器为68K字节,系统包含动态电源管理PLL、看门狗、JTAG、实时时钟等。另外处理器提供了丰富的外围设备,有两个SPORT接口、1个SPI接口、1个UART接口、3个PWM时钟、16个GPIO、1个Video I/O PPI接口。

BF561系统框图(图2)

图2 BF561系统框图(略)

同BF533不同的是:这款处理器使用两个高达750MHz的Blackfin内核。两内核共享告速的L2存储器,大大提高了处理性能。EBIU都改为32位,使得它能够达到更高的性能,同时增加了一个PPI接口,可以同时处理视频的输出和输入。

显著特征

Blackfin处理器的显著特征之一,就是采用了ADI和Intel联合开发的微信号结构(MSA),这种结构采用了一个综合的信号处理和控制指令级。这样处理器就不仅是带有增强指令集的DSP,也不仅是带有两个算术逻辑单元的MCU,而是为同时运行控制指令和算法而进行优化的处理器结构。从而集DSP和MCU功能于一身,消除了传统的多个不同处理器之间相联系的复杂性。


选择uCLinux的原因及其介绍

选择uCLinux的原因

现在Blackfin处理器可以支持的操作系统有:Embedded Linux、GHS Integrity、VDK from ADI 、Unicoi Fusion RTOS 、Nucleus PLUS 、ThreadX、CMX、Live Devices 、uITRON (API) 等。

在所有主流的嵌入式系统中,嵌入式Linux无疑占据非常重要的地位。其原因主要有:1、超强的网络功能:在当今的网络互联的时代尤显重要,Linux从来就拥有极强的网络功能,嵌入式Linux也毫不逊色;2、开放的资源使之可任意裁减,适应小巧的嵌入式系统,其裁剪后一般内核小于512K字节,内核加根文件系统及基本工具小于900K字节;3、完全免费;4、拥有全球数以千万计的共同爱好者及开发者,拥有极其丰富的资源;5、通用的Linux API,使得开发工作可以专注于很小一部分代码的编写。

uCLinux介绍

uCLinux是一种在嵌入式领域广泛应用的Linux系统,专门针对微控制系统设计。uCLinux面向没有MMU的系统,即uCLinux不能使用处理器的虚拟内存管理技术,而采用是实存储器管理策略,uCLinux对内存的访问是直接的,所有程序中访问的都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享运行空间。每个进程在执行前,系统必须为其开辟连续的地址空间,然后全部载入主存储器的连续空间。Linux系统中通常可执行文件的格式采用cof或elf,在uCLinux上只支持 flat可执行文件格式。gcc的编译程序不能直接形成这个格式,但是可以形成cof或elf格式的可执行文件,这两种格式的文件需要通过cof2flt或elf2flt工具进行格式转换,形成flat文件。uCLinux重写了应用程序库,相对于越来越大、越来越全的glib库,uClibc对库做了精简, uCLinux对用户程序采用静态链接的形式,这种做法会使应用程序变大,但基于内存管理的问题,也不得不这样做,同时这种做法更接近嵌入式系统的做法。uCLinux被移植到几乎所有平台,比如Motorola DragonBall及其它 68K系列、Motorola ColdFire、ARM7TDMI及 MC68EN302、 ETRAX、Intel i960 、PRISMA、Atari68K 、 Blackfin等等。它本身没有实时性,靠RT补丁解决。


基于Blackfin的开发平台

HHBF533开发平台

由华恒科技公司推出的HHBF533开发平台,是一款基于BF533处理器的开发套件,该套件的特色是采用了核心板与底板分离的设计,方便用户做底板的定制,核心板的尺寸仅相当于名片大小,开发上可以充分发挥想象力,设计出小体积、高性能的嵌入式产品。

图3 HHBF533开发平台的配置(略)

HHBF561开发平台

HHBF561开发平台同HHBF531开发平台基本类似,只是处理器采用双内核设计,并设计为CORE A运行uCLinux操作系统,CORE B进行视频编解码等算法工作。

华恒同时提供了基于HHBF533平台上的MPEG4编解码算法、uClinx的视频监控、IP机顶盒的Demo。


uCLinux开发环境介绍

大多数的Linux开发都是以"native"开发的方式进行的,native方式是本机开发、本机调试、本机运行的方式。这种方式通常不适合嵌入式系统的开发,因为对于嵌入式系统来说,不具备足够的硬件配置在开发板上运行测试和调试工具。通常嵌入式系统的软件开发采用交叉编译的模式。交叉编译环境建立在宿主机上,对应的开发板叫目标板,开发时使用宿主机上的编译程序,汇编和编译形成可执行的二进制代码,然后把可执行程序下载到目标板上运行。宿主机和目标板上的处理器一般都不相同,这里均假定宿主机上运行的runtime Linux9.0以上的X86平台,而目标板上为HHBF561开发平台。

目标板上的终端通常被重定向到串口,在宿主机上输出。

目标板上的程序都是烧写在FLASH当中的,这包括在U-BOOT上边的引导代码、Linux内核、文件系统及其他数据。

在目标板上FLASH的起始地址和相应区域,分别烧写上引导代码(U-boot)和含根文件系统的Linux内核的二进制文件。

由于目标板的启动模式被设置成从FLASH启动,系统上电时直接执行FLASH最前端的U-BOOT引导代码,所以U-BOOT的引导代码一定要烧写到开发起始位置,系统启动时U-BOOT做好SDRAM的必要的系统初始化工作,设置堆栈后,就会将后面的代码复制到SDRAM中继续执行,然后跳转过去执行;

启动Linux内核之前仍然先将Linux代码复制到SDRAM中,然后跳转到内核代码处执行,如图4所示。

图4 (略)

HHBF561开发平台的应用

HHBF561开发板是一款适合客户进行二次开发的平台,客户还需要在上面编写、移植驱动程序和应用程序,以适合自己的需求。

由于Linux提供了良好的框架,大大简化了应用的开发。Linux下对外设的访问通过设备驱动程序完成(uCLinux下可以在应用程序里访问外设空间,但不能响应中断)。

HHBF561开发平台的驱动移植

设备驱动程序是内核的一部分,它完成以下的功能:

对设备初始化和释放;

把数据从内核传送到硬件核从硬件读取数据;

读取应用程序传送给设备文件的数据和回送应用程序请求的数据;

检测和处理设备出现的错误;

设备驱动程序的编写应遵循一定的原则:

不带策略,即只处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用;

支持同步和异步操作;

驱动程序能被多次打开,能够充分利用硬件的特性,以及不具备简化任务的功能或与策 略提供相关的软件操作层。

视频输出实例

BF561有两个并行外部接口-PPI接口,专门用于视频数据的传输,并支持ITU66格式。PPI接口可以和AD/DA转换器、视频编/解码器以及其它通用外设直接相连。HHBF561上将PPI0接到D/A芯片ADV7171,然后ADV7171的输出通过S-video和CVBS等接口将视频信号输到电视。

由于视频设备是只能顺序访问的通道,因此将驱动程序设计成字符型。

图(略)

linux的设备访问都可以看成是文件操作。因此驱动程序的主要部分是实现FILE结构中的函数open、write、ioctl等。

在open函数中,将硬件使能。包括:PPI、中断、DMA等;write函数则将用户设备中的数据刷新到RAM缓冲器中,DMA将自动把数据送到ADV7171。除了读写设备之外,设备驱动程序还需要提供各种各样的硬件控制能力。这些控制操作通过ioctl完成。另外在每次DMA同PPI接口进行传输完成之后会产生DMA中断,在中断处理函数中,可以将DMA原数据指针切换到新数据的入口。这样就完成了整个驱动程序的框架。

图5 网络驱动程序的体系结构(略)

以太网驱动实例

网络驱动程序负责发现网卡、监测网卡参数以及发送接收数据。
在Linux内核中存在着一张网络接口管理表dev_base,它是一条net_device的结构链表的表头,在系统初始化完成以后,系统检测到的网络设备将自动的保存在这张链表中。当要发送数据时,网络子系统将根据系统路由表选择相应的网络接口进行数据传输,而当接收到数据包时,通过驱动程序登记的中断服务程序进行数据的接收处理。
Linux网络驱动程序的体系结构(如图5)可以划分为四层。在设计网络驱动程序时,最主要的工作就是完成设备驱动功能层,以满足自己所需要的功能。
BF561没有集成网络控制芯片,因此这里选用以太网控制芯片DM9000,挂接在处理器的EBIU上。


HHBF561开发平 台的应用案例

网络监控

BF561的CORE A运行LINUX操作系统并执行图像采集和网络传输任务,CORE B运行视频编码算法。模拟摄像头通过一个A/D芯片接到BF561的PPI接口上。

CORE A运行一个进程,当采集到一帧数据后将其放到内存中,并通知CORE B取走该数据并进行编码,编好的数据放回内存中的另一处缓存中,并通知CORE A取走,CORE A通过网络将视频码流送到远端以实行监控(图6)。

可视VoIP

这是BF561实现一个可视VoIP的案例,见图7。

图7 (略)

问:现在的基于Blackfin处理器的uClinux操作系统是否支持pthread,framebuffer,是否支持video4linux 标准的video in 和video out的设备。

答:都支持,而且我们已经有了成功应用

问:我们用Visual DSP++开发的视频CODEC的库文 件,是否可以在Linux下的gcc编译器直接使用?

答:除非你的库文件没有用到 Visual DSP++ 的非标 准库函数,否则不可以用gcc 编译使用。

问:Blackfin处理器是否可以通过外部设备提高其运 行速度?

答:Blackfin作为DSP处理器,其运行速度已经非常 高了。一般速度的瓶颈都是在硬件接口或外围 设备上。

问:用uClinux操作系统,Blackfin处理器能否处理较 高速率的实时数据?比如50-100MB/S,毕竟操作 统是多任务的。还有,uClinux操作系统用户容易 移植裁减吗 ?

答:50-100 MB/s 的实时数据对于我们的平台来说 是可以胜任的,虽然 OS 是多任务的,但是我们可 以通过 DMA 传输、优先中断等手段来提高实时 性。可裁减和可定制性是 uClinux 的特性。

问:如果我的系统放在16位的FLASH(速度一般在 70ns)中运行, 这样比我引导到Blackfin内部执行 要慢多少倍?

答:这样要根据您设置的主频和外设频率决定。从 理论上讲,一般要相差十几倍。

问:请问现在使用Blackfin运行uClinux的效率如何?
因为DSP与ARM等芯片相比,主要的优势在于 其强大的计算能力和计算速度,但是象uClinux这 样的操作系统所执行的指令大多是一般的逻辑 指令,不知此时Blackfin是否还能保持同样大的 速度优势呢?

答:从C 的编译器效率上看,Blackfin与ARM相差不 多,对于一般的逻辑指令,Blackfin可以很好的适 合。因为Blackfin有更高的MIPS,Blackfin 具有更 大的速度优势。
从目前的数据上看,uCLinux大约只占Blackfin的 50MIPS。

问:uClinux的内核加载方式如何进行?闪存加载和内 存加载那种较好?

答:我们的处理方式是将内核复制到SDRAM中然后 加载,这样的好处是运行会快一些。

问:用uClinux的编译器编译C语言程序时出现编译 错误(绝对不是程序代码问题),如果把C源文 件中的代码注释掉一部分后,再编译,该错误就 没有了,恢复被注释的部分再编译,错误也没有 再现,这是什么原因?如何避免?

答:一般来说,如果代码没有问题的话,编译器是不 会抱怨的。uClinux 使用的是 GNU 的 C 编译器, 它支持 100% 的标准 C (ANSI C)。建议在编译的 时候把警告打到最高,这样更能发现编码中的问题。

问:BF533没有I2C控制器,用PF口来模拟I2C是否 会影响Linux内核的实时性?

答:不会。一般来说I2C不用于实时信号处理。

问:uCLinux在实现多个进程时如何实现数据保护?

答:传统的 UNIX 进程间互斥和同步的机制,uClinux 都支持,它是符合 POSIX 标准的。比如:互斥量、 信号量,此外 uClinux 还有多种锁机制可以满足 各种情况的数据保护。

问:BSP部分如何配置? 又没有硬件抽象层概念? 如何开发基于板子和uCLinux的设备驱动?

答:关于bsp的配置我们都加到config中去了,您只 要使用make menuconfig选一下就行了;对于设 备驱动的开发,linux是有标准的接口的,而且可 以从网上找到大量的源代码,您只要用一个同 您所需要的相类似的驱动程序进行硬件相关部 分的改写就可以了。

问:在使用BF533板时,用BF533的PPI口输出显示 图像,采用uClinux和网络功能后,显示闪烁,请问 如何解决?

答:你的图像是不是放在片外?当总线阻塞时,PPI 不能正常取得数据,就会导致画面闪烁。一般要 使用两组dma来实现图象得稳定输出;MdMA把 数据从片外拷贝到片内line buffer,PPI则使用dma 交替输出片内line buffer 数据。

问:在uClinux下运行的C语言程序中printf()的语句 的多少和位置会影响程序运行的结果,如有时一 定要加入printf语句,程序才能正确执行,这是什 么原因?

答:printf()速度较慢,可以延迟后续指令得执行时间。 尤其是访问速度较慢得外设时,可能需要等待, 这时加入printf()就充当了这个功能。

问:请问运行uClinux的最小开销?

答:uClinux 的运行开销取决于应用。在我们的平台 上可以把内核裁减到 512 K, 加上文件系统小于 900 K。

问:动态电源管理的实现是用软件还是用硬件?效果 如何?

答:动态电源管理完全是由软件实时控制的,您可以 在运行时随时改变内核电源,以减低功耗,效果 非常明显。具体指标您可以访问www.analog.com, 下载相关的硬件手册。

问:在网络应用的时候,是否一定需要一个类似EPROM 一样的存储器来保存MAC地址?MAC地址是否 是定义在网络接口芯片中的,是否是全球唯一, 软件如何得到该地址?

答:不需要 EPROM 保存 MAC 地址。MAC 地址有全 球唯一的范围,也有局部应用的范围。软件上访 问物理层协议就可以得到网络接口的 MAC 地址, 比如在 uClinux 中用 ifconfig 就可以得到。

问:请问uClinux核心的栈5也就是sp或usp是在内 部SRAM还是外部SDRAM中。如果在外部SDRAM 中,对执行速度的影响是否很大。

答:堆栈是放在外部SDRAM中的,因为使用了Cache, 对执行速度基本没有影响。

问:uCLinux如何实现BF561的双Core控制与消息传 递等问题呢。

答:bf561有两种方法实现双核同步:
1、 通过sicb_sysr向另外一个核提交中断;
2 、通过shared memory中得信号量实现同步。

2005GEC.1

         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com