一,基本开发流程
1,软件平台:Windows 64位环境下,Vivado 2017.04版本+SDK 2017.04版本,Linux环境下(Ubuntu 16.04),Petalinux 2017.04版本,ZYNQ7z10clg400-1
2,AMP模式:从软件的角度来看,多核处理器的运行模式有三种:
(1)AMP(非对称多进程):
多个核心相对独立的运行不同的任务,每个核心可能运行不同的操作系统或裸机程序,但是有一个主要核心,用来控制整个系统以及其它从核心。
(2)SMP(对称多进程):
一个操作系统同等的管理各个内核,例如PC机。
(3)BMP(受约束多进程):
与SMP类似,但开发者可以指定将某个任务仅在某个指定内核上执行 。
默认情况下,ZYNQ仅运行一个CPU,这里主要研究AMP模式下,即两个CPU同时运行,其中CPU0运行linux系统,CPU1运行裸机程
3,开发流程框图
4,资源下载:
下载官方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
5,环境搭建:
二,Vivado工程创建
1,Vivado可使用2种方法创建用户工程:图形组件手动搭建或是采用tcl命令创建,这里通过修改Demo提供的tcl文件,创建能够在Vivado 2017.04运行的ZYNQ7z020clg400-2系列工程(注意:修改部分见文档中备注)。
2,vivado配置:
3,外设地址:
4,配置ARM系统:
根据创龙核心板进行最小系统配置,配置内容包括:时钟系统、外设与引脚复用、外部DDR、PS-PL中断等部分。需要修改的部分主要有:
PS-PL中断等部分:保持Demo配置,使能fpga对cpu1的中断
5,工程编译并导出
文件名称 |
作用 |
文件位置 |
design_1_wrapper.bit |
FPGA的烧写文件 |
/(工程文件夹)/(工程名).runs /impl_1文件夹下 |
design_1_wrapper.hdf |
系统硬件描述文件 |
/(工程文件夹)/(工程名).sdk文件夹下 |
SDK工程目录 |
包含SDK软件设计所需的源文件 |
/(工程文件夹)/(工程名).sdk文件夹 |
三,软件原理:
1,AMP
2,双linux
3,CPU启动
四,Ubuntu 16.04环境下Petalinux工程编译
1,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
出现如下配置界面:
配置系统从SD卡启动:
Linux Components Selection |
[*] First Stage Bootloader:默认配置,生产FSBL文件 |
Auto Config Settings |
保持默认配置 |
Subsystem AUTO Hardware Settings |
Memory Settings --->检查是否与Vivado中配置一样(0x18000000); Serial Settings --->系统默认为串口1,波特率115200 SD/SDIO Settings --->: 设置主SD为SD0 Advanced bootable images storage Settings中: boot image settings --->选择SD卡 uboot-env选择flash kernel image settings --->选择SD卡 jffs2 rootfs:选择flash dtb image:选择sd卡 |
DTG Settings |
Kernel Bootargs:内核启动参数 console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 mem=384M maxcpus=1 |
u-boot Configuration |
保持默认配置 |
Image Packaging Configuration |
Root filesystem type --->选择SD类型 |
Firmware Version Configuration |
固件版本控制,可修改,保持默认配置 |
Yocto Settings |
保持默认配置 |
Step5:配置 u-boot
petalinux-config -c u-boot
出现如下配置界面:
进行如下配置:
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
出现如下配置界面:
保持所有的默认配置并退出。
Step7:创建CPU0应用程序softuart
petalinux-create -t apps --template c --name softuart
软件会创建softUart应用程序目录并产生softuart.c文件,用官方提供的softuart.c文件将其替换,可通过配置rootfs将cpu0的应用程序直接配置进系统。
Step7:配置rootfs
出现如下配置界面:
进行如下配置:
Filesystem Packages |
系统扩展工具配置:可增加,如lrzsz,make等 |
apps |
Xilinx提供的2个APP [ ] gpio-Demo:不配置 [*] peekpoke:配置,用于AMP模式测试 [*] softuart:配置,用于AMP模式测试 |
user packages |
用户app,无 |
PetaLinux RootFS Settings |
Root password:设置root用户密码,默认为root |
Step8:编译工程并生成系统文件
petalinux-build
工程编译完成后,产生的所有可执行文件均在/工程目录/image/linux下:
2,SDK工程(Windows 64位环境)
通过Vivado打开SDK(不要独立打开),在SDK中设计CPU0和CPU1的应用程序:
- app_cpu1.elf:CPU1裸机程序,与CPU0进行通信且接受FPGA的中断信号
- softUart.elf:CPU0应用程序,与CPU1进行通信,并产生FPGA中断(已通过Petalinux设计)
2.1.CPU1程序(app_cpu1.elf)创建:
Step0:Xilinx Tools-->Repositories-->New //导入sdk_repo(重要,包必须正确)
Step1:File-->New-->Board Support Package //生成bsp
如下显示中出现:“standalone”,说明sdk_repo导入生效
在编译选项中增加:-g -DUSE_AMP=1 -DSTDOUT_REDIR=1
Step2:File-->New-->Application Project //生成cpu1的app程序:
Step3:Next-->Empty Application
Step4:app_cpu1-->sr+右键-->Import //导入官方cpu1的app源文件:
查看lscript.ld文件:512M外部DDR时的CPU1应用程序链接地址配置
Step5:SDK自动生成可执行文件app_cpu1.elf
2.2.softUart.elf创建(使用petalinux更方便):
Step1:File-->New-->Application Project
Step2:点击Next-选中空的应用
Step3:softUart -->src右键-->Import:导入softUart.c文件
Step4:SDK自动生成可执行文件softUart.elf
2.3.生成SD卡下载文件(Windows 64位环境)
使用SD卡启动系统时,需要如下的相应下载文件:
文件名 |
文件功能 |
来源 |
BOOT.bin |
由如下文件合并而成: Zynq_fsbl.elf:fsbl启动文件 system.bit:fpga烧写文件 u-boot.elf:u-boot文件 app_cpu1.elf:cpu1裸机程序 |
Zynq_fsbl.elf: petalinux system.bit:Vivado u-boot.elf:petalinux app_cpu1.elf:SDK |
devicetree.dtb |
设备树文件 |
petalinux |
zImage |
内核文件 |
petalinux |
rootfs |
根文件系统 |
petalinux |
上述文件中,需要使用SDK生成BOOT.bin文件,生成步骤如下:
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文件