一.平台说明
二.软件安装
三.基本开发流程
3.1.AMP模式介绍
3.2.开发流程框图
四.具体开发流程
4.1.下载官方Demo源码
4.2.Vivado工程创建(Windows 64位环境)
4.2.1.工程创建
4.2.2.配置ARM系统:
4.2.3.工程编译并导出
4.3.Petalinux工程(Ubuntu 16.04环境)
4.4.SDK工程(Windows 64位环境)
4.4.1.CPU1程序(app_cpu1.elf)创建:
4.4.2.softUart.elf创建(使用petalinux更方便):
4.5.生成SD卡下载文件(Windows 64位环境)
五.SD卡启动配置
1.SD 系统启动卡说明
2.SD系统启动卡制作步骤
六.板卡双核系统验证
6.1.poke和peek命令
附录
一.平台说明
1、硬件平台:ZYNQ7z202clg400-2的创龙核心板
2、软件平台:
Windows 64位环境下:
Vivado 2017.04版本+SDK 2017.04版本
Linux环境下(Ubuntu 16.04):
Petalinux 2017.04版本
二.软件安装
Vivado+SDK+Petalinux是xilinx针对SOC FPGA芯片而设计的专用开发方式。Vivado进行ARM系统配置和FPGA硬件电路设计,SDK进行用户应用程序设计,Petalinux进行linux的uboot、kernrl和rootfs的集成式设计。
软件安装:
(1)Vivado+SDK安装流程:《Vivado2017.4安装教程》
(2)Petalinux安装教程:《Petalinux2017.4安装教程》
三.基本开发流程
3.1.AMP模式介绍
从软件的角度来看,多核处理器的运行模式有三种:
AMP(非对称多进程):
多个核心相对独立的运行不同的任务,每个核心可能运行不同的操作系统或裸机程序,但是有一个主要核心,用来控制整个系统以及其它从核心。
SMP(对称多进程):
一个操作系统同等的管理各个内核,例如PC机。
BMP(受约束多进程):
与SMP类似,但开发者可以指定将某个任务仅在某个指定内核上执行 。
默认情况下,ZYNQ仅运行一个CPU,这里主要研究AMP模式下,即两个CPU同时运行,其中CPU0运行linux系统,CPU1运行裸机程序。
3.2.开发流程框图
![](https://i-blog.csdnimg.cn/blog_migrate/0c1ebd81a2dafedf643704b0cc4aad40.png)
四.具体开发流程
4.1.下载官方Demo源码
本文档采用官方提供的Demo进行AMP模式的开发和测试,资源链接:
https://xilinxwiki.atlassian.net/wiki/spaces/A/pages/18841653/XAPP1078+Latest+Information
下载文件:xapp1078_2014.04.zip
目录介绍:
xapp1078_2014.04---------------- design:设计所需的所有源文件
|---------------- docs:相关源文件的使用介绍
AMP开发视频讲解:https://www.youtube.com/watch?v=xoNRZ1Q_h1k
4.2.Vivado工程创建(Windows 64位环境)
4.2.1.工程创建
Vivado可使用2种方法创建用户工程:图形组件手动搭建或是采用tcl命令创建,这里通过修改Demo提供的tcl文件,创建能够在Vivado 2017.04运行的ZYNQ7z020clg400-2系列工程(注意:修改部分见文档中备注)。
![](https://i-blog.csdnimg.cn/blog_migrate/890a8e767c7a0b466fa89972ea4eb9fd.png)
4.2.2.配置ARM系统:
根据创龙核心板进行最小系统配置,配置内容包括:时钟系统、外设与引脚复用、外部DDR、PS-PL中断等部分。需要修改的部分主要有:
时钟系统:与创龙保持相同配置
DDR:与创龙保持相同配置,为512M
外设与引脚复用:与创龙保持相同配置
PS-PL中断等部分:保持Demo配置,使能fpga对cpu1的中断
![](https://i-blog.csdnimg.cn/blog_migrate/c9c6c659da4befe1ad8dd558fd4f837f.png)
4.2.3.工程编译并导出
工程创建完成后,经Vivado综合实现可生成后续使用文件:
文件名称 | 作用 | 文件位置 |
design_1_wrapper.bit | FPGA的烧写文件 | /(工程文件夹)/(工程名).runs /impl_1文件夹下 |
design_1_wrapper.hdf | 系统硬件描述文件 | /(工程文件夹)/(工程名).sdk文件夹下 |
SDK工程目录 | 包含SDK软件设计所需的源文件 | /(工程文件夹)/(工程名).sdk文件夹 |
4.3.Petalinux工程(Ubuntu 16.04环境)
Petalinux使用Vivado生成的hdf文件,进一步配置并生成linux系统相关文件:uboot、kernel和rootfs等。具体流程如下:
Step1:拷贝hdf文件:将Vivado工程下的hdf拷贝到hwdef目录下
mkdir /home/用户/Desktop/hwdef
Step2:设置Petalinux运行环境:
source <Petalinux安装目录>/settings.sh
Step3:创建Petalinux工程
cd /home/用户/Desktop
petalinux-create -t project -n plnx-project --template Zynq
Step4:导出hdf文件并配置
petalinux-config --get-hw-description=../hwdef
出现如下配置界面:
![](https://i-blog.csdnimg.cn/blog_migrate/05d751ff0d296a428f3afb79b6b38550.png)
配置系统从SD卡启动:
Linux Components Selection | [*] First Stage Bootloader:默认配置,生产FSBL文件 |
Auto Config Settings | 保持默认配置 |
Subsystem AUTO Hardware Settings | Memory Settings --->检查是否与Vivado中配置一样(0x18000000); <p style="margin-left:0cm;"><span style="color:#000000;">Serial Settings ---></span><span style="color:#000000;">系统默认为串口</span><span style="color:#000000;">1</span><span style="color:#000000;">,波特率</span><span style="color:#000000;">115200</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;">SD/SDIO Settings ---></span><span style="color:#000000;">:</span> <span style="color:#000000;">设置主</span><span style="color:#000000;">SD</span><span style="color:#000000;">为</span><span style="color:#000000;">SD0</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;">Advanced bootable images storage Settings</span><span style="color:#000000;">中:</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;">boot image settings ---></span><span style="color:#000000;">选择</span><span style="color:#000000;">SD</span><span style="color:#000000;">卡</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;">uboot-env</span><span style="color:#000000;">选择</span><span style="color:#000000;">flash </span></p>
<p style="margin-left:0cm;"><span style="color:#000000;">kernel image settings ---></span><span style="color:#000000;">选择</span><span style="color:#000000;">SD</span><span style="color:#000000;">卡</span> </p>
<p style="margin-left:0cm;"><span style="color:#000000;">jffs2 rootfs</span><span style="color:#000000;">:选择</span><span style="color:#000000;">flash</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;">dtb image</span><span style="color:#000000;">:选择</span><span style="color:#000000;">sd</span><span style="color:#000000;">卡</span> </p>
</td>
</tr><tr><td style="vertical-align:top;width:148.85pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">DTG Settings </span></p>
</td>
<td style="vertical-align:top;width:259.1pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">Kernel Bootargs</span><span style="color:#000000;">:内核启动参数</span></p>
<p style="margin-left:0cm;"><span style="color:#ff0000;">console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 mem=384M maxcpus=1</span></p>
<p style="margin-left:0cm;"><span style="color:#ff0000;">(注意:这里限制了系统使用内存为384M,剩余128M留给CPU1的裸机程序)</span></p>
</td>
</tr><tr><td style="vertical-align:top;width:148.85pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">u-boot Configuration</span></p>
</td>
<td style="vertical-align:top;width:259.1pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">保持默认配置</span></p>
</td>
</tr><tr><td style="vertical-align:top;width:148.85pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">Image Packaging Configuration</span></p>
</td>
<td style="vertical-align:top;width:259.1pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">Root filesystem type ---></span><span style="color:#000000;">选择</span><span style="color:#000000;">SD</span><span style="color:#000000;">类型</span></p>
</td>
</tr><tr><td style="vertical-align:top;width:148.85pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">Firmware Version Configuration</span></p>
</td>
<td style="vertical-align:top;width:259.1pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">固件版本控制,可修改,保持默认配置</span></p>
</td>
</tr><tr><td style="vertical-align:top;width:148.85pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">Yocto Settings</span></p>
</td>
<td style="vertical-align:top;width:259.1pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">保持默认配置</span></p>
</td>
</tr></tbody></table></div><p style="margin-left:0cm;"><span style="color:#ff0000;">Step5</span><span style="color:#4f4f4f;">:配置 u-boot</span></p>
|
petalinux-config -c u-boot
出现如下配置界面:
![](https://i-blog.csdnimg.cn/blog_migrate/8aa84a0c0007cfe366b93d710ae1fa6c.png)
进行如下配置:
Architecture select (ARM architecture) | 系统构架选择,默认ARM |
ARM architecture | 构架配置选项,保持默认配置 |
General setup | 通用配置,保持默认配置,可修改 |
Boot images | Boot镜像,保持默认配置 |
Boot timing | Boot时间,保持默认配置 |
Boot media | Boot介质,配置从SD卡启动 |
delay in seconds before automatically booting | Boot自启动时间,默认4s,可修改 |
Console | Console控制台配置,保持默认 |
Default fdt file | 默认FDT文件,无 |
Disable support for parallel NOR flash | NOR flash支持,无支持 |
add U-Boot environment variable vers | U-Boot环境变量添加,无 |
Display information about the CPU during start up | 启动阶段显示CPU信息,可选 |
Display information about the board during start up | 启动阶段显示板卡信息,可选 |
SPL / TPL | SPL / TPL支持,保持默认配置 |
Command line interface | 命令行配置,用户可进一步配置 |
Device Tree Control | 设备树控制,保持默认配置(embeded) |
Networking support | Net支持,保持默认配置 |
Device Drivers | 设备驱动,保持默认配置 |
File systems | 文件系统,保持默认配置 |
Library routines | 库程序,保持默认配置 |
Unit tests | 单元测试,保持默认配置 |
Step6:配置kernel
出现如下配置界面:
![](https://i-blog.csdnimg.cn/blog_migrate/e341282027bc1e1ad42207f5ec17ba23.png)
保持所有的默认配置并退出。
Step7:创建CPU0应用程序softuart
petalinux-create -t apps --template c --name softuart
软件会创建softUart应用程序目录并产生softuart.c文件,用官方提供的softuart.c文件将其替换,可通过配置rootfs将cpu0的应用程序直接配置进系统。
Step7:配置rootfs
出现如下配置界面:
![](https://i-blog.csdnimg.cn/blog_migrate/a95d18b705fd54953fe2c204caec6b4a.png)
进行如下配置:
Filesystem Packages | 系统扩展工具配置:可增加,如lrzsz,make等 |
apps | Xilinx提供的2个APP <p style="margin-left:0cm;"><span style="color:#000000;">[ ] gpio-Demo</span><span style="color:#000000;">:不配置</span></p>
<p style="margin-left:0cm;"><span style="color:#ff0000;">[*] peekpoke</span><span style="color:#ff0000;">:配置,用于</span><span style="color:#ff0000;">AMP</span><span style="color:#ff0000;">模式测试</span></p>
<p style="margin-left:0cm;"><span style="color:#ff0000;">[*] softuart</span><span style="color:#ff0000;">:配置,用于</span><span style="color:#ff0000;">AMP</span><span style="color:#ff0000;">模式测试</span></p>
</td>
</tr><tr><td style="vertical-align:top;width:207.4pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">user packages</span></p>
</td>
<td style="vertical-align:top;width:207.4pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">用户</span><span style="color:#000000;">app</span><span style="color:#000000;">,无</span></p>
</td>
</tr><tr><td style="vertical-align:top;width:207.4pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">PetaLinux RootFS Settings</span></p>
</td>
<td style="vertical-align:top;width:207.4pt;">
<p style="margin-left:0cm;"><span style="color:#000000;">Root password</span><span style="color:#000000;">:设置</span><span style="color:#000000;">root</span><span style="color:#000000;">用户密码,默认为</span><span style="color:#000000;">root</span></p>
</td>
</tr></tbody></table></div><p style="margin-left:0cm;"><span style="color:#ff0000;">Step8</span><span style="color:#ff0000;">:</span>编译工程并生成系统文件</p>
|
petalinux-build
工程编译完成后,产生的所有可执行文件均在/工程目录/image/linux下:
![](https://i-blog.csdnimg.cn/blog_migrate/947bc2c50cc48687d13b54315eed24b1.png)
4.4.SDK工程(Windows 64位环境)
通过Vivado打开SDK(不要独立打开),在SDK中设计CPU0和CPU1的应用程序:
- app_cpu1.elf:CPU1裸机程序,与CPU0进行通信且接受FPGA的中断信号
- softUart.elf:CPU0应用程序,与CPU1进行通信,并产生FPGA中断(已通过Petalinux设计)
4.4.1.CPU1程序(app_cpu1.elf)创建:
Step0:Xilinx Tools-->Repositories-->New //导入sdk_repo(重要,包必须正确)
Step1:File-->New-->Board Support Package //生成bsp
如下显示中出现:“standalone”,说明sdk_repo导入生效
![](https://i-blog.csdnimg.cn/blog_migrate/e092118525646bdbc1b05e9491ed84f9.png)
在编译选项中增加:-g -DUSE_AMP=1 -DSTDOUT_REDIR=1
![](https://i-blog.csdnimg.cn/blog_migrate/d80b3f493972717b088c0c69920b51b2.png)
Step2:File-->New-->Application Project //生成cpu1的app程序
![](https://i-blog.csdnimg.cn/blog_migrate/a9f83cb71a2b1b4d4d769183389aefa1.png)
Step3:Next-->Empty Application
Step4:app_cpu1-->sr+右键-->Import //导入官方cpu1的app源文件
![](https://i-blog.csdnimg.cn/blog_migrate/cf9674d789be4402ff0ffa6a6566a987.png)
查看lscript.ld文件:512M外部DDR时的CPU1应用程序链接地址配置。
Step5:SDK自动生成可执行文件app_cpu1.elf
![](https://i-blog.csdnimg.cn/blog_migrate/c7c777a377d0af056133bc28efaa759f.png)
4.4.2.softUart.elf创建(使用petalinux更方便):
Step1:File-->New-->Application Project
![](https://i-blog.csdnimg.cn/blog_migrate/f268b32b1180b7479d5ed0194468cf1c.png)
Step2:点击Next-选中空的应用
![](https://i-blog.csdnimg.cn/blog_migrate/2a5f7dd10663e3589982b09625203994.png)
Step3:softUart -->src右键-->Import:导入softUart.c文件
Step4:SDK自动生成可执行文件softUart.elf
4.5.生成SD卡下载文件(Windows 64位环境)
使用SD卡启动系统时,需要如下的相应下载文件:
文件名 | 文件功能 | 来源 |
BOOT.bin | 由如下文件合并而成: <p style="margin-left:0cm;">Zynq_fsbl.elf:fsbl启动文件</p>
<p style="margin-left:0cm;">system.bit:fpga烧写文件</p>
<p style="margin-left:0cm;">u-boot.elf:u-boot文件</p>
<p style="margin-left:0cm;">app_cpu1.elf:cpu1裸机程序</p>
</td>
<td style="vertical-align:top;width:145.7pt;">
<p style="margin-left:0cm;">Zynq_fsbl.elf: petalinux</p>
<p style="margin-left:0cm;">system.bit:Vivado</p>
<p style="margin-left:0cm;">u-boot.elf:petalinux</p>
<p style="margin-left:0cm;">app_cpu1.elf:SDK</p>
</td>
</tr><tr><td style="vertical-align:top;width:120.25pt;">
<p style="margin-left:0cm;">devicetree.dtb</p>
</td>
<td style="vertical-align:top;width:148.85pt;">
<p style="margin-left:0cm;">设备树文件</p>
</td>
<td style="vertical-align:top;width:145.7pt;">
<p style="margin-left:0cm;">petalinux</p>
</td>
</tr><tr><td style="vertical-align:top;width:120.25pt;">
<p style="margin-left:0cm;">zImage</p>
</td>
<td style="vertical-align:top;width:148.85pt;">
<p style="margin-left:0cm;">内核文件</p>
</td>
<td style="vertical-align:top;width:145.7pt;">
<p style="margin-left:0cm;">petalinux</p>
</td>
</tr><tr><td style="vertical-align:top;width:120.25pt;">
<p style="margin-left:0cm;">rootfs</p>
</td>
<td style="vertical-align:top;width:148.85pt;">
<p style="margin-left:0cm;">根文件系统</p>
</td>
<td style="vertical-align:top;width:145.7pt;">
<p style="margin-left:0cm;">petalinux</p>
</td>
</tr></tbody></table></div><p style="margin-left:0cm;">上述文件中,需要使用SDK生成BOOT.bin文件,生成步骤如下:</p>
|
Step1:将Zynq_fsbl.elf、system.bit 、u-boot.elf 和app_cpu1.elf拷贝到如下目录:Demo目录\design\src\bootgen
Step2:用记事本打开bootimage.bif,将合并文件的名称进行修改,已匹配上述文件。
Step2:打开Vivado -->launch SDK //通过Vivado打开SDK
Step3:SDK -->xilinx-->launch shell //打开命令行界面,并用cd命令切换到bootgen目录
Step4:执行createBoot.bat即可生成BOOT.BIN文件
![](https://i-blog.csdnimg.cn/blog_migrate/38bb72928722ba83faad5ec219275ef8.png)
五.SD卡启动配置
1.SD 系统启动卡说明
SD 卡启动是开发板系统启动方式的一种。SD 系统启动卡共有 FAT32、EXT4 两个格
式分区。其中 FAT32 格式分区在 Windows 系统下可见,EXT4 格式分区在 Windows 系统
下不可见,两分区在 Linux 系统下均可见。FAT32 格式分区存放 Bootloader、内核、设备
树、PL 端 bit 文件等,EXT4 格式分区存放文件系统。
开发板出厂时已经提供一个正常使用的 Linux SD 系统启动卡。以下步骤是 Linux SD
系统启动卡的制作过程。
2.SD系统启动卡制作步骤
详见《3-1-Linux SD系统启动卡制作方法.pdf》。
六.板卡双核系统验证
6.1.poke和peek命令
poke命令:向指定地址写入数值data
格式:poke data address
Peek命令:读取指定地址的内容
格式:peek address
6.2. 板卡验证
(1)拷贝文件到SD卡
第一分区:BOOT.bin、devicetree.dtb和zImage
第二分区:rootfs文件系统
(2)连接开发板和配置好串口设置,波特率:115200
(3)进去linux系统:root用户登录,密码:root
操作如下:
#poke 0xfffffff0 0x18000000 //启动cpu1(cpu1启动原理参看ug585)
#peek 0xffff8000 //查看cpu1的heart beat变量值,每秒加1
#softuart & //后台运行cpu0的应用程序
#poke 0x78600000 0x00000001 //cpu0向控制fpga向cpu1发起中断
![](https://i-blog.csdnimg.cn/blog_migrate/82b530d2eb6d846c9b15ae15c88abc83.png)
如上图,双核进行正常通信且cpu1完成对fpga的中断响应,Zynq的AMP模式验证完毕!
附录
1. Zynq的AMP模式开发主要有如下参考文档:《xilinx官方参考文档》
2.Vivado、SDK和Petalinux软件安装:《xilinx软件安装说明》
3. Petalinux的uboot、kernel和rootfs配置详解:《Petalinux的配置界面详解.vsd》
4. linux系统启动SD卡制作说明:《3-1-Linux SD系统启动卡制作方法.pdf》
5. 官方Demo的使用说明:《xapp1078_2014.04\docs\Vivado instructions.txt》
6. 官方Demo文件:《xapp1078_2014.04.zip》