用户可轻松将这款高稳健操作体系装置到方针FPGA渠道上,以供嵌入式规划项目运用。
从开端不起眼的胶合逻辑开端,FPGA已阅历了绵长的开展路途。当时FPGA的逻辑容量和灵活性已将其带入了嵌入式规划的中心方位。现在,在单个可编程芯片上可完结一个完好体系,这种架构有助于软硬件的协同规划,并能将软硬件运用进行集成。
这些依据FPGA的嵌入式规划品种需求稳健的操作体系。PetaLinux应运而生,已成为很多嵌入式规划人员喜爱的方针。它以开源免费的办法供给,支撑包含赛灵思MicroBlaze® CPU和ARM®处理器在内的多种处理器架构。要将PetaLinux移植到特定的FPGA上,有必要针对方针渠道定制、装备和构建内核源代码、引导载入程序、器材树和根文件体系。
关于PES大学和C-DOT的一个规划项目而言,咱们的研制团队预备移植PetaLinux并在选用Kintex®-7 XC7K325T FPGA的赛灵思KC705评价板上运转多个PetaLinux用户运用。成果证明整个进程恰当快捷。
挑选PetaLinux的原因
在具体介绍具体做法之前,有必要花点时刻来评论针对依据FPGA的嵌入式体系供给的操作体系选项。PetaLinux是FPGA上最常用的操作体系,别的还有μClinux 和Xilkernel。μClinux为Linux发行版,是一款包含小型Linux内核的移植型Linux操作体系,适用于无存储器办理单元(MMU)的处理器[1]。μClinux配备有各种库、运用和东西链。Xilkernel就其自身而言,是一款小型、高稳健性、模块化内核,可以供给高于μClinux 的定制功用,有助于用户经过定制内核来优化其规划尺度与功用[2]。
一起,PetaLinux也是一款完好的Linux发行版及开发环境,适用于依据FPGA的片上体系(SoC)规划。PetaLinux包含预装备二进制可引导映像、面向赛灵思器材的彻底可定制Linux 以及配套供给的PetaLinux软件开发套件(SDK)[3]。其间SDK包含用于主动完结装备、构建和布置进程中各种杂乱作业的东西和实用程序。赛灵思供给可免费下载的PetaLinux开发包,其间包含针对各种赛灵思FGPA开发套件而规划的硬件参阅项目。一起包含在内的还有适用于赛灵思FPGA的内核装备实用程序、穿插编译器等软件东西、硬件规划创立东西以及很多其它规划辅佐功用。
据报道,Xilkernel 的功用优于μClinux[4],而PetaLinux的功用又优于Xilkernel [5]。由于这个原因,特别是由于已针对咱们赛灵思方针板供给的软件包原因,咱们为咱们的项目挑选了PetaLinux。移植PetaLinux的另一大优势是用户可以轻松完结长途编程。这就意味着用户可运用长途接入办法,经过长途登录,选用新的装备文件(或比特流文件)加载FPGA方针板。
有两种办法可以创立用于构建PetaLinux体系的软件渠道:在Linux终端上运用PetaLinux指令或经过下拉菜单运用GUI。
开端装置
下面具体介绍咱们项目团队装置PetaLinux的办法。第一步,咱们下载了PetaLinux软件包12.12版以及用于Kintex-7方针板的电路板支撑包(BSP)。然后运转了PetaLinux SDK装置程序,并在操控台上运用下列指令把SDK装置到了/opt/Petalinux-v12.12-final目录下:
@ cd /opt
@ cd /opt/PetaLinux -v12.12-final-full.tar.gz
@ tar zxf PetaLinux-v12.12-final-full.tar.gz
随后,咱们把从赛灵思网站取得的PetaLinux SDK许可证仿制并拷贝到.xilinx和.Petalogix文件夹中。接下来,咱们运用下列指令获取恰当设置,设置了SDK的作业环境:
@ cd /opt/PetaLinux-v12.12-final
@ source settings.sh
为验证作业环境是否设置正确,咱们运用了以下指令:
@ echo $PETALINUX
假如环境设置正确,将显现PetaLinux的装置途径。在本事例中,PetaLinux的装置途径是 /opt/PetaLinux-v12.12-final。
图1:用于用户设置的Linux终端窗口截屏
接下来的作业是装置BSP,其间包含必要的规划文件、装备文件和预构建软硬件包。这些软硬件包现已经过测验,可随时下载到方针板上。别的软件包还可用于在快速仿真器(QEMU)体系仿真环境下的引导。为了装置BSP,咱们在path /opt中创立了一个名为“bsp”的文件夹,并运用下列指令仿制了KC705 BSP的ZIP文件:
@ cd /opt/PetaLinux-v12.12-final-full
@ source settings.sh
@ source /opt/Xilinx/14.4/ISE _DS/settings32.sh
@ PetaLinux-install-bsp /bsp/Xilinx-KC705
-v12.12- final.bsp
构建为新渠道定制的PetaLinux体系,有两种创立和装备软件渠道的办法。一种办法是运用Linux终端,在PetaLinux指令对应的途径方位运用PetaLinux指令,如图1所示。第二种办法是经过下拉菜单运用GUI,如图2所示。您可运用其间任何一种办法来挑选渠道,装备Linux内核,装备用户运用和构建镜像。在操作体系装置完结后,就可运用PetaLinux操控台。而运用GUI则需求完结PetaLinux SDK插件的装置。完结该插件的装置后,就可运用PetaLinux Eclipse SDK中供给的PetaLinux GUI设置各种装备(图2)。该GUI具有各种特性,如用户运用和库开发,以及PetaLinux及硬件渠道的调试、构建和装备等。
硬件构建
咱们为项目运用了依据Kintex-7 FPGA的KC705评价板。规划需求的硬件接口有用于监控输出的RS232接口、用于编程FPGA的JTAG接口以及用于长途编程的以太网接口。除了PetaLinux SDK,所引荐规划需求的其它软件还包含Xil-inx Platform Studio (XPS) [6,7] 和赛灵思软件开发套件(SDK)[7]。
图2:用于用户设置的PetaLinux SDK菜单截屏
在该嵌入式规划的硬件部分,咱们的第一项使命便是运用XPS中的根本体系构建器(BSB)规划依据MicroBlaze处理器的硬件渠道。BSB答应挑选方针板上供给的一系列外设。您还可依据运用需求增加或删去外设。咱们所引荐运用选用的内核或外设集包含带8Mb存储器的外部存储器操控器、在中止状况下启用的定时器、波特率为115,200Bps的RS232 UART、以太网、非易失性存储器以及
LED。完结挑选后,咱们就取得了硬件外设及其总线接口(图3)。关于依据MicroBlaze处理器的规划,PetaLinux需求支撑MMU的CPU。因而咱们在XPS窗口中双击MicroBlaze_0实例,挑选了带MMU的低端Linux。
图3:FPGA的硬件装备
此刻硬件规划已完结。现在可以运用第一阶段引导载入程序引导该内核。
接下来,咱们运用三步转化流程将硬件装备转化为比特流。首要,咱们运用XPS生成了代表嵌入式硬件渠道的网表。随后,咱们将规划映射到FPGA逻辑中。终究咱们将完结的规划转化为可以下载到FPGA上的比特流。XPS的终究输出是system.bit和sys-tem_bd.bmm文件。
生成比特流后,咱们将硬件渠道描绘导出到SDK,以便在SDK中调查方针硬件渠道。导出的体系xml文件包含SDK编写运用软件并在方针硬件渠道上对其进行调试所需的信息。咱们的下一项使命是运用Xilinx Tools → Repository → New 在SDK中增加一个PetaLinux库,然后挑选PetaLinux的装置途径。在本实例中,该途径为$PetaLinux/Hardware/edk_user_repository。
接下来,咱们运用File → Board support package → PetaLinux创立了PetaLinux BSP。咱们依据所需的运用挑选必要的驱动程序,装备了PetaLinux BSP。随后咱们经过构建BSP并创立和装备第一阶段的引导载入程序运用(fs-boot),引导了内核。该BSP可树立硬件和引导运用之间的交互。SDK的输出为fs-boot.elf。可运用数据到存储器转化器指令data2mem
将system.bit、system_bd.bmm和fs-boot.elf 兼并为一个名为download.bit的一致比特流文件,用作终究的FPGA比特流。
此刻硬件规划已完结,其它方面还包含一个MicroBlaze内核和运转其上的PetaLinux操作体系。现在咱们可以运用第一阶段的引导载入程序引导内核。
构建软件
完结硬件渠道的构建后,咱们运用下列指令创立了针对硬件的定制PetaLinux软件渠道:
$ cd/opt/PetaLinuxv12.12
$ PetaLinux-new-platform –c
其间–c
图4:内核装备菜单
为定制与硬件匹配的软件渠道模板,咱们运用PetaLinux-copy-autoconfig指令将现有渠道装备与内核装备进行了兼并。该指令可生成硬件装备文件Xilinx-KC705.dts、xparame-ters.h 和 config.mk。
咱们运用GUI(PetaLinux SDK → Kernel Configuration)翻开内核装备菜单,装备了Linux内核。此外,您也可以在Linux终端上运用下列指令完结该作业:
$ cd /opt/PetaLinux_v12.12 $ PetaLinux-config-kernel
咱们在内核装备弹出窗口中启用该运用的驱动程序(如图4所示)。为经过用户空间输入/输出(UIO)接口拜访设备,完结所提出的作业,咱们在内核装备菜单中启用了UIO驱动程序。
内核装备完结后,咱们规划了一些运用。PetaLinux可供给用于C语言和C++编程的用户运用模板[8]。这些模板包含运用源代码和Makefile文件,便利为方针芯片装备和编译运用并将其装置在根文件体系中。创立新的PetaLinux用户运用,既可运用GUI(File → PetaLinux New Application),也可在Linux终端上输入下列指令:
$ cd /opt/PetaLinux_v12.12 $ PetaLinux-config-apps
随后咱们为该用户运用起了个文件名。在本实例中,咱们创立了gpio-dev-mem-test和gpio-uio-test用户运用,并依据运用要求修正了模板源代码。
接下来咱们运用GUI构建了PetaLinux体系映像(如图2所示)。此外,您还可以在Linux终端上运用make指令完结该使命,如下图所示:
$ cd $PETALINUX/software/ PetaLinux-dist $ make
支撑操作体系(OS)和定制用户运用的软件渠道以及咱们前文评论过的硬件规划现已可供运用。
测验运转在设备上的PetaLinux
下面介绍PetaLinux的引导办法。MicroBlaze处理器可处理驻留在Block RAM中的代码。第一阶段的引导载入程序(fs-boot)将初始化根本硬件、履行fs-boot.elf、查找通用引导载入程序或U-Boot、在闪存分区中进行寻址(由于U-Boot的地址已在装备fs-boot时设定)。随后,fs-boot将从闪存中的U-Boot分区中获取U-Boot映像,将其发送到设备的DDR3存储器并运转内核。一旦构建好一切引导所需的映像后,您就可以经过JTAG、以太网或快速仿真器在硬件上测验这些映像了。QEMU是一种仿真器和虚拟机,答应您运转PetaLinux操作体系[9]。下面评论一切这三种解决方案的引导办法。
JTAG是编程和测验FPGA规划的传统办法。为运用JTAG对FPGA进行编程,咱们运用了下拉菜单“Xilinx Tool → Program the FPGA”并下载了之前生成的download.bit文件。随后咱们运用GUI(PetaLinux SDK → BOOT JTAG [Li-nux])将映像下载到了电路板上,如图2所示。您也可以在Linux终端上运用下列指令:
$ cd/opt/PetaLinux _v12.12/software/ PetaLinux-dist
$ PetaLinux-jtag-boot -i images/image.elf
此外,您还可运用U-Boot履行直接内核引导,然后引导PetaLinux。体系首要运用GUI(PetaLinux SDK → BOOT JTAG [U-Boot])或以下指令经过JTAG接口下载U-Boot来进行引导。
$ cd $PETALINUX/software/ PetaLinux-dist
$ PetaLinux-jtag-boot -i images/u -boot.elf
图6是U-Boot操控台的快照。
值得注意的是,FPGA电路板衔接的是以太网接口。您有必要在XPS的硬件资源部分挑选以太网接口。一旦U-Boot引导成功,就要检查服务器和主机的IP地址是否相同。假如IP地址不同,请在U-Boot终端上运用下列指令设置主机IP。
u-boot>print serverip // prints 192.168.25.45(server ip)
u-boot>print ipaddr // prints IP address
of the board as // 192.168.25.68
u-boot>set serverip
u-boot>set serverip 192.168.25.68192.168.25.68
现在服务器(PC)和主机(KC705电路板)具有相同的IP地址。请经过服务器运转网络引导指令,下载PetaLinux映像和引导程序:
u-boot> run netboot
运转网络引导指令后,您应该可以看到PetaLinux操控台,如图5所示。
终究您可运用GUI(PetaLinux SDK → BOOT QEMU [Linux])或以下指令履行内核引导,这也很重要。
$ cd $ PETALINUX/software/ PetaLinux-dist $ PetaLinux-qemu-boot -i images/image.elf
运用这种快速办法,咱们将看到图7所示信息。
测验运转在规划上的运用
完结PetaLinux引导的测验后,接下来便是测验专为PetaLinux规划的用户运用。MicroBlaze处理器将Kintex-7 FPGA电路板上的硬件外设视为一组存储寄存器。每个寄存器都有自己的基址和完毕地址。要拜访一个外设,用户有必要知道它的基
图5:承认操作体系引导成功的PetaLinux操控台快照
图6:经过通用引导载入程序(U-Boot)进行的直接内核引导
址和完毕地址。您可以在设备树源(*.dts)文件中找到有关地址的具体信息。就本规划而言,咱们开发并测验了四款运用,分别是拜访DDR3、运用/dev/mem拜访GPIO、运用UIO拜访GPIO和文件传输。
1. 拜访DDR3
咱们运用名为DDR3-test.c的PetaLinux运用拜访DDR3存储器。该运用经过精心规划,可向DDR存储器方位写入数据并从这儿读取数据。DDR3是双列直插式存储器模块,可供给用于存储用户代码和数据的SDRAM。如上文所述,用户需求知道DDR存储器的开端地址和完毕地址,分别是0xC0000000和0xC7FFFFFF。存储器的容量为512兆字节。Linux内核驻留在DDR存储器的初始存储器方位。因而需求挑选DDR3存储器的写入方位,以防止损坏Linux内核。咱们运用以下指令向DDR3存储器写入数据:
#DDR3-test –g 0xc7000000 –o 15
其间DDR3-test是运用称号、-g是DDR3存储器的物理地址、-o是输出、15是预备在0xc7000000方位写入DDR3存储器的值。为测验该值是否能写入估计的方位,咱们运用以下指令从DDR3存储器读取数据:
#DDR3-test –g 0xc7000000 –i
图7:经过QEMU运转PetaLinux
该运用旨在操控8位离散输出,可经过将板载LED衔接至GPIO进行测验。
值15显现在终端上,这说明DDR3存储器读写操作正在成功进行。
2. 运用/dev/mem拜访GPIO
关于接下来的运用测验,咱们运用名为gpio-dev-mem-test.c的PetaLinux运用拜访了通用I/O(GPIO)。该运用的规划意图是操控8位离散输出并经过将板载LED衔接至GPIO来测验该输出。要从用户空间拜访任何设备,就要先翻开/dev/mem,然后运用mmap()将设备映射至存储器。咱们所运用LED GPIO的开端地址和完毕地址分别是0x40000000 和0x4fffffff。
GPIO外设具有两个寄存器:数据寄存器(GPIO_DATA)和方向寄存器(GPIO_TRI_OFFSET)。为了读取GPIO的状况,咱们将方向位设置为1(即GPIO_TRI_OFFSET=1)而且从数据寄存器读取数据。为了将数据写入到GPIO,咱们设置方向位为0并写入值到数据寄存器。在PetaLinux终端上运用下列指令将数据写入到GPIO:
#gpio-dev-mem-test –g 0x40000000 –o 255
其间gpio-dev-mem-test为运用称号,-g为GPIO物理地址,-o为输出,255为从GPIO(衔接到LED)发送的值。LED按编写的程序点亮时,测验的成果就得到了验证。
3. 运用UIO拜访GPIO
拜访GPIO的另一个途径是经过用户空间输入/输出。咱们经过UIO,运用名为gpio-uio-test.c的PetaLinux运用拜访了GPIO。该运用旨在操控8位离散输出,可经过将板载LED衔接至GPIO进行测验。UIO设备在文件体系中表现为/dev/uioX。为经过UIO拜访GPIO,咱们翻开了/dev/uioX或sys/class/ui0,然后运用了mmap()调用。咱们装备了内核使之支撑UIO,并在内核中启用了UIO结构。随后咱们运用名为“Compatibility”的参数,依据UIO设备(而非规范GPIO设备)对LED的GPIO操控办法进行了设置。此外,咱们还将
设备的标签从 gpio@40000000修正成了leds@40000000。
然后咱们从头构建了PetaLinux,并运用UIO测验了GPIO拜访。咱们运用以下指令,取得了所加载UIO模块的具体信息:
# ls /sys/class/uio/ uio0 uio1 uio2
UIO的称号和地址可在/sys/class/uio/uioX下找到。咱们运用以下指令经过UIO驱动程序拜访了GPIO LED:
# cd “/sys/class/uio/uioX
# gpio-uio-test -d /dev/uio1 -o 255
其间gpio-uio-test为运用称号、-d为设备途径、-o为输出、255为经过UIO传递给GPIO的值。运用以上指令,LED按写入到GPIO线路上的数据点亮,验证了该成果。
4. 文件传输运用
终究一项测验,咱们将文件从服务器传输到了客户端,这儿的服务器是主机PC,客户端是KC705电路板。在这项测验中,咱们运用以太网线缆衔接服务器和客户端,并运用了小型文件传输协议(TFTP)。这种协议因简略而出名,一般用于主动传输装备文件或引导文件。为测验运用TFTP从服务器向客户端传输文件的状况,咱们在/tftpboot方位为服务器PC创立了一个名为test的文件。咱们运用以下指令在文件中写入了“世界,你好”并检查了该文件中的内容(如图8所示):
@ echo “Hello World” > /tftpboot/test
@ more /tftpboot/test
图8:在服务器中创立文件的快照
图9:在客户端接纳文件的快照
图10:从客户端到服务器传输文件的快照
图11:在服务器中接纳文件的快照
为从服务器接纳该文件,咱们在以客户端办法运转在KC705电路板上的PetaLinux终端窗口中输入以下获取指令(-g):
# tftp -r test -g 192.168.25.68
# ls –a
在客户端中创立了一个名为“test”的新文件(如图9所示)。咱们可以运用更多内容指令检查该文件的内容,如图9所示:
相同,假如要从客户端向服务器传输文件,可先在客户端机器上创立一个名为test1的文件,其内容为“PetaLinux OS”。然后在运转在客户端上的PetaLinux终端中运用以下“放置”指令(-p),便可将该文件从客户端传输至服务器,如图10所示:
# tftp -r test1 -p 192.168.25.68
可在服务器中创立一个空白文件test1,其内容可在文件传输作业完结后读取。该内容可图11所示办法进行验证。
在FPGA上完结嵌入式体系和运转PetaLinux,操作起来十分简略直观。接下来,咱们方案运用长途编程完结规划,即引导文件经过以太网传输,客户端可以运转新运用。
参阅资料
1. Kynan Fraser,《运转uClinux的MicroBlaze》,摘自《高档计算机体系架构》:http://www.cse.unsw.edu.au/~cs4211
2. 赛灵思公司Xilkernel 3.0版,2006年12月
3. 赛灵思公司《PetaLinux SDK用户攻略》UG976,2013年4月
4. Gokhan Ugurel和Cuneyt F. Bazlamacci,《在MicroBlaze上Xilkernel和μC/OS-II上下文切换时刻及内存占用比较》,摘自2011年12月土耳其布尔萨的《第7届电子电气工程世界学术会议》第52页至55页。
5. Chenxin Zhang、Kleves Lamaj、Monthadar Al Jaberi和Praveen Mayakar,《极小型网络附加存储(NAS)》”,摘自隆德大学机械学院(Lunds Tekniska Hogskola)《项目陈述,高档嵌入式体系课程》2008年11月
6. 赛灵思公司《Platform Studio用户攻略》UG113,1.0版,2004年3月
7. 赛灵思公司《EDK概念、东西和技巧:高效嵌入式体系规划实际操作攻略》UG683,14.1版别,2002年4月
8. 赛灵思公司《PetaLinux运用开发攻略》UG981,2013年4月
9. 赛灵思公司《PetaLinux QEMU仿真攻略》UG982,2013年11月