基于ADSP—BF533的μClinux嵌入式系统移植与开发
Blackfin处理器是基于由美国模拟器件公司(ADI)和Intel公司联合开发的微信号架构(MSA)的首款第4代DSP产品,它是ADI公司16 位产品的一个大系列。这一新产品是专为通信和互联网应用而设计的通用DSP芯片,适合处理广泛用于互联网中的大量图像、声音、文本和数据流,也可应用于汽车电子可视系统、宽带无线系统、消费类多媒体电子、数字摄像机、多通道VoIP、安全和监督、机顶盒和视频电话会议等方面。本文所用到的ADSP一 BF533是Blackfin系列处理器的典型代表。
l μClinux简介
μClinux从Linux 2.0/2.4内核派生而来,沿袭主流Linux的绝大部分特性。它是专门针对没有MMU的CPU,并且为嵌入式系统做了许多小型化的工作。适用于没有虚拟内存或内存管理单元(MMU)的处理器。由于μClinux在标准的Linux基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式 Linux。虽然它的体积很小,但μClinux仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的API等。
μClinux的主要特点如下:
(1)内存管理
这部分是μClinux与传统Linux区别最大的地方。对于μClinux来说,其设计针对没有MMU的处理器,即μC1inux不能使用处理器的虚拟内存管理技术,μClinux仍然采用存储器的分页管理。系统在启动时把实际存储器进行分页,在加载应用程序时程序分页加载,但是由于没有MMU管理,因此实际上μClinux采用实存储器管理策略。这一点影响了系统工作的很多方面。
(2)μC1inux的内核加载方式
μClinux的内核有2种可选的运行方式:可以在FLASH上直接运行,也可以加载到内存中运行。由于RAM的存取速率要比FLASH高,因此后者可以减少内存需要,运行速度也更快。
(3)μClinux的文件系统
μClinux系统采用rotors文件系统。这种文件系统相对于一般的ext2文件系统要求更少的空间。这是由于内核支持romfs文件系统比支持 ext2文件系统需要更少的代码,而且romfs文件系统相对简单建立文件系统超级块(superblock)需要的存储空间更少。
(4)μClinux的应用程序库
μClinux小型化的另一个做法是重写应用程序库。相对于越来越大且越来越全的库glibc μClibc对libc做了精简。
(5)可执行文件格式
μClinux系统使用flat可执行文件格式。另外,μClinux还提供通用的Linux APl支持完整的TCP/IP协议堆栈和大量其他的网络协议,支持包括NFSext2ROMfs等多种文件系统。
2 建立μClinux开发环境
嵌入式系统的开发与一般的应用开发最大的差别在于,前者需要建立特殊的硬件环境,而后者一般基于特定的操作系统或分布式平台。后者的平台已经对硬件或网络媒质做了抽象,从而不需要由系统开发者来完成这些工作。而在嵌入式系统开发中,这也由开发者完成。
嵌入式系统开发环境一般分成主机端(HOST)和目标板(TARGET)两个部分。主机端是开发平台,用于运行开发过程中的各种工具(如Linux操作系统和ADI提供的集成开发环境Visual DSP++等);目标板是运行和测试平台,是嵌入式系统的最终驻留环境。在主机端和目标板之间需要通过某种方式进行通信,如使用。RS 232串口或网口。通信的目的在于发送控制指令和传输数据,同时获得反馈信息。图1是系统移植工作的硬件环境。
目标板的硬件平台如图1所示:
主机端的PC使用COM1和BF533的UART相连接,通过串口完成对目标板的必要控制功能。本文设计的ADSP-BF533目标板上配备有1块SMSC LAN91C111以太网卡芯片和主机端建立原始(raw)IP连接,使用链路层地址完成大批量数据的传送。
在硬件环境建立之后,就需要创建软件开发环境。软件环境主要是指Blackfin体系结构的交叉编译环境。建立交叉编译环境首先要有交叉开发工具。交叉编译工具是指一组运行在某一种处理器上,却可以编译出另一种处理器卜执行的指令的工具。它由一套用于编译、汇编和链接内核及应用程序的组件组成,通过编译可以使μClinux内核和应用程序在目标设备上运行。
编译μClinux一般使用GNU开发套件作为交叉编译器工具链,它包括一系列的开发和调试工具。在官方网站 http://blackfin.μClinux.org上提供了Blackfin系列处理器内核的交叉编译工具。下载后按照说明解压到Linux系统的相应文件夹里,并设置系统环境变量,使这些交叉编译工具所在的目录为全局环境变量。至此就建立好了μClinux的软件开发环境。
3 利用U-Boot引导内核
U-Boot(Universal Boot Loader)是当前比较流行的遵循GPL条件的开放源码项目。也是是嵌入式Linux系统常用的Boot Loader之一。其完成的功能是初始化硬件设备、改变处理器运行模式、重组中断向量和建立内存空间映射图,从而将系统的软硬件带到一个合适的状态或者用户定制的特定状态,以便为最终加载操作系统内核准备好正确的环境。
U-Boot具有源码公开的特点,开发人员可根据自身需要进行裁减;支持多种处理器和嵌入式操作系统内核;具有多种设备驱动源码:支持种引导方式;具有功能强大且成熟、稳定等诸多优点,故本文采用U-Boot引导μClinux内核。U-Boot严重依赖于底层硬件,不同的CPU或嵌入式板极设备需要不同的U-Boot,不过因为本文的重点是μClinux的移植,所以这里不再详述U-Boot的具体实现过程。
当系统上电后,U-Boot从地址OxO开始执行,将存储器映射重新配置,如图2所示,并会执行μClinux的固化内核。
U一Boot可以使用ADI的仿真软件Visual DSP++通过仿真器或JTAG口下载到目标板上。
- 基于S3C44B0X+μcLinux的嵌入式以太网设计(07-08)
- μClinux下SDRAM数据交换区的生成和使用(06-04)
- 基于μCLinux的USB芯片FT245BL驱动程序实现(11-27)
- 嵌入式操作系统任务切换方法对比分析(07-02)
- ARM-μCLinux嵌入式系统启动引导的实现(07-26)
- 基于ARM7系列芯片嵌入式平台上实现的设计方案(05-03)