Linux在Xilinx FPGA上的移植

2019-07-13 19:50发布

Linux在Xilinx FPGA上的移植

210 1 引言
嵌入式系统是以应用为中心、以计算机技术为基础, 软硬件可裁, 符合应用系统对功能、可靠性、体积、功耗等严格要求的专用系统。SOPC技术作为一门全新的综合性电子设计技术, 结合了片上系统SOC和PLD、FPGA各自的优点, 集成了CPU、DSP、存储器、外围I /O及可编程逻辑, 它涵盖了嵌入式系统设计技术的全部内容, 是目前嵌入式系统设计的中坚力量。随着SOPC技术的发展, FPGA规模的不断扩大, 将处理器嵌入到FPGA 中成为必然的发展趋势。Xilinx公司结合其Virtex- II pro等芯片在FPGA中嵌入了PowerPC处理器硬核。在FPGA中嵌入处理器一方面可以充分发挥FPGA 吞吐率大,资源丰富等优势, 另一方面结合处理器的特点, 在内嵌的处理器中编写C代码完成既定任务, 实现FPGA与DSP处理器的结合, 这也是今后发展的必然趋势。 对于嵌入式系统而言, 应用程序可以没有操作系统而直接在芯片上运行, 但随着应用复杂度的不断增加, 多任务需要合理的调度, 系统资源、系统函数以及专有函数接口需要得到充分的利用, 此时选配嵌入式操作系统开发平台便显得尤为重要。因为只有这样才能保证程序执行的实时性和可靠性, 并减少开发时间, 提高软件质量。而Linux作为一个免费的操作系统, 由于其具有开放源代码、内核稳定、功能强大、可裁剪和低成本的特性, 而倍受嵌入式开发者的青睐[ 3]。 本系统结合Xilinx公司推出的基于SOPC技术的嵌入式处理器PowerPC硬核, 在XUP Virtex2II Pro开发平台上, 将Linux操作系统嵌入到PowerPC405处理器中, 最后给出了一个成功运行的测试实例。 2 SOPC技术及PowerPC硬核介绍
所谓SOPC( System On Programmab le Chip)即可编程的片上系统, 在一片系统芯片上通过编程来实现一整套嵌入式系统的搭建。SOPC技术尽可能在单片FPGA上集成大规模的完整的电子系统, 包括处理器系统、外设控制器系统、存储器、DSP系统、通信系统和普通的数字电路逻辑等, 从而使得电子电路系统在功能、规模、可靠性、体积、功耗、性能指标、上市周期及其硬件升级等多方面达到综合上的最优化; SOPC设计技术是一门全新的综合性电子设计技术, 涉及面很广, 它将普通EDA 技术、计算机系统、嵌入式系统、工业自动化控制系统、DSP及无线电等融为一体, 涵盖了嵌入式系统设计技术的全部内容; 同时它结合了SOC 和PLD、FPGA 各自的优点, 集成了CPU、DSP、存储器、外围I/O及可编程逻辑, 用户可以利用SOPC平台自行设计各种高速高性能的DSP处理器或特定功能的CPU处理器, 从而使得电子系统设计进入了一个全新的模式[ 1]。 Xilinx公司结合其高端芯片Virtex- II Pro和Virtex 4 FPGA推出了全新的嵌入式开发系统, 利用先进的IP植入技术, 实现以硬核PowerPC405或软核Microblaze 32位处理器为核心的SOPC系统。本系统将L inux操作系统移植到内嵌于芯片Virtex2II
Pro的PowerPC405硬核中, 并完成了相应的测试, 其开发平台是ML300。 PowerPC405是一个32位、采用IBM. PowerPC体系结构的嵌入式处理器。它的运行频率高达400MH z; 具有5阶段流水线; 32* 32bit通用寄存器;增强的指令和数据片上存储器控制器, 直接与嵌入式块RAM接口; 支持JTAG调试和跟踪; 新的辅助处理器单元(APU)控制器, 使CPU管道直接与FPGA 架构接口; 同时支持用户定义的指令等等, 这些都使得移植Linux 到该目标板上成为可能。另外PowerPC405处理器采用IBM CoreConnect总线技术, 该总线结构由处理器局部总线( PLB)、片上外设总线(OPB)和设备控制寄存器总线(DCR)组成。PLB总线为片内的高速数据通道, 通常连接高速外设、DMA存储控制器等; OPB总线通常用于连接速率较低的片上外设, 如串口、键盘等; PLB总线和OPB总线通过总线桥接器相连。DCR 总线用于实现PowerPC的通用寄存器与逻辑设备控制寄存器的数据通信。 嵌入式系统设计涉及了硬件和软件的开发以及两者的综合设计。针对Linux的移植问题, 硬件部分采用的开发工具是Xilinx公司提供的功能强大、操作简单的工具集EDK911。EDK自带了许多工具和IP, 主要包括Xilinx平台工作室XPS、软件开发套件SDK和XMD, 可方便的规划、设计并生成整个片上系统的硬件和软件结构。软件部分主要指内核配置部分在L inux操作系统下完成, 最终的检测部分则在XMD下实现。 将Linux嵌入到PowerPC中的设计流程见图1。
3 搭建硬件平台及软件平台设置
311 硬件平台设置

针对实际的需要及现有的硬件条件, 利用EDK开发工具, 搭建具有下面特性的硬件平台。
( 300MHz处理器时钟频率;
( FPGA JTAG编译;
( 串口OPB- UARTLITE (波特率9600, 数据宽度8位, 无奇偶校验);
( CF卡控制器SysACE;
( 256MB内存DDR以及LED, 以上各个部件都有中断支持。具体的硬件信息如图2所示。通过执行EDK中的命令Generate Bitstream产生包含上述信息的比特流文件( led-linux. bit)。
312 软件平台设置
硬件比特流文件产生之后, 需要配置相应的软件信息生成软件板级支持包BSP。在EDK中打开软件平台设置, 在操作系统选项选择linux- 2- 6, 如图3 所示。在OS and L ibraries选项设置系统相应的参数, 如图4所示, 这些参数的值依赖于之前的硬件平台设置。Connected- periphs 选项用于设置Linux系统中需要支持的硬件设备(主要包括串口,DDR, CF 卡控制器, 中断, 灯等), Memory size 为DDR 内存容量设置大小( 256MB 对应的值为0x10000000), uart bus block freq设置为总线时钟频率( 100MH z), rootfs type为所选根文件系统类型(选择默认选项sysace), 需要注意的是这里选择的类型只代表系统工作时根文件的默认类型, 具体使用的类型可以在L inux内核编译过程中修改, 当根文件类型设置为ramd isk 类型时, ramd isk size设置ram2d isk大小。sysace partition 用于设置CF 卡的分区情况。 相应的参数设置完成后, 运行Generate Librar ies and BSPs选项, 就可以生成与具体硬件相匹配的板级支持包( BSP)了, 该支持包存于ppc405- 0 libsrc linux- 2- 6- v1- 00- a linux文件夹中。
4 嵌入式Linux系统构建
411 建立交叉编译环境

交叉编译是嵌入式研发过程中的一项重要技术[ 8], 它的主要特征是某机器中执行的程式代码不是在本机编译生成的, 而是由另一台机器编译生成, 一般称前者为目标机, 后者为主机。采用交叉编译主要在于多数嵌入式目标系统没有足够的资源供编译过程使用, 只能将编译工程转移到高性能的主机中进行。 Linux的交叉编译环境的建立主要包括以下几个部分:
( 针对目标系统的编译器gcc(本系统使用的是gcc- 31414);
( 针对目标系统的二进制工具binutils(本系统使用的是binutils- 2115);
( 目标系统的标准c库glibc(本系统使用的是glibc- 21315);
( 目标系统的linux内核头文档。 为避免复杂、繁琐的交叉编译环境的建立过程,本系统中利用现成的脚本文件crosstool- 0143来完成PowerPC交叉编译环境的建立。首先下载建立交叉编译环境所需要的各个编译工具(上面提到的),解压crosstool20143. tar. gz, 在得到的文件夹中找到与使用平台相对应的arch: demo2powerpc2405. sh。打开该文件并修改相关源文件的存放地址。TAR2 BALLS- DIR 为gcc、glibc 等源代码包的存放地址,RESULT- TOP 是交叉编译环境的安装目录。修改eval - ca t powerpc2405. dat gcc2411102glibc221316.dat. sh a l.l sh2notestls, 将其改为适合XUP平台的dat文件, 本系统中使用的是gcc231414和glibc221315。修改完成后执行demo- powerpc2405. sh即可生成针对Powerpc405的交叉编译环境。 412 添加BSP文件和配置内核
从网站上下载virtex的linux开发树linux22162 xlnx22124, 该内核源代码包含有xilinx的硬件信息,因此可以直接使用而不用更新。 将212节中生成的板级支持包BSP中相关的文件拷贝到内核源代码的相关文件夹中, 其中最重要、也是需要特别关注的文件是包含有当前系统硬件平台信息的xparameters- m B00. h, 将其放置在Xparameters文件夹中。 在配置内核之前, 首先需要修改关系整个内核配置、编译信息的控制文件Makefile, 这里主要是修改硬件平台信息和交叉编译工具信息。
ARCH: = ppc
CROSS- COMPILE = powerpc24052linux2gnu2
在Linux平台上运行makemenuconfig配置内核模块, 这里选择的是最小系统配置。 内核配置过程复杂, 源代码中某些特性的错误添加可能会导致无法正常编译, 或者无法正常运行。因此在配置内核时最好先生成最小、可以保证运行的. con fig文件, 再根据需要添加一些特性。内核配置完成后, 执行make 命令, 编译linux内核, 生成zImage. elf文件。 利用XMD工具对生成的内核进行检验, 检查配置的内核是否可以正常运行。XMD是Xilinx为PowerPC提供的一种软件调试方法, 它通过命令行的形式实现PowerPC 代码的开发与调试。使用XMD进行调试时, 首先将包含硬件信息的ledlinux.bit文件下载到开发板中, 打开XMD, 输入命令dow zImage. el,f 即将内核配置文件下载到目标板中, 观察串口端的输出, 如图5所示。如果内核配置的有问题, 串口端显示将停滞在Now booting the kerne,l 此时需要我们重新配置内核。
4. 3 制作根文件系统
根文件系统是L inux系统不可或缺的组件, 用于控制对数据文件及设备的存取, 提供对文件和目录的分层组织形式、数据缓存及对文件存取权限的控制。根文件系统一般包括以下目录: /dev设备文件目录, / lib共享函数库目录, /proc 内核情况的映射虚目录, /mnt其他磁盘系统挂接点, /etc系统配置文件存放目录, /boot引导加载程序所使用的静态文件, /sb in 系统程序目录, /b in 基本应用程序目录, /usr其他工具以及用户程序的存放处。根文件系统根据系统具体的需要有不同的类型, 如RAM disk根文件系统, JFFS2根文件系统, TMPFS根文件系统等。本系统中采用的是RAM disk根文件系统,下面详细介绍该文件系统的构建过程。
RAM disk根文件系统的制作首先是定义RAM大小及支持的文件系统格式, 如图6所示, 并将该系统加载到定义好的RAM
disk 中。根文件系统由目录树、库函数及系统程序和基本的应用程序等组成,构建它时首先创建dev、proc、bin、sbin、etc、lib 等目录, 接着将目录里所需文件移植进该文件系统中。Kingauf详细介绍了根文件系统的制作, 并且编写了mkrootfs. sh脚本文件, 为简化起见, 我们通过修改并运行mkrootfs. sh脚本文件制作根文件系统。制作过程中需要注意的是Kingauf制作的脚本文件中没有包含设备文件, 因此设备文件需要另行添加。根文件系统制作完成后, 将它拷贝到定义好的RAM disk中, 经压缩后放置在内核对应的文件夹中, 此时RAM disk根文件系统就制作完成了。 根文件系统的检测也是利用XMD工具完成的。在Linux操作系统下使用make zImage. in itrd命令重新编译内核, 该命令将文件系统信息包含在内核文件中。把生成的内核文件zImage. in itrd elf拷贝到工程文件夹下。在XMD界面下, 输入命令dow zImage. in itrd. el,f 将包含文件系统信息的内核文件下载到开发板中, 待串口输出-# . 时, 表示内核文件下载成功, 此时可以通过输入命令如cd, find等, 来检测根文件系统, 如图7所示。
4. 4 生成ACE文件及CF卡分区
使用XMD工具可以方便的对内核文件、根文件系统及程序源代码进行检测, 但在具体的应用中, 操作系统等都应该是自行引导的, 而并非手动加载, 实际中有很多方法可以解决这一问题, 可以通过构建bootloader引导程序, 也可以通过CF卡直接引导。本系统采用了第二种方法, 它的制作过程需要注意两个方面, 即生成ACE格式文件和对CF卡分区并对其进行格式化, 下面分别对这两个方面进行介绍。 适合开发板m B00的ACE 格式文件是在Cyg2 win shell中成功运行图8中的程序代码而产生的。
为了最大限度的模拟正常的Linux, 我们将CF卡分为/boot分区, /swap分区和/根分区, 具体的分区过程是利用函数fdisk来完成的。系统设计中使用的是2G的CF 卡, 分区后的效果为/boot分区大小为32MB, 分区类型为FAT16, 用于存放system.
ace文件; /swap分区大小为256MB, 类型属于L inux Swap( 82 ); 其余空间分配给/根分区, 其类型为Linux( 83), 用于存放根文件系统。格式化/boot分区时运行的命令是mkdosfs ) s 64 ) F 16 ) R 1 F: ,将该分区格式化为dos文件系统; 格式化/swap分区时运行的命令为mkswap /dev/hde2, 将该区格式化为swap文件系统; 格式化/根分区运行的命令是mke2fs /dev/hde3, 将该分区格式化为ext2 文件类型。CF卡格式化完成后, 将制作好的ACE 文件sys2 tem. ace拷贝到CF卡中, 同时将开发板上的启动路径选为从CF卡启动, 打开开发板电源后, 本地引导Linux并载入运行, 在串口上看到提示符-# . 后, 移植成功。 5 具体应用及结论
为了检测及充分利用定制的操作系统, 发挥PowerPC硬核的优势, 验证SOPC 技术结合FPGA实现信号处理设计的可行性, 系统中我们编写了简单的设备驱动程序, 实现操作系统与硬件外设及FPGA中IP的通信, 并编写应用程序代码点亮
了目标板上的灯。从而验证了操作系统可以正常工作并能完成预期的任务, 同时验证了SOPC 技术、操作系统与FPGA完美结合来完成信号处理任务的可能性。 本系统中实现了在PowerPC中定制特定的硬件系统, 编译交叉环境, 最终将L inux操作系统下载到PowerPC中, 从而实现了嵌入式系统, Linux操作系统与FPGA的结合, 为完成信号处理任务提供了一种新的方法。在今后的研究工作中, 可以在PowerPC中嵌入基于复杂应用的IP核, 如FFT、FIR 等处理模块, 结合Linux操作系统的特点, 完成大型系统的构建, 提高系统的可移植性, 方便后续的开发。