PetaLinux的JTAG启动

csdn–PetaLinux 使用技巧与缓存配置

xilinx官网–PetaLinux 工具文档参考指南 (ug1144)

xilinx官网–设备树配置文档

内核官网–设备树文档

软硬件准备

分类项目说明/用途验证方法示例
硬件JTAG 线JTAG 下载、调试
UART 串口线查看 zynq 启动日志
网口线用于 TFTP 下载
软件TFTP 服务器用于下载各种启动文件systemctl status tftpd-hpa
Vivado (xsdb)使用 xsdb 命令通过 JTAG 下载 ELF/bitxsdb -version
PetaLinux构建和打包 Linux 镜像petalinux-create -h
mkimage 工具制作 boot.scr 文件,安装命令:sudo apt install u-boot-toolsmkimage -V

ubuntu环境变量 ~/.bashrc

alias sptl='source /opt/pkg/petalinux/2020.2/settings.sh'
alias svivado='source /opt/pkg/tools/Xilinx/Vivado/2020.2/settings64.sh'
alias svitis='source /opt/pkg/tools/Xilinx/Vitis/2020.2/settings64.sh'
alias ssdk='source  /opt/petalinux/2020.2/environment-setup-cortexa9t2hf-neon-xilinx-linux-gnueabi'
alias sclion='/opt/soft/clion-2023.3.4/bin/clion.sh'

vivado导出xsa文件给petalinux工程用

 scp system_wrapper.xsa minglie@192.168.1.104:~/petalinux/xsa_7010/

启动相关文件

文件名作用说明生成方式
system.bitFPGA 配置比特流文件,配置 PL 逻辑电路(JTAG/FSBL 下载到 FPGA)。petalinux-build
zynq_fsbl.elfFSBL(First Stage Boot Loader),初始化 PS/PL,加载 bitstream 和 U-Boot。petalinux-build
uboot.elf二级引导程序 U-Boot,可通过 SD/TFTP/Flash 加载内核和设备树。petalinux-build
uImage/zImageLinux 内核镜像petalinux-build
rootfs.cpio.gz.u-boot根文件系统(cpio+gzip 格式,适用于 initramfs)。petalinux-build
system.dtb设备树文件(Device Tree Blob),描述硬件结构,供内核识别外设。petalinux-build
boot.cmd.defaultboot.scr 的源码手写
boot.scrU-Boot 脚本文件(由 mkimage 生成),定义启动参数和加载流程。mkimage -c none -A arm -T script -d boot.cmd.default boot.scr
text.txt (xsdb 脚本)XSDB 命令脚本,定义通过 JTAG 下载 ELF/bitstream 的操作步骤。录制 petalinux-boot --jtag --prebuilt 3 --tcl test.txt

PetaLinux --prebuilt 等级对比表

预设等级加载 Bitstream加载 FSBL加载 U-Boot加载 Linux(内核 + rootfs)适用场景
--prebuilt 1✅ 是❌ 否❌ 否❌ 否只配置 PL(FPGA 逻辑),测试 FPGA
--prebuilt 2✅ 是✅ 是✅ 是❌ 否启动 U-Boot,进行手动加载或调试
--prebuilt 3✅ 是✅ 是✅ 是✅ 是一键启动 Linux 系统(推荐测试用)

操作步骤

使用 petalinux-boot 制作预建镜像

就是把 images/linux 里的文件复制到pre-built目录下,用于录制
xsdb 脚本, 后续我们从 images/linux/ 目录下载文件, 所以只制作一次

petalinux-package --prebuilt --fpga images/linux/system.bit
或
petalinux-package --prebuilt --force

录制 xsdb 脚本

执行前需重新上电,若不加 --tcl test.txt 则是jtag启动

petalinux-boot --jtag --prebuilt 3 --tcl test.txt

录制的text.txt

删除下载uImage和rootfs.cpio.gz.u-boot的部分,因为 boot.scr 通过tftp下载了
替换 /home/minglie/petalinux/antbase/pre-built/linux/images/ 为 /home/minglie/petalinux/antbase/images/linux/
这样重新build后,直接用 images/linux/里的文件

connect
puts stderr "INFO: Configuring the FPGA..."
puts stderr "INFO: Downloading bitstream: /home/minglie/petalinux/antbase/pre-built/linux/images/system.bit to the target."
fpga "/home/minglie/petalinux/antbase/pre-built/linux/images/system.bit"
after 2000
targets -set -nocase -filter {name =~ "arm*#0"}source /home/minglie/petalinux/antbase/project-spec/hw-description/ps7_init.tcl; ps7_post_config
catch {stop}
set mctrlval [string trim [lindex [split [mrd 0xF8007080] :] 1]]
puts "mctrlval=$mctrlval"
puts stderr "INFO: Downloading ELF file: /home/minglie/petalinux/antbase/pre-built/linux/images/zynq_fsbl.elf to the target."
dow  "/home/minglie/petalinux/antbase/pre-built/linux/images/zynq_fsbl.elf"
after 2000
con
after 3000; stop
targets -set -nocase -filter {name =~ "arm*#0"}
puts stderr "INFO: Downloading ELF file: /home/minglie/petalinux/antbase/pre-built/linux/images/u-boot.elf to the target."
dow  "/home/minglie/petalinux/antbase/pre-built/linux/images/u-boot.elf"
after 2000
con; after 1000; stop
targets -set -nocase -filter {name =~ "arm*#0"}
puts stderr "INFO: Loading image: /home/minglie/petalinux/antbase/pre-built/linux/images/system.dtb at 0x00100000"
dow -data  "/home/minglie/petalinux/antbase/pre-built/linux/images/system.dtb" 0x00100000
after 2000
targets -set -nocase -filter {name =~ "arm*#0"}
puts stderr "INFO: Loading image: /home/minglie/petalinux/antbase/pre-built/linux/images/uImage at 0x00200000"
dow -data  "/home/minglie/petalinux/antbase/pre-built/linux/images/uImage" 0x00200000
after 2000
targets -set -nocase -filter {name =~ "arm*#0"}
puts stderr "INFO: Loading image: /home/minglie/petalinux/antbase/pre-built/linux/images/rootfs.cpio.gz.u-boot at 0x04000000"
dow -data  "/home/minglie/petalinux/antbase/pre-built/linux/images/rootfs.cpio.gz.u-boot" 0x04000000
after 2000
targets -set -nocase -filter {name =~ "arm*#0"}
puts stderr "INFO: Loading image: /home/minglie/petalinux/antbase/pre-built/linux/images/boot.scr at 0x03000000"
dow -data  "/home/minglie/petalinux/antbase/pre-built/linux/images/boot.scr" 0x03000000
after 2000
con
exit
puts stderr "INFO: Saving XSDB commands to test.txt. You can run 'xsdb test.txt' to execute"

修改后的text.txt

connect
puts stderr "INFO: Configuring the FPGA..."
puts stderr "INFO: Downloading bitstream: /home/minglie/petalinux/antbase/images/linux/system.bit to the target."
fpga "/home/minglie/petalinux/antbase/images/linux/system.bit"
after 2000
targets -set -nocase -filter {name =~ "arm*#0"}source /home/minglie/petalinux/antbase/project-spec/hw-description/ps7_init.tcl; ps7_post_config
catch {stop}
set mctrlval [string trim [lindex [split [mrd 0xF8007080] :] 1]]
puts "mctrlval=$mctrlval"
puts stderr "INFO: Downloading ELF file: /home/minglie/petalinux/antbase/images/linux/zynq_fsbl.elf to the target."
dow  "/home/minglie/petalinux/antbase/images/linux/zynq_fsbl.elf"
after 2000
con
after 3000; stop
targets -set -nocase -filter {name =~ "arm*#0"}
puts stderr "INFO: Downloading ELF file: /home/minglie/petalinux/antbase/images/linux/u-boot.elf to the target."
dow  "/home/minglie/petalinux/antbase/images/linux/u-boot.elf"
after 2000con; after 1000; stop
targets -set -nocase -filter {name =~ "arm*#0"}
puts stderr "INFO: Loading image: /home/minglie/petalinux/antbase/images/linux/system.dtb at 0x00100000"
dow -data  "/home/minglie/petalinux/antbase/images/linux/system.dtb" 0x00100000
after 2000targets -set -nocase -filter {name =~ "arm*#0"}
puts stderr "INFO: Loading image: /home/minglie/petalinux/antbase/boot.scr at 0x03000000"
dow -data  "/home/minglie/petalinux/antbase/boot.scr" 0x03000000
after 2000
con
exit
puts stderr "INFO: Saving XSDB commands to test.txt. You can run 'xsdb test.txt' to execute"

生成自定义的boot.scr

加个echo “AAA” 确认这个boot.scr 是生效的

boot.cmd.default

echo "AAA"
setenv ipaddr   192.168.1.89
setenv serverip 192.168.1.104
pxe get
pxe boot

生成并拷贝boot.scr

mkimage -c none -A arm -T script -d boot.cmd.default boot.scr
cp boot.scr  /home/minglie/petalinux/antbase/boot.scr

xsdb执行脚本启动

xsdb text.txt

jtag 启动结束


qemu启动

petalinux-boot --qemu --kernel

u-boot 纯手动启动

>ZYNQ
tftpboot 0x00200000 zImage
tftpboot 0x00100000 system.dtb
# 加载bit文件
tftpboot 0x00800000 system.bit 
fpga load 0 0x00800000 $filesize
bootz 0x00200000 - 0x00100000

u-boot 手动执行boot.scr 启动

# 或制作ming_boot.scr
mkimage -A arm -T script -C none -n "Zynq Boot Script" -d boot.cmd ming_boot.scr
>ZYNQ
tftpboot 0x3000000 ming_boot.scr
source 0x3000000

u-boot 挂在nfs根文件系统启动

setenv ipaddr 192.168.1.89  
setenv serverip 192.168.1.104 
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0setenv bootargs 'console=ttyPS0,115200 root=/dev/nfs rw nfsroot=192.168.1.104:/home/minglie/minglie/workspace/rootfs,nfsvers=3 ip=192.168.1.89:192.168.1.104:192.168.1.1:255.255.255.0::eth0:off'
saveenv
boot

petalinux 常用脚本

# 创建工程
petalinux-create -t project --template zynq -n antbase
cd antbase
# 导入硬件配置
petalinux-config --get-hw-description  ../xsa_7020/
petalinux-config --get-hw-description  ../xsa_7010/
# 配置 Linux 内核
petalinux-config -c kernel
# 配置 Linux 根文件系统
petalinux-config -c rootfs
# 编译
petalinux-build
petalinux-build -c device-tree -x clean
petalinux-build -c device-tree
# 制作BOOT.bin 启动文件并复制到 SD 卡
petalinux-package --boot --fsbl --fpga --u-boot --force
petalinux-package --boot  --u-boot --fsbl  --dtb no  --force
cd images/linux
cp BOOT.BIN image.ub boot.scr    /media/minglie/BOOT
# 修改xsa文件后,清理项目生成的中间文件,小改不用执行
petalinux-build -x mrproper -f
# 编译设备树
petalinux-build -c device-tree -x clean
petalinux-build -c device-tree

PetaLinux 清理命令

命令作用说明典型执行时机
petalinux-build -x clean删除临时文件和部分编译产物,保留配置文件和大部分构建结果,重新编译速度快。- 小范围修改(应用代码 / device tree / 配置等)出问题时尝试
- 编译失败怀疑是临时文件冲突时
petalinux-build -x mrproper -f删除项目生成的所有中间文件,包括内核、根文件系统的缓存和临时文件,但保留配置。相当于彻底重建。- 修改 XSA 硬件文件(新增/删除外设、更改地址映射)后必须执行
- BSP 结构发生变化
- 大规模修改导致编译异常时
petalinux-build -x distclean删除几乎所有构建产物,项目回到初始状态,仅保留工程配置文件。- 工程出现严重问题需要“重置”时
- 想把工程打包分享给别人,但不想带构建产物时

u-boot下载命令

# 从 TFTP 服务器上下载 PXE 配置文件(比如 pxelinux.cfg/default 或 pxelinux.cfg/<MAC>)
zynq>pxe get
# 在 pxe get 成功获取到 PXE 配置文件后,执行其中定义的启动流程:
## 下载内核镜像(zImage / uImage)
## 下载设备树(system.dtb)
## 下载 initrd(rootfs)
## 按配置的 bootargs 启动 Linux
zynq>pxe boot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95309.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机中的按键防抖

按钮&#xff08;按键&#xff09;抖动是单片机开发中常见的硬件问题&#xff0c;本质是机械触点接触瞬间的物理弹跳导致的电信号不稳定。消除抖动&#xff08;防抖&#xff09;是确保按键状态检测准确的关键&#xff0c;下面从原理到实现详细讲解。 一、按钮抖动的原理&#x…

面经分享--小米Java一面

目录 1.Kafka和RocketMQ的区别 2.反射的作用 3.类加载的具体过程&#xff0c;双亲委派模型的机制 4.TCP的四次挥手 5.多线程的优势 6.死锁产生的原因&#xff0c;怎么解决 7.Java并发的工作原理 8.常用的git命令 9.算法题 1.leetcode 3.无重复字符的最长子串&#xff…

Python在边缘计算与物联网中的创新实践:实时数据处理与设备控制

近年来&#xff0c;Python语言的普及度持续攀升&#xff0c;尤其在人工智能、数据科学等热门领域备受青睐。然而&#xff0c;一个新兴趋势——边缘计算与物联网&#xff08;IoT&#xff09;的结合——正悄然改变技术格局。边缘计算强调在数据源头进行实时处理&#xff0c;减少云…

Spring Cloud Gateway 网关(五)

目录 一 概念引入 二 具体使用 1 首先创建一个网关模块 2 启动类 3 配置类 4 对应方法的修改 5 展示借助81端口进行转发控制 6 断言规则​编辑 三 过滤器 1 将前置的请求参数给过滤掉&#xff0c;降低繁琐程度。 2 默认过滤器 3 全局过滤器 4 自定义过滤器工厂 5…

产品经理操作手册(8)——业务需求文档(BRD)

一、BRD的定义与价值 **业务需求文档(BRD)**是产品开发前期的基础性文档&#xff0c;它将业务诉求转化为结构化的产品需求&#xff0c;是连接业务方与交付团队的桥梁。“BRD不仅是一份文档&#xff0c;而是一个对齐的过程。”BRD核心价值 统一认知&#xff1a;确保各方对业务目…

Excel表格多级下拉选项,如何制作?

之前分享过如何设置下拉选项&#xff0c;但那只是简单的一级下拉菜单&#xff0c;今天再给大家分享多级下拉菜单如何制作。也就是根据前面的下拉选项改变后面的选项。 我们现来复习一级下拉菜单&#xff0c;再接着讲多级下拉菜单 一级下拉选项 首先我们先将表格内容凑填写好…

[Sync_ai_vid] 唇形同步评判器 | 图像与视频处理器 | GPU测试

第4章&#xff1a;SyncNet唇形同步评判器 在前几章中&#xff0c;我们了解了唇形同步推理流程如何协调生成唇形同步视频&#xff0c;以及音频特征提取器(Whisper)如何为LatentSync UNet提供关键音频线索。 UNet利用这些线索巧妙调整唇部动作。但我们如何判断UNet的生成效果&a…

算法:插入排序

插入排序&#xff08;直接插入排序&#xff09; 是一种基于“插入”的排序 思路 它的核心思想是把数组分成两部分&#xff1a;一部分是有序区&#xff0c;另一部分是乱序区也就是待排序区。 每次从未排序部分“取出”一个元素&#xff0c;插入到前半部分合适的位置&#xff0c;…

MCP Go SDK

MCP Go SDK v0.3.0 Open in GitHub Codespaces &#xff08;在 GitHub Codespaces 中打开&#xff09; BREAKING CHANGES &#xff08;重大变更&#xff09; This version contains breaking changes. See the release notes for details PkgGoDev &#xff08;Go 官方包文档入…

面试问题详解十一:Qt中的线程池与 QRunnable

在 Qt 中&#xff0c;多线程的使用是开发高性能 GUI 应用的重要组成部分。为了避免频繁创建和销毁线程带来的资源消耗&#xff0c;Qt 提供了 线程池&#xff08;QThreadPool&#xff09; 和 可运行任务&#xff08;QRunnable&#xff09; 的机制&#xff0c;帮助我们更加高效地…

spring-ai-alibaba-deepresearch 学习(五)——BackgroundInvestigationNode

本篇为spring-ai-alibaba学习系列第三十一篇前面介绍 rewrite_multi_query 节点最后会根据用户上传文件标识 user_upload_file 决定下一节点现在来看一下第二个分支&#xff0c;当 user_upload_file 为 false 时&#xff0c;转入 background_investigator 节点该节点主要是负责…

ESP32S3:开发环境搭建、VSCODE 单步调试、Systemview 分析任务运行情况

目标: 实现点灯工程&#xff0c;并且可以基于 vscode 进行单步调试与 systemview 来分析任务运行情况。 环境搭建 如需在 ESP32-S3 上使用 ESP-IDF&#xff0c;请安装以下软件&#xff1a; 设置 工具链&#xff0c;用于编译 ESP32-S3 代码&#xff1b;编译构建工具 —— CMa…

linux系统学习(6.软件包管理)

目录 一、概述 1.分类 2.命名方式 3.一个软件包的组成 1. 软件包的基本定义 2. 一个软件包通常包含的部分 ① 程序文件 ② 库文件 ③ 配置文件 ④ 数据文件 / 资源文件 ⑤ 文档 / 帮助信息 ⑥ 服务脚本 / 单元文件&#xff08;如果是服务型软件&#xff09; ⑦ 包的…

数据结构青铜到王者第八话---队列(Queue)

目录 一、队列(Queue) 1、概念 2、队列的使用 3、队列模拟实现 4、循环队列 4.1数组下标循环的小技巧&#xff08;1&#xff09;下标最后再往后(offset 小于 array.length): index (index offset) % array.length 4.2如何区分空与满 4.3设计循环队列 二、双端队列 (Deq…

Windows系统之不使用第三方软件查看电脑详细配置信息

MENU使用系统信息工具&#xff08;最详细&#xff09;使用命令行查看命令提示符PowerShell&#xff08;信息更丰富&#xff09;使用DirectX诊断工具&#xff08;查看显卡和声音设备&#xff09;查看设备管理器&#xff08;查看硬件驱动&#xff09;一条命令合集&#xff08;Pow…

K8s学习笔记(一)——

一、k8s是什么一个分布式原来是主要用来管理容器的呀&#xff08;专业点叫“容器编排”&#xff09;&#xff0c;什么是管理&#xff1f;其实就是增删改查等等&#xff0c;简单来理解&#xff0c;k8s就是实现容器增删改查的呗。是开源的&#xff0c;在Linux系统下。就跟创建的s…

Zynq开发实践(FPGA之平台免费IP)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】和c语言平台提供posix api一样&#xff0c;一般fpga厂家也会提供各种各样免费的ip给客户使用。这样&#xff0c;客户就不需要自己去写每一个ip了&am…

nginx 配置文件初识全局块、events、http、server、location 的层级关系

Nginx 配置其实只有两类指令&#xff1a; 放在“某个块”里的块级指令&#xff1b;直接写在顶层的全局指令。 把全部配置想象成一个树形结构&#xff0c;根节点叫 main&#xff0c;往下依次分叉即可。下面用 1 张 ASCII 树 1 张极简示例&#xff0c;30 秒就能看懂层级关系。 层…

OCR大模型最新研究

最新OCR大模型介绍1.GPT-4o 2024.5.14 3.MinerU 2024.7.4 3.GOT-OCR 2024.9.3 4.InternVL3-78B 2025.4.11 开源 通用多模态大模型&#xff0c;OCR是它们的能力之一 因其训练数据的偏向&#xff0c;在文档理解、数学公式识别、图表分析等任务上通常是开源模型中的SOTA&a…

php电子签名

原理使用一对公钥和私钥&#xff0c;用私钥对数据进行签名&#xff0c;用公钥对签名数据进行加密&#xff0c;形成电子签名。电子签名认证&#xff0c;用私钥解密数据&#xff0c;用公钥验证签名。若加密容过长&#xff0c;则将加密内容按照固定长度分块&#xff0c;对每块进行…