完整Petalinux工程实践!
目录
前言
一、ZYNQ启动流程
二、Petalinux常用命令介绍
三、搭建Petalinux工程
3.1 Vivado 创建硬件平台
3.2 创建 petalinux 工程
3.2.1 设置 Petalinux 运行环境
3.2.2 创建 petalinux 工程
3.2.3 petalinux 工程中导入xsa 文件并配置
3.2.4 配置 Linux 内核
3.2.5 配置 Linux 根文件系统
3.2.6 配置设备树文件
3.2.7 编译Petalinux工程
3.2.8 打包BOOT.BIN
四、制作 SD 启动卡
五、进入 Linux 系统
总结
前言
本文介绍了一整套Petalinux工程搭建的流程,本文使用的Vivado环境为2020.2;Ubuntu环境为18.04;Petalinux环境为2020.2;搭建工程以zynq-7000系列的XC7Z020芯片为例。这里搭建一个ZYNQ嵌入式最小系统,从硬件配置到Petalinux系统工程的搭建。从理论到实战,逐步分析,层层递进!
一、ZYNQ启动流程
在使用Petalinux创建工程前先了解一下ZYNQ启动流程,ZYNQ启动有三个阶段:
- Stage 0 (BootROM: BootROM Header)
- Stage 1 (FSBL / User code)
- Stage 2 (U-Boot / System / Application)
以下为官方文档的介绍:
为了方便理解,这里借用正点原子的流程图来分析:
Stage 0:BootROM:Boot是引导;ROM是只读内存,也就是BootROM中有一段只读的引导代码,代码用于SD卡等外设初始化;读取引脚配置;最后加载镜像到OCM,OCM是片上内存,这里主要是起一个引导加载的作用,引导加载程序(FSBL)引导代码到OCM中。引导加载过后Stage 0结束,开始Stage 1阶段。这里注意,在Stage 0阶段不对PL进行任何操作。
Stage 1:控制权到FSBL时,主要先进行PS的初始化;再加载PL配置文件,也就是bit文件;然后加载SSBL或裸机程序,这里需要看实际情况是跑操作系统还是跑裸机程序。
- 跑操作系统加载SSBL,加载过后会跳转执行SSBL,进入Stage 2阶段,这时控制权就转交SSBL。
- 跑裸机程序加载裸机程序后就会只执行裸机程序,不会进入Stage 2阶段。
Stage 2:通过SSBL加载操作系统到DDR,其中U-Boot是通用引导加载程序,U-Boot来负责加载Linux操作系统。
二、Petalinux常用命令介绍
先来介绍下Petalinux工程设计的命令,PetaLinux 工具遵循顺序化的处理流程,以下是官方文档的内容:
这里按表格的顺序,也是Petalinux中创建工程的顺序:
本文举例介绍的Petalinux设计流程如下:
1. 通过 Vivado 创建硬件平台,得到 xsa 文件;
2. 运行 source 安装路径>/settings.sh,设置 Petalinux 运行环境
3. 通过 petalinux-create -t project 创建 petalinux 工程;
4. 使用 petalinux-config --get-hw-description,将 xsa 文件导入到 petalinux 工程当中并配置 petalinux 工程;
5. 使用 petalinux-config -c kernel 配置 Linux 内核;
6. 使用 petalinux-config -c rootfs 配置 Linux 根文件系统;
7. 配置设备树文件;
8. 使用 petalinux-build 编译整个工程;
9. 使用 petalinux-package --boot 制作 BOOT.BIN 启动文件;
10. 制作 SD 启动卡,将 BOOT.BIN 和 image.ub 以及根文件系统部署到 SD 卡中;
11. 将 SD 卡插入开发板,并将开发板启动模式设置为从 SD 卡启动;
12. 开发板连接串口线并上电启动,串口上位机打印启动信息,登录进入 Linux 系统。
三、搭建Petalinux工程
理论部分介绍完,下面从Vivado 开始,来完整创建一个实际的工程!
3.1 Vivado 创建硬件平台
本文使用的Vivado环境为2020.2,搭建工程以zynq-7000系列的XC7Z020芯片为例。这里搭建一个ZYNQ嵌入式最小系统,主要用来演示Petalinux系统工程的搭建。
打开Vivado,
创建一个工程
点击Next
选择好合适的位置来存放工程。
点击Next
一直点击Next
选择对应的芯片型号。
点击Finish,Vivado开始创建工程。
这里先搭建bd
在Design中点击 + 号,添加IP核:
这里对于ZYNQ最小系统的配置可以参考之前博客ZYNQ嵌入式最小系统配置:ZYNQ7000与ZYNQMP系列_zynq最小系统-CSDN博客
这里仅展示部分配置参数:
配置完成后,点击Run Block Automation
勾选好选项,点击OK
验证搭建的Block Design
验证成功
完成综合:
综合成功后导出硬件文件。
硬件文件导出成功后得到xsa
接下来就可以将xsa文件导入到Petalinux里创建系统工程了!
3.2 创建 petalinux 工程
3.2.1 设置 Petalinux 运行环境
在正式使用 petalinux 工具之前,需要先设置petalinux的作环境
source /opt/pkg/petalinux/2020.2/settings.sh运行如图所示:
3.2.2 创建 petalinux 工程
创建一个名为Zynq_7020的Petalinux工程:
输入以下指令:
petalinux-create -t project --template zynq -n Zynq_7020- -t是“--type”的简写;
- template参数表明创建的petalinux工程使用的平台模板;
- zynq表明使用 的是 zynq平台模板的petalinux工程,用于zynq-7000 系列的芯片。而 Zynq UltraScale+MPSoC 系列的芯片就需要变为zynqMP 表明使用的是 zynqMP SoC 平台模板的 petalinux 工程。
- name参数(此处简写为“-n”)后接的 是 petalinux工程名
运行如图所示:
在指定文件路径下就创建了一个工程文件:
3.2.3 petalinux 工程中导入xsa 文件并配置
先将硬件文件导入工程文件夹中:
首次配置 Petalinux工程是将xsa文件导入到Petalinux工程中,Petalinux工具会解析xsa文件并弹出配置窗口。
输入以下指令:
petalinux-config --get-hw-description ./hardware/design_1_wrapper.xsa运行如图所示:
弹出petalinux图形化配置窗口,可根据实际工程进行配置:
完成petalinux工程的配置后,会回到终端:
3.2.4 配置 Linux 内核
输入以下指令:
petalinux-config -c kernel运行如图所示:
会弹出Linux内核的图形化配置界面:
根据实际工程配置完成后会回到终端:
3.2.5 配置 Linux 根文件系统
输入以下指令:
petalinux-config -c rootfs运行如图所示:
会弹出根文件系统的图形化配置界面:
根据实际工程配置完成后会回到终端:
3.2.6 配置设备树文件
在工程路径下:工程名/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi 找到system-user.dtsi 设备树文件,进行编辑,应对Vivado工程中的PS配置,可以添加相匹配的外设:
code /home/echo/Petalinux/Zynq_7020/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi3.2.7 编译Petalinux工程
输入以下指令:
petalinux-build运行如图所示:
3.2.8 打包BOOT.BIN
输入以下指令:
petalinux-package --boot --fpga --u-boot --fsbl指令中
- “petalinux-package --boot”命令生成可引导映像,该映像可直接与Zynq系列设备(包括Zynq-7000和Zynq UltraScale + MPSoC)或基于MicroBlaze的FPGA设计一起使用。
- “--fsbl”用于指定fsbl文件所在位置,后面接文件对应的路径信息,如果不指定文件位置,默认对应的是 images/linux/zynq_fsbl.elf;
- “--fpga”用于指定bitstream文件所在位置,后面接该文件对应的路径信息,默认对应的是 images/linux/system.bit;
- “--u-boot”用于指定U-Boot文件所在位置,后面接该文件所在路径信息,默认为 images/linux/u-boot.elf。
运行如图所示:
进入Petalinux工程的images/linux目录下可以看到打包生成的文件:
四、制作 SD 启动卡
这里推荐一个工具,可以使用图形化的界面对SD卡进行分区,简单的方法实现和指令分区一样的效果。
在Ubuntu中安装下图所示软件:
分区配置参数:
点击√
点击Apply
分区完成后:
点击Close
打开文件夹,可以发现分区好的BOOT目录和rootfs目录:
SD卡分区完成后们将该工程image/linux目录下的BOOT.BIN、boot.scr和image.ub文件拷贝到BOOT分区:
输入以下指令:
cp BOOT.BIN image.ub boot.scr /media/echo/BOOT/运行结果如图:
将该工程 image/linux目录下的系统根文件解压到rootfs分区:
输入以下指令:
sudo tar -zxvf rootfs.tar.gz -C /media/echo/rootfs/运行结果如图:
打开BOOT文件夹,可以看到:
打开rootfs文件夹可以看到:
五、进入 Linux 系统
板卡插入SD卡,连接好串口,打开串口工具,这里需注意将板卡的启动模式开关调整为SD卡启动。上电后串口中会有如下打印信息:
输入用户名:root
密码也是默认密码:root
就可以进入板卡的Linux系统中了。
总结
以上就是今天要讲的内容,本文介绍如何搭建一整套Petalinux工程。