基于Xilinx FPGA的嵌入式Linux操作系统解决方案设计
便调试,还需要加入串口控制台模块,本设计使用的是UartLite模块,设置需要的波特率和校验类型。特别注意的是,系统还需要时钟管理模块(DCM),提供各个模块需要的不同时钟,还要设置一段FPGA内部RAM区域,放置PPC的.boot文件。外部这些模块都通过PLB总线和PPC通信,需要统一编址,一般把DDR 内存空间地址分配到0x0开始,整个系统的构建如图3所示。
本设计,除了在 EDK中搭建了操作系统必须的各种模块后,还需要在ISE中编写各个时序电路程序,因此把 EDK中编写好的工程作为一个模块,加入到ISE中,然后统一编译,这样生成了我们需要的完整功能的程序。特别指出的是,PPC405数据地址采用的是大端模式,接入到ISE中时,需要把数据颠倒位置,如DATA[0:31]变为DATA[31:0],才能正常读写。
Linux操作系统的加载与烧写
加载Linux操作系统需要利用EDK软件提供的板级升级包(BSP)配置内核。BSP 包含了所选定处理器架构的属性文件以及相关硬件的驱动源文件。首先要在EDK Project Option 中Project Peripheral Respository选项下设置Xilinx提供的 gen-mhs-devtree/edk_lib 库路径,然后在软件平台设置中选择Dts模式,编译更新升级包,生成.dts配置文件。Dts文件包含了所有模块地址分配,中断以及驱动信息,把他加入到Linux 内核中,然后配置内核选项选择对应的处理器架构、所选硬件的驱动模块以及需要的其他内核模块,之后再对完成配置的内核进行编译,生成Linux 的内核image 文件。生成内核image 文件之后,还需要生成系统运行所需要的根文件系统。根文件系统中包含了嵌入式Linux系统的所有应用程序、库以及系统配置等相关文件。根文件系统中常用的程序和命令可利用开源软件Busybox构造。构造完成之后,在Busybox 生成的目录和文件的基础上再构造根文件系统的目录树,并添加相关设备文件和配置文件以及系统运行时需要的脚本文件, 从而形成最终的根文件系统,ramdisk.image。把他拷贝到内核中的../arch/powerpc/boot目录下,在linux2.6.x根目录下运行make zlmage. initrt,生成最终的系统文件。需要指出的是,在编译linux内核时,需要设置好交叉编译环境:首先安装ELDK编译软件,然后在编辑自己的帐户目录下的 .bashrc (例如:/home/ppc/) 中加入下面内容:
CROSS_COMPILE=ppc_4xx
$PATH=$PATH:/home/ ppc /PowerPc/ELDK/usr/bin:/home/ ppc /PowerPc/ELDK/binexport CROSS_COMPILE PATH
保存,然后执行$source .bashrc
把生成的zlmage.initrd 文件通过 EDK 软件下的XMD调试窗口,使用dow zlmage.initrd命令下载到DDR中,然后运行 run命令,就正常启动Linux了。
程序下载到 DDR中,掉电后,数据就丢失了,不能保存和连续使用,因此要把操作系统烧写到FLASH,上电后让它能自动运行,掉电后也不会丢失。EDK提供了专门的FLASH 烧写工具Program Flash Memory,首先要把zlmage.initrd文件转换为FLASH能识别的.SREC文件,需要在EDK Shell下运行下面命令:
$powerpc-eabi-objcopy –I elf32-powerpc –O srec zImage.initrd.srec
第一次烧写FLASH时需要把Program Flash Memory中Create Flash Bootlooder Application 勾上,让系统自动生成Bootlooder程序。操作系统烧写到Flash中后,需要FPGA在上电后自动从FLASH读取操作系统数据,然后自动运行,这几需要把刚刚生成的bootloadr_0工程中的.elf加入到.bit生成新的配置文件,使用EDK下的Updata Bitstream命令就能实现。最后把生成的.mcs文件烧写到FPGA PROM中,上电后,系统就能自动运行了。
设计结果与分析
在Linux系统正常加载后,我们设计一个程序,它通过以太网,从上位机获得数据,存入FPGA内部BlockRam中,再在ISE中编写程序,把获得的数据取出,产生频率可变的波形发生器,并回传发送的参数给上位机。
通过实验证明,在FPGA加入操作系统后,能轻松实现网络数据的收发,并通过FPGA自身的逻辑,产生我们需要的各种控制信号,做到了系统的统一调度和各个功能的并行处理,发挥了操作系统和FPGA各自的优势。但是也发现,FPGA下操作系统运行的频率不高,最多600MHz,中断响应间隔较长,大约3ms左右,系统上电启动时间较长,大约40s左右,这些都需要在今后设计中进一步完善和提升。
结语
本文介绍了基于FPGA的嵌入式Linux设计流程,从硬件设计到Linux系统加载,再到应用程序运行整个过程,从中可以看出,该设计既发挥了FPGA并行处理和多时序控制上的优势,也发挥了嵌入式Linux系统调度和可裁剪性方面的优势,还提高了这个系统的稳定行,也减少了FPG
操作系统 解决 方案设计 Linux 嵌入式 Xilinx FPGA 基于 相关文章:
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- VXWORKS内核分析(11-11)
- Linux内核解读入门(11-09)
- 嵌入式系统实时性的问题(06-21)
- 基于WinCE操作系统的通用USB数控键盘设计(08-05)
- 嵌入式实时操作系统设计探讨(10-15)