本文将初尝试 跑一遍Petalinux 制作zynq的 linux启动镜像,以此来熟悉zynq的linux开发流程。
PS本文仅适用于 Smart ZYNQ板, 如是Tiny ZYNQ的用户,请看对应的资料
我对linux的开发也只停留在十年前韦东山的阶段,所以很多东西也是 网上现学现卖的, 所以 资料会尽量做的详细,这样下次自己忘记了 也可以回过头来再看看
本节因为只是为了熟悉开发流程,所以功能会做的尽量简单, linux部分 只保留uart命令提示行的功能,来查看系统是否正常启动了。
以下是开发的完整图文过程:(程序都是在 2018.3版本下 进行的,其他版本请自行测试)
Vivado 部分的工程创建(Vivado 创建过程和之前uart 工程的一致,可以选择性对的跳看)
1)打开Vivado 新建一个项目, 新建一个VIVADO 工程,打开软件 选中Create Project, 如下图所示
![](http://www.hellofpga.com/wp-content/uploads/2021/07/Create-Project.png)
2)点击NEXT ,在出现的第二个对话框“Project name”中输入工程名;在“Project location”中选择保存路径;勾选“Create project subdirectory”(默认),最后点击“Next” 备注,所有的路径均不能出现中文名称
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-20.png)
3)点击 RTL PROJECT 选项,点击NEXT
![](http://www.hellofpga.com/wp-content/uploads/2021/07/image.png)
4) 第四步Add Sources 选项直接留空,NEXT
5)第五步Add Constraints 选项直接留空,NEXT
6)选择芯片型号 (板子生产了多个芯片型号,请根据自己板子的型号来进行选择,下图以XA7Z020来进行演示,其余型号自行选择,必须要按照实际型号去填写)
- XA7Z020 (直接选择xc7z020CLG400-1,因为系统识别到的是xc7z020-1)
- XC7Z010-1 (xc7z010CLG400-1) (7010 芯片)
- XC7Z020-1 (xc7z020CLG400-1) 后续生产
- XC7Z020-2 (xc7z020CLG400-2) 后续生产
备注 (7020 车规级版在vivado2018.3识别出的是xc7z020,如果工程选择xa7z020 ,在SDK环境下有时候会弹出警告,所以这里直接选择Xc7z020CLG400-1)
![](http://www.hellofpga.com/wp-content/uploads/2021/07/image-1.png)
7)确认所选信息 点击“Finish”,完成vivado的工程创建
![](http://www.hellofpga.com/wp-content/uploads/2021/07/image-4.png)
之后 工程就新建好了, vivado 进入到开发界面
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-172-1024x738.png)
Block Design 部分创建
此处需要创建一个ZYNQ CORE ,并在ZYNQ CORE中设置DDR 以及UART等参数
UART此处用 EMIO方式连接(Tiny FPGA 以及 EBAZ4205转接板都用EMIO的方式连接)
1)创建一个BLOCK设计
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-173.png)
2)搜索并添加ZYNQ7 Processing System,添加ZYNQ7 PROCESSING SYSTEM模块
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-174.png)
3)软件自动生成了一个 zynq的block 如下图所示,接下来要做一些相应的设置,双击下图中的ZYNQ核
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-175.png)
4)在zynq中设置DDR功能:
依次在弹窗里找到DDR Configuration→DDR Controller Configuration→DDR3,在Memory Part下拉菜单中根据自己板子上的DDR来选择相应的DDR3,本实验所用到型号:MT41K256M16RE-125,数据位宽选择16bit 最后点击“OK”,如下图所示。
![](http://www.hellofpga.com/wp-content/uploads/2023/01/image-70.png)
5) 添加 uart功能
由下图可知, 主板的UART功能接在 ZYNQ PS端的 B13脚和B9脚了,即 ZYNQ的TX是 连接MIO51,ZYNQ的RX是连接MIO50
![](http://www.hellofpga.com/wp-content/uploads/2023/01/image-79.png)
使能UART 0 并在IO选项力 选择MIO方式,下拉菜单里选择MIO50-51
![](http://www.hellofpga.com/wp-content/uploads/2023/01/image-80.png)
6). 在block design 的设置界面 使能QSPI的功能 如下图所示(当QSPI 时钟大于40MHZ的时候 就需要勾选Feedback clk)
![](http://www.hellofpga.com/wp-content/uploads/2022/10/image-56.png)
7)随后点OK 保存修改, 点击“Run Block Automation”如下图所示。在弹出的选项中保持默认,点击“OK”,即可完成对ZYNQ7 Processing System的配置
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-178.png)
8)用鼠标连接FCLK_CLK和 M_AXI_GP0_ACLK,得到下图
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-21.png)
9)source→Design Source ,右键我们创建的BLOCK工程,点击create HDL wrapper,打包BLOCK文件并生成.v代码
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-179.png)
在弹出的菜单里直接点选OK
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-22.png)
10) 点击绿色箭头RUN 对代码进行编译
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-180.png)
11) 因为这边用的是原生MIO 资源,并且没有使用任何PL的IO口,所以这边不需要额外创建管脚约束
12) 生成bit文件 :按下Generate Bitstream 完成综合以及生成bit文件,等待弹出综合完成的窗口
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-18.png)
13)File→Export→Export hardware…在弹出的对话框中勾选“include bitstream”,点击“OK”确认,如下图所示。
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-20.png)
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-24.png)
14)File→Lauch SDK,在弹出的对话框中,保存默认,点击“OK”,如下图所示。
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-21.png)
系统将自动打开SDK开发环境
![](http://www.hellofpga.com/wp-content/uploads/2021/08/image-22.png)
其中SDK工程下的 下图hdf文件就是我们需要的系统硬件描述文件,这个需要交给petalinux 进行交叉编译用。
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-181.png)
PetaLinux 工程创建
1)打开虚拟机下的 Ubuntu系统,打开命令行
输入 source /opt/pkg/petalinux/2018.3/settings.sh 对Petalinux 的环境进行加载
source /opt/pkg/petalinux/2018.3/settings.sh
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-189.png)
2)在Ubuntu下创建工程目录(两种方式 a 命令行,或者 b 图形界面 可二选一)
a 用mkdir 命令创建一个文件夹(普通用户 非root用户)
mkdir Petalinux
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-182.png)
b 其实这个文件夹就被创建在 普通用户(这里是user)的home文件夹下 ,图形界面打开home可以直接找到(这里也可以在Home 文件夹图形界面下直接右键新建一个Petalinux 效果一样)
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-183.png)
3) 创建Petalinux 工程
在工程文件夹的空白处 右键,然后点选Open in Terminal 打开终端命令行(这种方式打开命令行会自动定位到当前文件夹),当然也可以普通方式打开终端 ,再用CD的方式定位到此文件夹
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-188.png)
(备注 如果用此方法,必须重新在这个新打开的命令行中对petalinux 开发环境进行预加载,否则后面会失败,每次打开新的命令行都需要执行这个命令)
source /opt/pkg/petalinux/2018.3/settings.sh
在命令行输入
petalinux-create --type project --template zynq --name Petalinux_qspi_flash
按下回车后 名为Petalinux_qspi_flash的工程会被创建,并且刚才的文件夹下多了一个对应的工程文件夹
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-190-1024x356.png)
为了方便以后的工程管理,我们将刚才生成的system.hdf 也拖到Petalinux_qspi_flash文件夹中
4) 复制hdf文件到刚才创建的工程文件夹中
在图形界面下双击打开这个Petalinux 文件夹
打开刚才SDK的软件界面, 右键hdf文件,选择copy 复制
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-184.png)
然后在图形界面打开 Ubuntu 的Petalinux 文件夹下的Petalinux_qspi_flash文件夹内, 右键空白处 点选Paste (粘贴)
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-191.png)
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-192.png)
5)设置路径并启动Petalinux 配置页
在刚才的界面下先CD进入 工程文件夹(Petalinux_qspi_flash) 备注(CD 的时候 可以输入文件夹的第一个字母然后按tab键,这样相同名称的文件夹就会跳出来)
cd Petalinux_qspi_flash
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-194.png)
进入文件夹后,按下下列代码, 指定导入hdf的路径(因为是当前命令行的路径所以这里 带一个”.”就可以了,不然=号后跟具体路径) 并按下回车
petalinux-config --get-hw-description=.
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-195.png)
之后系统将启动配置页
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-196.png)
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-197.png)
6) 对Petalinux 进行配置
a) 修改启动项
用键盘上的上下左右键移动光标,选择Subsystem AUTO Hardware Settings 按下回车(按两下ESC可以退回上一层)
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-198.png)
选择Advanced bootable images storage Settings ,按下回车
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-199.png)
选择 boot image settings选项 回车
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-200.png)
选择 image storage media 回车
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-201.png)
选择 primary flash并按回车
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-202.png)
之后连按两次ESC 可以返回上一级, 一直返回,直到回到最初的初始界面
然后用同样的方式 将 Subsystem AUTO Hardware Settings–>Advanced bootable images storage Settings–> kernel image settings –>image storage media 也修改成 primary flash 并回车
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-23.png)
b )分配flash 的空间大小
选择Subsystem AUTO Hardware Settings 按下回车
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-203.png)
选择Flash Settings 设置分配flash 的空间大小
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-204.png)
里面可以设置boot 的大小 kernal的大小以及env的大小,一般默认即可(当设置的flash大小超过了硬件flash 的大小,这个时候就需要进行大小的调整了)
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-205.png)
之后用双击ESC的方式回到初始菜单
c) root 文件系统 类型选择
选择Image Packaging Configuration
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-206.png)
选择 Root filesystem type
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-207.png)
选择 INITRAMFS
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-208.png)
之后按多次ESC回到根菜单
e)保存设置 选择save 并点选ok 对设置进行保存
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-209.png)
f )退出 设置界面
主菜单选择EXIT 退出
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-211.png)
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-210.png)
之后 系统进行配置 ,此时等待配置结束
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-212.png)
g ) 编译整个工程
petalinux-build
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-213.png)
之后系统就开始编译了 ,需要等很久 视机器性能而定
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-214.png)
直接到出现提示 successfully built project 代表编译完成了
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-215.png)
h) 打包boot.bin
编译完成后,项目工程文件夹下会有image文件夹,执行petalinux -package 命令 将zynq_fsbl.elf, system_wrapper.bit,u-boot.elf,image.ub 四个文件打包生成
BOOT.bin 文件
petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --u-boot --fpga --kernel --force
如下图所示,代表打包完成(有警告,直接忽略)
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-230.png)
QSPI FLASH 程序固化
在Ubuntu 系统内 打开 工程文件夹内 编译生成的image文件夹
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-217.png)
再打开linux 文件夹
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-219.png)
复制这4个文件 BOOT.bin、u-boot.elf、 zynq_fsbl.elf、 image.ub
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-218-1024x281.png)
然后回到windows 下,粘贴到我们之前创建的Vivado 工程的images(临时创建)文件夹中
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-25.png)
回到SDK界面 点选Program Flash
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-221.png)
Image File 选择工程工程目录下的 BOOT.bin, FSBL File 选择工程目录下 的zynq_fsbl.elf Flash Type 选择qspi-x4-single 然后将板子拨码开关调整到JTAG模式,并重新上电,之后再点击PROGRAM 开始下载(必须在JTAG模式下,拨码开关调整到JTAG 模式 并且重启板子或按下POR RST按键重启)
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-28.png)
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-27.png)
再点击Program 选项
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-29.png)
之后系统开始烧录固件到FLASH里
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-227.png)
等待进度条消失,并且提示Successful的时候代表固化成功了
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-229.png)
上电测试
将跳线位置换回到QSPI上
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-30.png)
备注 实际测试过程中会发现 虚拟机 和windows 争抢串口的资源的情况,导致windows 下 无法访问串口,所以这里测试的时候(把串口默认设置连接到windows ) 或者临时挂起虚拟机
![](http://www.hellofpga.com/wp-content/uploads/2022/12/image-99.png)
设置成Qspi 启动后重新上电后,打开串口助手,波特率设置成115200 ,之后我们就能看到linux 发出来的命令行了(这里也可以用 SDK 自带的Terminal 功能,如下图打开,串口号根据实际的选择,备注:部分JTAG下载器带串口功能,选择串口根据实际用的哪路串口去选择
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-238.png)
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-239.png)
系统此时停留在等待输入账号密码的状态, 此时输入用户名 root 输入密码 root (不同的串口助手有些需要带回车)
之后就正式登录 petalinux 了
![](http://www.hellofpga.com/wp-content/uploads/2022/11/image-240.png)
之后就可以进行linux 的操作了 ,以上就是完整的zynq linux 开发简易流程
另外备注 一般linux 的命令行远程调试习惯上用 putty这样的专业工具替代串口助手(这样诸如CTRL+C这样的指令就可以用键盘的形式直接发送了,putty官网可以免费下载到)
打开后配置界面如下 模式选择serial ,并设置好串口号(查看设备管理器得到) 和波特率115200就行
![](http://www.hellofpga.com/wp-content/uploads/2023/02/1UN88AEMMOLWOXKZM0.png)
![](http://www.hellofpga.com/wp-content/uploads/2023/02/image-31.png)
(因为我linux 也不是特别熟,所以暂时写到这里,大家其他功能自行研究 ),等我慢慢摸透了 再更新更多内容
以下是 VIVADO 的工程 (里面的image文件夹 里面是 Ubuntu 下编译的镜像文件可以直接固化到FLASH查看结果,用户名 root 输入密码 root )