如何将PetaLinux移植到xilinx fpga视频教程上

当前位置: &
> 如何将PetaLinux移植到Xilinx FPGA上
如何将PetaLinux移植到Xilinx FPGA上
印度班加罗尔PES理工学院(PES Institute of Technology)&&
Srikanth Chintala
卫星和无线部研发工程师
印度班加罗尔远程信息处理开发中心(C-DOT)
Manikandan J
通信工程系(EC)信号处理领域教授和领域带头人
研究创新孵化学(CORI)教授
印度班加罗尔PES大学(PES University)
用户可轻松将这款高稳健操作系统安装到目标平台上,以供设计项目使用。
从最初不起眼的胶合逻辑开始,FPGA已经历了漫长的发展道路。当前FPGA的逻辑容量和灵活性已将其带入了嵌入式设计的中心位置。目前,在单个可编程芯片上可实现一个完整系统,这种架构有助于软硬件的协同设计,并能将软硬件应用进行集成。
这些基于FPGA的嵌入式设计种类需要稳健的操作系统。Peta应运而生,已成为众多嵌入式设计人员青睐的对象。它以开源免费的方式提供,支持包括MicroBlaze® CPU和®处理器在内的多种处理器架构。要将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的片上系统()设计。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。
15:39:29 上传
图1:用于用户设置的Linux终端窗口截屏
接下来的工作是安装BSP,其中包含必要的设计文件、配置文件和预构建软硬件包。这些软硬件包已经通过测试,可随时下载到目标板上。另外软件包还可用于在快速器(QEMU)系统仿真环境下的引导。为了安装BSP,我们在path /opt中创建了一个名为“bsp”的文件夹,并使用下列命令复制了KC705 BSP的ZIP文件:
@ cd&&/opt/PetaLinux-v12.12-final-full
@& & source&&settings.sh
@& & source /opt//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]。
15:39:29 上传
图2:用于用户设置的PetaLinux SDK菜单截屏
在该嵌入式设计的硬件部分,我们的第一项任务就是使用XPS中的基本系统构建器(BSB)设计基于MicroBlaze处理器的硬件平台。BSB允许选择目标板上提供的一系列外设。您还可根据应用需求添加或删除外设。我们所推荐应用采用的内核或外设集包括带8Mb存储器的外部存储器控制器、在中断情况下启用的定时器、波特率为115,200Bps的RS232 UART、以太网、非易失性存储器以及
。完成选择后,我们就获得了硬件外设及其接口(图3)。对于基于MicroBlaze处理器的设计,PetaLinux需要支持MMU的CPU。因此我们在XPS窗口中双击MicroBlaze_0实例,选择了带MMU的低端Linux。
15:39:29 上传
图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 &CPU-ARCH& –v &VENDOR& –p &PLATFORM&
其中–c &cpu-arch&为支持的CPU类型(这里是MicroBlaze处理器)、–v &vendor&为厂商名称(这里是赛灵思),而–p &platform&则为产品名称(这里是KC705)。软件平台的配置文件在安装PetaLinux的目录下生成,即/opt/PetaLi-nuxv12.12/software/ PetaLinux-dist/vendors/Xilinx/ KC705。
15:39:29 上传
图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++编程的用户应用模板[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 &HOST IP& // Host IP 192.168.25.68
u-boot&set serverip 192.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电路板上的硬件外设视为一组存储寄存器。每个寄存器都有自己的基址和结束地址。要访问一个外设,用户必须知道它的基
15:39:29 上传
图5:确认操作系统引导成功的PetaLinux控制台快照
15:39:29 上传
图6:通过通用引导载入程序(U-Boot)进行的间接内核引导
址和结束地址。您可以在设备树源(*.dts)文件中找到有关地址的详细信息。就本设计而言,我们开发并测试了四款应用,分别是访问DDR3、使用/dev/mem访问GPIO、使用UIO访问GPIO和文件传输。
1. 访问DDR3
我们使用名为DDR3-test.c的PetaLinux应用访问DDR3存储器。该应用经过精心设计,可向DDR存储器位置写入数据并从这里读取数据。DDR3是双列直插式存储器模块,可提供用于存储用户代码和数据的SDRAM。如上文所述,用户需要知道DDR存储器的开始地址和结束地址,分别是0xCxC7FFFFFF。存储器的容量为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
15:39:29 上传
图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的开始地址和结束地址分别是0x 和0x4fffffff。
GPIO外设具有两个寄存器:数据寄存器(GPIO_DATA)和方向寄存器(GPIO_TRI_OFFSET)。为了读取GPIO的状态,我们将方向位设置为1(即GPIO_TRI_OFFSET=1)并且从数据寄存器读取数据。为了将数据写入到GPIO,我们设置方向位为0并写入值到数据寄存器。在PetaLinux终端上使用下列命令将数据写入到GPIO:
#gpio-dev-mem-test –g 0x –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@修改成了leds@。
然后我们重新构建了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
15:39:29 上传
图8:在服务器中创建文件的快照
15:39:30 上传
图9:在客户端接收文件的快照
15:39:30 上传
图10:从客户端到服务器传输文件的快照
15:39:30 上传
图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,《运行的MicroBlaze》,摘自《高级计算机体系架构》:
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月
欢迎分享本文,转载请保留出处: &&&
相关资料下载
相关设计应用用户可轻松将这款高稳健操作系统安装到目标FPGA平台上,以供嵌入式设计项目使用。从最初不起眼的胶合逻辑开始,FPGA已经历了漫长的发展道路。当前FPGA的逻辑容量和灵活性已将其带入了嵌入式设计的中心位置。目前,在单个可编程芯片上可实现一个完整系统,这种架构有助于软硬件的协同设计,并能将软硬件应用进行集成。这些基于FPGA的嵌入式设计种类需要稳健的操作系统。PetaLinux应运而生,已成为众多嵌入式设计人员青睐的对象。它以开源免费的方式提
供,支持包括赛灵思MicroBlaze(R)
CPU和ARM(R)处理器在内的多种处理器架构。要将PetaLinux移植到特定的FPGA上,必须针对目标平台定制、配置和构建内核源代码、引导载入程
序、器件树和根文件系统。对于PES大学和C-DOT的一个设计项目而言,我们的研发团队准备移植PetaLinux并在采用Kintex(R)-7 XC7K325T
FPGA的赛灵思KC705评估板上运行多个PetaLinux用户应用。结果证明整个过程相当便捷。选择PetaLinux的原因在详细介绍具体做法之前,有必要花点时间来探讨针对基于FPGA的嵌入式系统提供的操作系统选项。PetaLinux是FPGA上最常用的操作系
统,另外还有μClinux
和Xilkernel。μClinux为Linux发行版,是一款包含小型Linux内核的移植型Linux操作系统,适用于无存储器管理单元(MMU)
的处理器[1]。μClinux配备有各种库、应用和工具链。Xilkernel就其本身而言,是一款小型、高稳健性、模块化内核,能够提供高于
的定制性能,有助于用户通过定制内核来优化其设计尺寸与功能[2]。构建软件完成硬件平台的构建后,我们使用下列命令创建了针对硬件的定制PetaLinux软件平台:$ cd/opt/PetaLinuxv12.12$ PetaLinux-new-platform –c –v –p其中–c 为支持的CPU类型(这里是MicroBlaze处理器)、–v 为厂商名称(这里是赛灵思),而–p
则为产品名称(这里是KC705)。软件平台的配置文件在安装PetaLinux的目录下生成,即/opt/PetaLi-nuxv12.12/software/
PetaLinux-dist/vendors/Xilinx/ KC705。图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
[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 addressof the board as // 192.168.25.68u-boot&set serverip // Host IP 192.168.25.68u-boot&set serverip 192.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也是一款完整的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接口以及用于远程编程的以太网接口。除了
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引导的测试后,接下来就是测试专为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存储器的开始地址和结束地址,分别是
0xCxC7FFFFFF。存储器的容量为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的开始地址和结束地址分别是0x 和0x4fffffff。GPIO外设具有两个寄存器:数据寄存器(GPIO_DATA)和方向寄存器(GPIO_TRI_OFFSET)。为了读取GPIO的状态,我们将
方向位设置为1(即GPIO_TRI_OFFSET=1)并且从数据寄存器读取数据。为了将数据写入到GPIO,我们设置方向位为0并写入值到数据寄存
器。在PetaLinux终端上使用下列命令将数据写入到GPIO:#gpio-dev-mem-test –g 0x –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@修改成了leds@。然后我们重新构建了PetaLinux,并使用UIO测试了GPIO访问。我们使用以下命令,获得了所加载UIO模块的详细信息:# ls /sys/class/uio/ uio0 uio1 uio2UIO的名称和地址可在/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,操作起来非常简单直观。接下来,我们计划使用远程编程实现设计,即引导文件通过以太网传输,客户端能够运行新应用。EETOP(eetop-1) 
 文章为作者独立观点,不代表大不六文章网立场
的最新文章
培训信息 | 加密工程:在硬件和嵌入式软件中植入高速和安全的加密系统电磁兼容测试技术、误差分析、不确定度评定、实验室管理及国家标准应用专题培训班质数又叫素数,只能被1和自身整除,是所有大于1数字的基本组成。也就是说,每个数字要么本身就是一个质数,如2、17、53或673,要么就是质数的乘积,如17119(17 x 19?3)。电磁兼容测试技术、误差分析、不确定度评定、实验室管理及国家标准应用专题培训班北京时间11月14日早间消息,路透社援引消息人士的说法称,西门子正接近以45亿至46亿美元现金的价格收购半导体设计软件厂商Mentor Graphics。电子墨水E-Ink新技术突破可让电子墨水屏在同样的低功耗水平下实现混合色彩显示。科学家发现通过物理手段“弯曲”石墨烯表层的膜,可以有效地控制电子墨屏的显示色彩很多人误认为,只要零下几摄氏度就可以常年保存食物了,此为错误观念。对于已经冻结的食物来说,冷冻的温度越低,食物的品质保持得就越好。也就是说,零下25℃就比零下18℃好,零下30℃又比零下25℃好。硅基半导体(有可能)到头了,下个方向是什么?近年来大家从报道中可能也注意过一些新型计算机,包括热门的量子计算、DNA计算机之类的,不过最有可能的还是光学计算机,因为光的传播速度比电子快多了,光学计算机的性能自然也高多了。电磁兼容测试技术、误差分析、不确定度评定、实验室管理及国家标准应用题培训班.静态时许分析中的setup和hold存在负值的问题总投资387亿元人民币的华力微电子二期12英寸集成电路芯片生产线项目9日在上海开工。特朗普成为美国新任总统,会给美国乃至全球科技行业带来重大影响,其中中国电子产品进入美国市场将更加困难,美国硅谷招募海外技术人才的难度也会增加,因此也有人称此时估计硅谷一片哀嚎。过去的几年中,Intel很不幸地跟佳能公司一道被封为“牙膏厂”,玩家对他们不肯受惠于2016年整体半导体发展持续畅旺的影响,中国台湾地区晶圆代工厂商 10 月份业绩也陆续传出好表现的消息。三端电容跟一般的两端电容有啥区别?为何可以有较佳的稳压能力以及噪声抑制能力?200个三极管电路集锦(国外的)word版本Quick Charge 3.0比以前的技术更先进,因为它可以智能地识别电池在充电过程中的任何点可以承受多少功率。基本上,它可以防止电池在充电过程中发生过热。据高通公司称,可以在30分钟内将2750 mAh电池电量从0充电到71%。三星宣布,14nm工艺正式推进到第四代LPU,10nm工艺推进到第三代LPU,前者接班LPE\LPP\LPC,后者接班LPE和LPP(这么低调,深藏功与名啊……)。11月3日消息,芯片制造商Marvell宣布,作为重组计划的一部分,该公司计划裁员900人,以便集中精力发展盈利能力更强的业务。根据之前披露的5437员工)总数计算,Marvell此次的裁员比例约为16%。作为一个人口超过10亿的大国,印度有一个怪现象,那就是它们有世界一流的软件服务行业,但在硬件方面却鲜有作为。虽然印度政府推出多项措施鼓励人们创业,但其创业环境对于硬件公司来说还是过于恶劣。智能手机、平板电脑增长率放缓已成既定事实,全球各半导体芯片公司近来都将物联网视为下一波半导体风口。被收购后仍能保持独立性,这是ARM管理层同意被软银收购,拒绝被苹果收购的核心原因有机电子离子泵有6个小孔,为了比较大小,我们把这个离子泵放在硬币旁边。人类神经元传递信息的速度比我们眨眼的速度还快30倍。一个神经元能在10毫秒内通过细胞膜释放化学物质,随即邻近细胞上的受体接收这种化学物质,信息就这样被传递出去。电磁兼容测试技术、误差分析、不确定度评定、实验室管理及国家标准应用题培训班.电磁兼容测试技术、误差分析、不确定度评定、实验室管理及国家标准应用题培训班.科技这东西总是处于不断变化和改进当中,而这反过来也让“旧科技”的淘汰速度比任何一个非科技行业的东西都要快得多。一些时下看起来非常流行的东西,或许将在未来的几年时间里,就被“新宠儿”所淘汰。长久以来半导体产业链中最为人津津乐道的是设计及代工环节,据 Gartner 数据,2015 年全球代工市场营收 488 亿美元,而封装市场营收 255 亿美元,两者比例约为 1.9:1培训 | 加密工程:在硬件和嵌入式软件中植入高速和安全的加密系统据业内消息,紫光集团昨日增持中芯国际,累计持有万股,持股比例达6.66%。北卡州立大学和英特尔公司的研究人员提出了一个方案去解决现代处理器的一个最具持久性的难题:处理器多个核心之间的通信。他们的方法是一组被称为 Queue Management Device 或QMD的专门逻辑回路。Mali-G71主要用于高端处理器,今天ARM公司又推出了面向中端市场的Mali-G51 GPU,针对2018年的设备。另外还发布了Mali-V61 VPU,支持4K 120解码。培训信息 | 加密工程:在硬件和嵌入式软件中植入高速和安全的加密系统得益于谷歌(微博)、亚马逊和Facebook等科技巨头的努力,人工智能和机器学习这两个生僻的科技术语如今已经广为流传。它们经常互换使用,很多人也都用这些词汇来描述各种智能家电和代替人类工作机器人。有人最近在社交问答网站Quora上提出了这样一个问题:深度学习可以促成哪些产品突破?谷歌(微博)大脑团队工程师埃里克·蒋(Eric Jang)专门撰文给出了详细的回答。10月31日,全球第6大晶圆生产商环球晶圆已通过美国外国投资委员会(CFIUS)通知审查程序,即将完成对第4大晶圆生产商SunEdison Semiconductor Limited的收购,成为中国台湾最大、全球第三大的半导体晶圆供应商。要跟上摩尔定律预言的晶体管密度步伐,芯片制造商正面临越来越大的技术障碍。如今主要芯片制造商如英特尔、台积电和GF正在考虑采用超紫外线蚀刻技术。超紫外线蚀刻扫描仪使用的激光波长不到今天最先进机器的十分之一如何彻底读懂并理解MOSFET的Datasheet据CNBC报道,三星计划在美国德克萨斯州的芯片工厂投资10亿美元,扩大三星自有品牌的芯片业务。三星公司日前表示,这笔投资将用于扩大电子半导体制造,将于明年年初投产美国科技业创新成为主导全球网络产业的最庞大势力,也推翻许多传统产业,特别是中介服务业,使得全球政府与企业都在思考创新,政治人物也以支持创新做为政策诉求,但是张忠谋日前呼吁勿忘旧产业,认为旧产业才是创造经济成长培训 | 加密工程:在硬件和嵌入式软件中植入高速和安全的加密系统都别争了,原来Intel/AMD/Nvidia其实都是一个后台老板香农公式和奈奎斯特准则在通信中的意义是什么?工信部培训中心:“电子电气设备雷击、浪涌防护和辐射发射屏蔽技术及案例分析”高级培训班通知每当有新的 CPU 发布,我们关注于表象但华丽的数字,像是 Cache 的大小、CPU 的执行时脉以及采用几纳米制程等。这一次,让我们撇除以上这些外在事物,一探现代 CPU 的微架构这个“内在美”吧。台积电推出整合扇出型晶圆级封装(InFO WLP)今年第二季开始量产,成功为苹果打造应用在iPhone 7的A10处理器。看好未来高阶手机晶片采用扇出型晶圆级封装(Fan-Out WLP,FOWLP)将成主流趋势金属线是为了传输电流,因此主要需要从解决和减小它的(寄生)电阻、 (寄生)电容方面多做考虑。 (寄生)电感一般忽略,高频电路除外。这主要从两个方面分析解决中芯上海新十二寸厂本月动工,月产能七万片,欲强压全球晶圆代工一哥台积电南京厂的二万片。三星Note7爆炸事件可以说是2016年科技界头条之一,目前爆炸原因三星正在调查之中,而业界在猜想中,有一种就是电池质量不过关导致手机过热自燃,甚至爆炸,那么有没有一种更为安全的电池技术呢?HTC连 6 季亏损 惟亏损已渐缩小近几日,AT&T以854亿美元收购时代华纳新闻火爆了网络。对于工科出生的小编来讲,这则消息也没有什么触动,但是让小编想起了曾经属于AT&T的富有传奇的贝尔实验室,下面为大家整理一下AT&T、朗讯、贝尔实验室的关系及其兴衰。25号上午,英特尔正式揭开了Atom E3900系列物联网处理器产品线的面纱。其基于最新一代Goldmont核心,英特尔希望借此在IoT市场大发威力。eetop-1国内最顶级的电子行业工程师社区(EETOP)官方订阅号,为您分享论坛精华内容、行业最新资讯、产品及技术热门文章最新文章eetop-1国内最顶级的电子行业工程师社区(EETOP)官方订阅号,为您分享论坛精华内容、行业最新资讯、产品及技术}

我要回帖

更多关于 xilinx fpga型号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信