首页 > 系统相关 >Vivado+Petalinux驱动开发流程

Vivado+Petalinux驱动开发流程

时间:2024-10-17 09:48:46浏览次数:7  
标签:文件 petalinux 启动 -- 流程 boot Vivado git Petalinux

该流程中使用的软硬件环境如下:

  • Windows 11 (pro) + Vivado 2022.2 + Vitis 2022.2

  • Ubuntu 20.04 + Petalinux 2022.2

  • git

  1. 简介

系统开发过程中计划使用nanomsg作为上下位机通讯接口,nanomsg需要运行在linux系统上,所以在开发过程中引入ZYNQ linux开发流程,其中包括Petalinux的安装与使用。Petalionux运行在Ubuntu20.04版本的服务器上,本地开发FPGA使用的Vivado运行在Windows 11,同时涉及到本地对ZYNQ硬件的烧写、多人合作等需求。为满足这些开发需求,搭建了一套通用pipeline,方便之后开发进行。


  1. 修订历史

修订日期 修订内容 执行人
20.02.2023 初始版本;基于Vivado 2018.3 ldy
22.02.2023 更新基于Vivado 2022.2 Ubuntu 20.04 ldy

  1. 软件安装

安装流程:

  • 从官网获取Vivado 2022.2 windows版本,选择vitis产品安装

  • 从官网获取petalinux 2022.2 Linux版本,服务器已安装

注意事项:

  • Ubuntu 20.04开始,对python版本的管理进行了更改,dpkg queue中不再维护python,而是分别用python2和python3进行两个大版本python的更新,这导致所有不支持Ubuntu 20.04版本的petalinux的安装和使用变得十分麻烦,因为petalinux使用dpkg queue来进行依赖包检测,报错提示检测不到python。所以对Ubuntu 20.04及以上版本建议使用petalinux 2021.1及以上版本

  • petalinux版本必须与Vivado版本一致,否则之后使用会有各种未知报错

  • Xilinx公司自2020年3月后新版本vivado更新后,用独立的Vitis替代了原来的Xilinx SDK。这使得老版本的hdf等文件无法在新版本的petalinux中使用,新数据格式为XSA。

  1. Petalinux 配置流程

总流程:

  1. Hardware Platform Creation : Vivado + Vitis

  2. Create PetaLinux Project : petalinux-create -t project --template zynq -n <name>

  3. Initialize PetaLinux Project : petalinux-config --get-hw-description <.xsa path>

  4. Configure System-Level Options[optional] : petalinux-config

  5. Create User Components[optional] : petalinux-create -t COMPONENT

  6. Configure the Linux Kernel : petalinux-config -c kernel

  7. Configure the Root Filesystem : petalinux-config -c rootfs

  8. Build the System: petalinux-build

  9. Package for Deploying the System: petalinux-package --boot --fsbl --fpga --u-boot --force

  10. Boot the System for Testing :petalinux-boot

简化重点操作:

  1. Create PetaLinux Project create 和 get-hw-description 很快能完成,生成 project-spec/configs/config 和 project-spec/configs/rootfs_config 以及 project-spec/hw-description目录

  2. Configure the Linux Kernel 第一次非常费时间, 一定要先petalinux-config设定 CONFIG_PRE_MIRROR_URL = "file:///opt/share/petalinux/2022.2/downloads/" 原始默认为 http://petalinux.xilinx.com/sswreleases/rel-v${PETALINUX_MAJOR_VER}/downloads CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL = "/opt/share/petalinux/2022.2/sstate-cache/arm/"

  3. Build the System 前需要先更改 Image Packaging Configuration 中的tftpboot 目录 CONFIG_SUBSYSTEM_TFTPBOOT_DIR = /srv/tftp

  4. 提醒:默认配置 root 不允许登陆,用 petalinux 账户第一次登陆会提示改密码,可以sudo,如果需要root登陆,必须要开启 petalinux-config -c rootfs菜单中的 Image feature 中的 debug-tweaks

  5. Hardware Platform Creation

本地进行FPGA部分开发,正常生成bitstream,在Vivado窗口 File->Export->Export Hardware导出.xsa文件。这里注意要包括bitstream。老版本中这一步会生成.sdk文件夹和.hdf文件,.xsa文件的内容和以前的.hdf文件没有区别,但是格式改变了。之后petalinux需要该文件生成硬件部分,需要通过git或共享目录把该文件上传到Ubuntu服务器。

# 新建git repo
# windows上的更新通过branch fpga维护,当有可以运行版本时合并到main
git init
git remote add origin <repo ip>
git checkout -b fpga
# 添加.gitignore文件,只保留必要文件,详见附件
vi .gitignore

git add ./*
git commit

git push --set-upstream origin/fpga
git push 
  1. Create PetaLinux Project

每次运行petalinux前需要添加环境变量。这里petalinux安装在了/opt/share/petalinux/2022.2

Source /setting.sh

为了方便项目同步,这里把之前vivado的仓库clone下来,在repo工作区中新建petalinux项目

# Clone远程repo
# Ubuntu上的更新通过branch linux维护,当有可以运行版本时合并到main
git clone <repo ip>
cd <project path>
git checkout -b linux
git rebase origin/fpga
# 新建petalinux项目
petalinux-create -t project --template zynq -n <name>
# -t            : 声明生成文件类型,有app,modula,project三种
# --template    : 按照模板生成project,有三种,这里选择我们使用的zynq
# -n            : project名称
  1. Initialize PetaLinux Project

Linux最小系统x最小系统由bootloader、linux kernel、root filesystem 组成,需要分别配置。

首先根据.xsa文件配置FSBL、SSBL(u-boot)、以及设备树(DTS),这里不用修改,使用默认设置

FSBL指First Stage Boot Loader,即一阶段启动器,负责初始化硬件,比如时钟和DDR之类的,初始化完成后启动U-Boot进行系统启动,所以U-Boot又被称为SSBL,即Second Stage Boot Loader

petalinux-config --get-hw-description <.xsa path>
# 输入后等待一段时间,会跳出新窗口显示配置界面,如果长时间没跳出新窗口,检查当前窗口是有新栏目
# 这里不做修改,左右键切换到<Save>,回车一路确认,回到该窗口后双击Esc退出完成配置
# 有报错请检查当前是否在项目目录内,或.xsa路径有没有错误

在 Subsystem AUTO中 可以更改 Ethernet 为固定IP地址

  1. Configure the Linux Kernel

配置Linux kernel

类似的,这里也会跳出一个窗口,保持默认设置即可

petalinux-config -c kernel
# -c 即-component,这里指配置kernel,同样保持默认
  1. Configure the Root Filesystem

配置Linux kernel

类似的,这里也会跳出一个窗口,保持默认设置即可

petalinux-config -c rootfs
# -c 即-component,这里指配置root filesystem,同样保持默认
  1. Build the System

上面三步config完成了linux系统必要成分的设置,接下来需要根据设置构建完成的linux镜像

petalinux-build
# 这一步会生成之后用到的各种未打包文件,如:
# zynq_fsbl.elf     : 一阶段启动引导程序镜像
# u-boot.elf        : u-boot镜像
# system.dtb        : 设备树二进制文件,描述驱动和硬件之间的动态连接
# etc.
  1. Package for Deploying the System

上一步已经生成了系统启动必要的所有文件,接下来需要把所有文件打包成启动器和系统镜像,进行烧录

petalinux-package --boot --fsbl --fpga --u-boot --force
# --boot:    生成BOOT.BIN作为启动器
# --fsbl:    打包fsbl到BOOT.BIN中,源文件为zynq_fsbl.elf
# --fpga:    打包bitstream到BOOT.BIN中,源文件为system.bit
# --u-boot:   打包U-Boot到BOOT.BIN中,源文件为u-boot.elf
# etc.        其他还有设备树之类的也被打包到BOOT.BIN内了
# 同时也生成了系统镜像,即image.ub,其中包括rootfs等内容
  1. Syncronize Project for BOOT

由于petalinux运行在远程服务器上,而ZYNQ开发板连接在本地电脑,此时开发板内还没有运行程序,无法通过TFTP远程调试,所以此时无法使用petalinux-boot启动系统,需要把必要文件同步到本地运行

# 修改petalinux工程目录下.gitignore文件,详见附件
vi .gitignore
# 添加/提交修改
git add ./*
git commit

git push --set-upstream origin/fpga
git push 

回到Windows,从远程仓库中下载petalinux打包好的数据包,准备烧录程序。

git pull 
git checkout fpga
git rebase origin/linux
  1. 启动Linux

Linux的启动有多种方式,分为主机启动和从机启动。主机启动指从自己的外围设备中装载启动文件,比如从SD卡或者QSPI Flash启动。从机启动指从上位机下载启动文件,比如从JTAG启动。

  • SD卡启动很简单,只需要按要求格式化后把petalinux生成的BOOT.BIN和image.ub文件导入到SD1分区下即可。但是这样操作之后可能需要频繁插拔SD卡,遇到需要更新SD文件的场合非常不方便,虽然也可以用TFTP调试,但是终归少一条调试路径

  • JTAG启动相对复杂,需要执行很多语句,每个镜像文件都需要手动下载,指定DDR地址。好处是能调的东西多,操作灵活,随时都能修改系统镜像。启动复杂的问题可以通过XSCT脚本解决,是比较完美的解决方案,就是保存修改可能不是很方便,还需要找方法。

  • QSPI Flash(未操作)。相较于SD卡就是把BOOT.BIN单独烧录到了QSPI-Flash中,系统镜像依然需要SD卡保存,所以也不是很方便。

  1. SD卡启动

SD卡格式化并新建两个分区,第一个分区格式化为FAT32格式,预留100M空间用作boot loader。第二个分区格式化为ex4格式,分配剩下的所有空间用作rootfs。把BOOT.BIN, boot.scr, image.ub文件拷贝到第一个分区中。至此SD卡启动器制作完成,插到ZYNQ上,调整烧录模式为00即从SD卡启动。上位机用串口助手如Putty连接ZYNQ开发板USB_UART串口,开发板上电,串口中读出启动信息,一段时间后进入登陆界面。

  1. JTAG启动

  2. 启动终端:

首先启动vitis的XSCT终端。可以在vitis->Xilinx->XSCT找到,也可以在vitis目录下bin下找到。

  1. 连接设备:

因为这里是直接用USB连的,所以可以直接connect,根据情况有不一样的连法:connect -url tcp:<DEVICE_IP>:3121

  • SmartLynq远程连接的话,这里ip就是设备的服务器ip

  • SmartLynq用USB连接的话,就是10.0.0.2

  • 直接用网线连的话就是127.0.0.1

默认端口就是3121,基本没见过有其他端口的

  1. 列出JTAG目标:

使用命令targets可以看到有哪些设备可以连接,一般ZYNQ7020有四个

有时候JTAG连接不稳定会触发各种报错,报错开头whole,这时候可能需要重新连接,调整JTAG频率之类的。

  1. 下载****FPGA

JTAG下载FPGA就是相当于把ZYNQ当成一个FPGA烧录,只需要生成好的.bit文件就行,操作也比较简单。烧录FPGA的时候要连接xc7z020,所以需要命令target 4或者ta 4来连接PL部分。截图中的bit名和我们使用的不一样,我们使用的bit文件一般在<vivado project>.run/impl_1目录下。

这里路径注意在复制粘贴bit文件路径后需要把\换成/。烧录的时候能看到ZYNQ核心板上的PL灯熄灭,烧录结束后亮起。此时如果FPGA是单独运行的话,里面的程序已经可以跑了。

  1. 下载FSBL

FSBL是在启动uboot前的一系列配置启动文件。一般在petalinux 第一步根据.xsa文件配置的时候生成。路径为<petalinux>/images/linux/zynq_fsbl.elf。但是首先第一步,要从PL中切换到PS的ARM核。一般使用dow操作,建议使用0核。

dow指令的功能是把给定文件下载到目标设备。这里下载到了ARM核。dow会把ARM核的运行指针指到目标程序的起点。运行指针设置完后,CPU会立刻停止,来让FSBL完成它的工作。这里FSBL完成后会自动挂起。

注意: 任何下载任务之前都需要禁用MMU。MMU负责管理虚拟内存和物理内存映射,并且阻止任何对物理内存的直接读写,这会导致dow失败。

FSBL的启动会根据硬件配置选择FSBL来源。也就是SD卡还是JTAG。这里要确认选用了JTAG模式

  1. 初始化PL

上一步我们把FSBL下载到了设备上,我们需要根据FSBL里的设置对PS进行配置。PS的初始化脚本被打包在了.xsa文件里,在vitis//hw目录下也能找到ps7_init.tcl。由于这里不涉及的文件的下载,只是单纯执行引导程序,指向任意一个Arm核都能初始化整个APU。

  1. 为U-BOOT下载设备树

设备树-DTS(Device tree source)是用来建立驱动和外围设备之间的动态联系的。有了DTS U-BOOT才知道到哪里初始化设备。官方流程里漏了这一步,这一步不明确设备树的话,之后U-Boot会无法启动。

所有download的都建议回到0核操作。这里额外需要注意DTS不是.elf文件,所以再下载时要使用-data标签,同时设置Offset,这个Offset可以在petalinux项目文件中找到,路径为:<project_path>/project-spec/configs/config,里面能找到包括DST核UBOOT的各种offset。

  1. 下载SSBL(U-Boot)

和FSBL一样,直接下载到#0核,u-boot.elf和FSBL在一个目录。提前用Putty连接好串口,con之后就能在串口上看到U-Boot的启动信息。

con之后ARM核开始运行,开始执行U-Boot

实际启动时后面有一大堆报错,最开始报错信息为:JTAG: Trying to boot script at 3000000。这句说明U-boot正在运行,但是找不到要启动的linux内核。这很正常,因为我们才刚搞定U-Boot,具体的启动信息会在下一节输入。

  1. 下载Linux镜像

最后一步就是把Linux镜像下载到DDR里,并且通过U-Boot启动。安好U-Boot后我们可以用JTAG,TFTP,QSPI,eMMC等等各种方法启动kernel。这里我们就用JTAG启动。这一步需要用到打包好的image.ug文件,其中包括了uboot引导程序、linux kernel、rootfs、FPGA bitstream这些运行的必要数据。没加的话可以回去重新package一下。

  • 用于下载image的地址有一些限制,必须放到__DDR__的空的部分

  • 该镜像不能破坏其他镜像。可以在配置文件里找个合适的地址。

  • 这个地址需要和U-Boot的执行起点对齐

这个文件比较大所以下载时间是目前最长的。下载完就能把CPU release了。至此所有的文件都下载完了。接下来只要在U-Boot中启动就好了。

  1. User Login

Petalinux 2022.1版本后禁止了root登录,如果需要root登录也不建议修改root密码,需要访问的话建议直接root免密。这里登陆时输入petalinux,会自动创建项目用户,并要求设置密码,这里还是设置了root。

如果要启用root auto login可以在petalinux内配置

 petalinux-config -c rootfs 
 --> Image Features
 --> []auto-login
 petalinux-build

密码的配置在

 petalinux-config -c rootfs
 --> PetaLinux RootFS Setting
 --> (root:root;petalinux:petalinux:passwd-expire;)
 # 可以自定义用户和用户名
 # 语句中的petalinux:passwd-expire指的是第一次自定义密码
  1. TCL script BOOT

上面一长串代码,每次启动都要输入一遍实在太麻烦了,所以可以直接通过脚本启动,详见附件。

  1. QSPI Flash启动(未操作)

  2. 创建 petalinux app 并打包在 rootfs中

步骤:

  1. 创建 app,注意:名字不要有大写字符

这里类型用了 install, 如果不提供,默认template 为 C

petalinux-create -t apps --template install --name instsshkey --enable
Options for apps:
  --template <TEMPLATE>                 <c|c++|autoconf|install>
                                        c   : c user application(default)
                                        c++ : c++ user application
                                        autoconf: autoconf user application
                                        install: install data only
                                        fpgamanager    : Pack the .dtbo,.bin,shell.json and .xclbin files into rootfs,
                                                         supports for versal,zynqmp and zynq.
                                        fpgamanger_dtg : Extract the .xsa and pack the .dtbo,.bin/.pdi,shell.json and .xclbin files into rootfs,
                                                         supports for versal,zynqmp and zynq.
                                        fpgamanager_dtg_dfx : Extract the DFX partial .xsa and pack the .dtbo,.bin/.pdi and shell.json files into rootfs.
                                                         supports only for versal and zynqmp.
                                        fpgamanager_dtg_csoc : Extract the Classic soc partial .xsa and pack the .dtbo,.bin/.pdi and shell.json files into rootfs.
  1. 修改生成的 bb文件 project-spec/meta-user/recipes-apps/instsshkey/instsshkey.bb
#
# This file is the instsshkey recipe.
#

SUMMARY = "Install .ssh authorized_keys file"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://authorized_keys \
        "

S = "${WORKDIR}"

do_install() {
             install -m 0700 -d ${D}/home/root/.ssh
             install -m 0600 ${S}/authorized_keys ${D}/home/root/.ssh/
}
FILES:${PN} += "/home/root"

Reference

  1. 正点原子:ZYNQ嵌入式Linux开发指南

  2. Xilinx - ug1144-petalinux-tools-reference-guide-2022.2 / 该版本手册只适用于2019版本之前的Xilinx,是基于Xilinx SDK配置的,并不全部适用Xilinx Vitis

  3. UG1165 ZYNQ All Programble SoC: Chapter 6

  4. Xilinx 官方指南

Appendix


标签:文件,petalinux,启动,--,流程,boot,Vivado,git,Petalinux
From: https://www.cnblogs.com/dy-stairmed/p/18471450

相关文章

  • JAVA程序流程控制与基本例题
    程序的三种执行顺序1.分支结构(1)if分支结果packagecom.branch;publicclassifDemo{publicstaticvoidmain(String[]args){//目标:掌握了解if语句三种形式的用法,清楚其写法和应用场景。demo3();demo2();demo1();}......
  • Ouroboros3D-一种通过3D感知递归扩散生成3D模型的框架在win10系统上的复现流程
    本文将全程记录自己的Ouroboros3D(以下简称o3d)的环境配置以及训练过程,遇到的问题及解决办法。(Windows)目录一、o3d的安装及环境配置1.下载o3d项目2.anaconda、vscode安装及环境创建3.CUDA安装及环境变量的配置4.相应版本的pytorch的安装(1)在anaconda终端(2)在其他终端如vsco......
  • 黑客 如何攻破一个网站?长文图解全流程,零基础入门到精通,收藏这篇就够了
    一篇科普文,很适合小白,长文请静下心看。通过本文你将了解黑客常用的入手思路和技术手法,适合热爱网络信息安全的新手朋友了解学习。本文将从最开始的信息收集开始讲述黑客是如何一步步的攻破你的网站和服务器的。阅读本文你会学到以下内容:1.渗透测试前的简单信息收集。2.s......
  • 2024年苏州工业园区科技企业孵化器申报条件、申报方式及申报流程
    在当今创新驱动发展的时代背景下,苏州工业园区作为高新技术产业的集聚地,积极推动科技企业孵化器的建设与发展。2024年,园区为进一步促进科技创新和创业活动,特制定了一系列科技企业孵化器的申报条件、申报方式及申报流程。本文将详细解读这些关键要素,并提醒申报者注意相关事项,以确......
  • 流程升级----空间CNV分析流程升级
    作者,EvilGenius这一篇我们要继续升级我们的分析流程了,对于空间CNV分析,拿到如下的结果:我们需要借助inferCNV+python的力量实现这个目标。空间转录组的CNV(拷贝数变异)分析是一项通过空间基因表达数据来推测基因组拷贝数变异的技术。CNV分析可以帮助我们理解肿瘤或其他......
  • 流程图 泳道图 UML交互图
     程序员这生必须掌握的两种图形  目录背景图解思考流程图基本流程图程序时序图流程图工具结构图层次结构图思维导图结语 背景从客观上来看,程序员经常会碰到这样的情况:很简单的一个需求用文字罗列了很大篇幅,词不达意,讲不到重点,且逻辑混乱。......
  • 公司邮箱注册免费申请:一站式服务的流程!
    公司邮箱注册免费申请步骤?企业邮箱申请注册的教程?为了满足企业对高效、安全、专业的邮箱服务需求,许多服务提供商推出了公司邮箱注册免费申请的一站式服务。烽火将详细介绍这一流程,帮助企业轻松获取专业的企业邮箱。公司邮箱注册免费申请:基本信息在选择了合适的服务提供商后......
  • 170页精品PPT | 制造业采购供应链及财务管控业务流程蓝图规划
    这份PPT是关于甲方集团数字化转型的详细规划,涵盖了采购供应链及财务管控的业务流程设计、用户体验调研、业务能力提升机会识别,以及总结与后续计划。它详细介绍了采购物控的业务管理愿景、行业发展趋势、采购发展目标、采购平台建设、业务流程框架、关键干系人画像、流程痛点及......
  • Kotlin 入门教程:流程控制
    我们有时希望程序能够根据不同的条件来决定是否执行某些代码段(条件判断),或者反复执行某段代码直到满足特定条件为止(循环),这些功能的实现方式统称为「流程控制」;本文介绍Kotlin的流程控制。本文出现的所有代码均可在Kotlin官方在线代码调试器运行,部分代码下方也会提供链接......
  • ABP VNext 系列:框架启动流程以及依赖注入原理和源码分析
    简单介绍ABPVNextGithub地址:https://github.com/abpframework/abp官网文档地址:https://abp.io/docs/latest官网:https://abp.io/ABPVNext框架是一个基于ASP.NETCore的完整基础架构,也就是我们现在称的ABP框架,它遵循软件开发最佳实践和最新技术来创建现代Web应用程......