【ZYNQ Linux移植】2-获取设备树

0 写在前面

       这是一个系列博客,详细介绍如何在 ZYNQ 与 ZYNQ MP 平台上如何移植 Linux 系统。目前网络上的大部分教程都是全程基于 Petalinux 的开发,虽然这样简化了开发流程,但对于初学者深入理解掌握 Linux 是不利的,所以,有了这个系列的博客,从几乎为 0 开始教大家怎么移植 Linux 系统。

       本人的软件与环境版本:

       Windows 的 Vivado 与 Vitis 版本:2020.2(前期学习 ZYNQ7020 跟随正点原子安装);

       Ubuntu版本:18.04.2

       虚拟机上的 Vivado、Vitis 与 Petalinux 版本:2020.1(前期学习 ZYNQ MP 跟随 Alinx 安装)。

1 ZYNQ 与设备树

       ZYNQ 本身是 FPGA + ARM 的异构处理器,设备树扮演着关键角色。它通过硬件描述与内核分离的机制,动态定义 CPU、内存、外设及 PL侧中的 IP 核资源,使同一内核镜像能够适配不同硬件配置,大幅提升系统移植的灵活性。设备树由 u-boot 传递给 Linux 内核,驱动据此自动匹配并初始化硬件,如 UART、GPIO 或自定义的 AXI IP 核,避免了传统嵌入式开发中的硬编码问题。此外,设备树支持运行时叠加,适应 FPGA 动态重配置场景,是实现 ZYNQ 硬件可扩展性与 Linux 驱动高效管理的重要桥梁。

2 获取设备树

       从零编写设备树,是 Xilinx 等器件厂商该做的事情,那我们怎么获取设备树呢?简单来说,就是使用 Xilinx 的模版。具体而言,有两种获取的方法,一是通过 Vitis 获得,二是通过 Petalinux 获得。但在此之前还是需要先从 Vivado 中导出硬件描述性文件(.xsa)。

2.1 Vivado导出 .xsa

       只要使用 ZYNQ 的 PS 侧,就需要在 Block Design 中对 ZYNQ 核的相关功能进行配置:

       添加 ZYNQ 核:

这里需要注意的是 ZYNQ-7000 系列与 ZYNQ-MPSoC 系列的 IP 核是不一样的,不过一般也不会选错,因为在创建 Vivado 工程时需要选定器件型号,选好后,这里就只能搜索到对应的 IP 核了。

       而 ZYNQ核的配置部分根据自己的情况进行配置,自己设计的硬件需要参考硬件原理图与手册,如果是开发板可以参考对应的例程。

       之后就按照 FPGA 的开发流程,在 Block Design 中根据需要(是否有逻辑侧)选择添加其它 IP 或在外面直接加 verilog/VHDL 等代码,生成输出文件,然后经过综合、实现、生成比特流


       而接下的步骤就比较关键了,我们需要从 Vivado 中输出 .xsa(硬件描述性文件)。

       依次选择 File --> Export --> Export Hardware…

​       点击 Next 至以下界面,这里需要注意默认是 Pre-synthesis ,我们需要把它修改至 Include bitstream

​       后面可以一直选择 Next ,默认输出路径不需要修改,如果曾经生成过,会提示是否要覆盖,选择是即可。默认是导出到 Vivado 工程目录下

       这个 .xsa 文件,我们后续要用到,可以先备份到一个地方。

2.2 Vitis 获取设备树

       使用 Vitis 获取设备树,需要先获取官方的设备树模板,这部分在这个系列上一部分介绍过了,有需要的可以去看看。

       先正常加载一个 Vitis 工程工作空间,指定路径(不着急创建工程!!!):

       先把我们前面下载的设备树模板进行配置:

       点击右侧的 New..

       定位到解压出的模版文件所在位置:

       依次点击下面的 ApplyApply and Close

在这里插入图片描述

       接着创建一个平台工程(Platform Project)

​       后续按 Vitis 正常创建工程的步骤进行,定一个工程名,我这里定为 linux_base,之后在选择 .xsa 的时候选择我们前面从 Vivado 中导出的 .xsa(我的习惯是会把这个xsa拷贝到Vitis的工程目录下)。然后在操作系统部分改为设备树,其它的默认即可,然后 Finish

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

       在生成的工程右键进行编译(build)

​       Viits 编译生成的设备树所在位置如下:

vitis工程目录/工程名/生成的处理器/device_tree_domain\bsp

​       其中 zynqmp.dts 和 zynqmp-clk-ccf.dtsi 是 ZYNQ 通用的设备树文件,后续在 Linux 内核源码等相关路径也会出现,不需要进行替换,只需要单独把其它4个设备树文件先备份出来。

       如果后续的系统移植完全不使用 Petalinux,还需要备份一下以下的输出文件:

​       它们所在位置如下:

fsbl.elf:  vitis工程目录/工程名/export\工程名\sw\工程名\boot
pmufw.elf:  vitis工程目录/工程名/export\工程名\sw\工程名\boot
xxx.bit:  vitis工程目录/工程名/hw

2.3 Petalinux 获取设备树

       使用 Petalinux 的话,设备树包含两部分,一是从 .xsa 获取的设备树(其实就是和Vitis获取的一样),另一部分是用户自定义的追加设备树

2.3.1 从 .xsa 获取的设备树

       在创建好 Petalinu 工程后,需要先获取设备描述文件(.xsa)

petalinux-config --get-hw-description xsa路径

       执行完命名后,进入以下图形化配置界面,此时需要先进行一些配置,与设备树相关的就是指定官方的设备树模板包路径。

       按以下路径进入:

-->Auto Config Settings --> Device tree autoconfig

       勾选上设备树的自动配置

       在完成 Petalinux 的基本配置后(如包含离线编译,镜像,内核源码与 u-boot 包的路径指定等),编译工程:

petalinux-build

       编译完成后就能在以下路径找到从 .xsa 获取的设备树:

petalinux工程目录/components/plnx_workspace/device-tree/device-tree

在这里插入图片描述

       感兴趣的话可以进去查看以下,与 Vitis 生成的内容基本一致。

2.3.2 用户自定义的追加设备树

       如果是使用 Petalinux 进行 linux 开发,一般会对以下目录的设备树进行修改:

petalinux/project-spec/meta-user/recipes-bsp/device-tree/files

       如果是不使用 Petalinux 来移植 Linux 系统,同样也需要把这个 system-user.dtsi 进行备份,放到内核对象位置。

3 获取文件总结

       通过本篇内容,我们获取了后续 u-boot、Linux内核源码等需要使用的设备树。它们一般包含以下 4 个文件(除去 ZYNQ 通用的 2 个设备树 zynqmp.dts 和 zynqmp-clk-ccf.dtsi)

1,pcw.dtsi:PS 部分的配置,如 UART、I2C、SPI;

2,pl.dtsi:PL 部分的配置,如AXI GPIO、AXI DMA;

3,system.dts:完整设备树主干文件;

4,system-top.dts:顶层设备树文件

       其中关于 PL 和 PS 侧配置的设备树文件都不建议自行修改,需要修改也要谨慎起见

       如果是使用 Petalinux,还可能涉及到用户设备树:

5,system-user.dtsi

6,pl-custom.dtsi

       如果后续的系统移植完全不使用 Petalinux,还可以从 Vitis 获取:

1,fsbl.elfZYNQ启动(全称叫First Stage Boot Loader)所需要的文件;

2,pmufw.elf :ZYNQ用来进行包括系统初始化电源管理和错误处理等功能的小型处理器执行代码;

3,xxx.bit :就是 FPGA 开发中常用到的比特文件

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

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

相关文章

基础算法篇(5)(蓝桥杯常考点)—动态规划(C/C++)

文章目录 动态规划前言线性dp路径类dp经典线性dp背包问题分类01背包问题完全背包问题多重背包分组背包问题混合背包问题多维费用的背包问题区间dp 动态规划 前言 在竞赛中,如果遇到动态规划的题目,只要不是经典题型,那么大概率就是以压轴题的…

obsidian写文章的图床设置方法

目标 要达成的需求: 复制到obsidian的图片,自动上传到Picgo配置的图床。可以自定义大小。可以一键下载当前文章的图片到本地。 obsidian配置图床 安装并配置插件 image auto upload plugin,配置信息如下图。 滚轮alt自定义大小 安装并…

QPaintDevice绘图设备

1.QPixmap 对不同平台做了显示的优化,可以将画的图保存到磁盘上 头文件: #include"QPixmap" #include"QPainter" 1.1QPixmap画图 代码: //Pixmap绘图设备QPixmap pix(300,300);//声明画家QPainter painter(&pix…

数据结构有哪些类型(对于数据结构的简述)

在学习计算机时,数据结构是不可忽视的一点,从考研时的408课程,再到工作中编写软件,网站,要想在计算机领域站住脚跟,数据结构是必备的 在这里,我对于数据结构进行了汇总,并简要描述&…

L2TP实验(无图后补)

拓扑图 一、搭建拓扑并配置基础 IP 地址 设备选型与拓扑搭建:在 eNSP 中,拖入所需设备,包括 LAC(L2TP Access Concentrator,L2TP 接入集中器 )、LNS(L2TP Network Server,L2TP 网络服…

【C#】CAN通信的使用

在C#中实现CAN通信通常需要借助第三方库或硬件设备的驱动程序,因为C#本身并没有直接内置支持CAN通信的功能。以下是一个关于如何使用C#实现CAN通信的基本指南,包括所需的步骤和常用工具。 1. 硬件准备 要进行CAN通信,首先需要一个支持CAN协…

02_C++入门案例习题while循环练习案例:猜数字

案例描述&#xff1a;系统随机生成一个1到100之间的数字&#xff0c;玩家进行猜测&#xff0c;如果猜错&#xff0c;提示玩家数字过大或过小&#xff0c;如果猜对恭喜玩家胜利&#xff0c;并且退出游戏。 需要引入随机数种子 #include <cstdlib> #include <ctime>…

深入理解哈希冲突:原理、解决方案及 Java 实践

概述&#xff1a;在计算机科学领域&#xff0c;哈希表是一种非常重要的数据结构&#xff0c;它通过哈希函数将键映射到存储桶中&#xff0c;从而实现快速的数据查找、插入和删除操作。然而&#xff0c;哈希表在实际应用中会面临 哈希冲突的问题。本文将深入探讨哈希冲突的原理、…

opencv(C++)处理图像颜色

文章目录 介绍使用策略设计模式比较颜色实现方案计算两个颜色向量之间的距离1. 简单方法&#xff1a;曼哈顿距离计算&#xff08;Manhattan Distance&#xff09;2.使用 OpenCV 的 cv::norm 函数3.使用 OpenCV 的 cv::absdiff 函数错误示例 使用 OpenCV 函数实现颜色检测实现方…

DOM解析XML:Java程序员的“乐高积木式“数据搭建

各位代码建筑师们&#xff01;今天我们要玩一个把XML变成内存乐高城堡的游戏——DOM解析&#xff01;和SAX那种"边看监控边破案"的刺激不同&#xff0c;DOM就像把整个乐高说明书一次性倒进大脑&#xff0c;然后慢慢拼装&#xff08;内存&#xff1a;你不要过来啊&…

Apache Nifi安装与尝试

Apache NIFI中文文档 地址&#xff1a;https://nifichina.github.io/ 下载安装配置 1、环境准备 Nifi的运行需要依赖于java环境&#xff0c;所以本机上需要安装java环境&#xff0c;并配置环境变量。 1.1查看本机是否已经存在java环境 请先执行以下命令找出系统中真实可用…

我可能用到的网站和软件

我可能用到的网站和软件 程序员交流的网站代码管理工具前端组件库前端框架在线工具人工智能问答工具学习的网站Windows系统电脑的常用工具 程序员交流的网站 csdn博客博客园 - 开发者的网上家园InfoQ - 软件开发及相关领域-极客邦掘金 (juejin.cn) 代码管理工具 GitHub 有时…

使用SSH解决在IDEA中Push出现403的问题

错误截图&#xff1a; 控制台日志&#xff1a; 12:15:34.649: [xxx] git -c core.quotepathfalse -c log.showSignaturefalse push --progress --porcelain master refs/heads/master:master fatal: unable to access https://github.com/xxx.git/: The requested URL return…

JavaScript异常机制与严格模式

目录 JavaScript 异常机制 1. 基本语法&#xff1a;try...catch...finally 2. 抛出异常&#xff1a;throw 3. 错误对象属性 4. 同步代码的异常处理 5. 异步代码的异常处理 5.1 回调函数 5.2 Promise 5.3 全局未捕获的 Promise 错误 6. 全局错误处理 7. 自定义错误与…

中厂算法岗面试总结

时间&#xff1a;2025.4.10 地点&#xff1a;上市的电子有限公司 面试流程&#xff1a; 1.由负责人讲解公司文化 2&#xff0c;由技术人员讲解公司的技术岗位&#xff0c;还有成果 3.带领参观各个工作位置&#xff0c;还有场所 4.中午吃饭 5.面试题&#xff0c;闭卷考试…

vue+flask图书知识图谱推荐系统

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站&#xff0c;有好处&#xff01; 编号: F025 架构: vueflaskneo4jmysql 亮点&#xff1a;协同过滤推荐算法知识图谱可视化 支持爬取图书数据&#xff0c;数据超过万条&am…

MySQL NDB Cluster详解

MySQL NDB Cluster&#xff08;MNC&#xff09; 是MySQL提供的一种分布式数据库解决方案&#xff0c;旨在提供高可用性、高性能的数据库服务。它通过 NDB&#xff08;Network DataBase&#xff09; 存储引擎实现了高可用性和分布式存储&#xff0c;在NDB中&#xff0c;数据通过…

解决华硕主板Z890m下载ubuntu20.04后没有以太网问题

问题描述&#xff1a; 华硕主板Z890m下载双系统ubuntu20.04后&#xff0c;发现ubuntu不能打开以太网。 问题原因&#xff1a; 华硕主板的网卡驱动是r8125,而ubuntu20.04的驱动版本是r8169&#xff0c;所以是网卡驱动不匹配造成 解决方案 开机界面按下F2进入BOIS模式&#…

JS里对于集合的简单介绍

JS的集合 前言一、集合二、基本使用1. 创建集合2. 添加元素3. 删除元素4. 检查元素5. 清空集合6. 集合的大小 三、扩展使用1. 遍历集合2. 从数组创建集合3. 集合的应用场景 四、总结 前言 JS里对于集合的简单介绍 同数学的集合&#xff0c;有无序性、唯一性 注意&#xff1a;…

pytorch 反向传播

文章目录 概念计算图自动求导的两种模式 自动求导-代码标量的反向传播非标量变量的反向传播将某些计算移动到计算图之外 概念 核心&#xff1a;链式法则 深度学习框架通过自动计算导数(自动微分)来加快求导。 实践中&#xff0c;根据涉及号的模型&#xff0c;系统会构建一个计…