【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 开发中常用到的比特文件

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辣个蓝人QEX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值