读书笔记 XILINX ug1137-Zynq UltraScale+ MPSoC Software Developer Guide 软件开发者指南 Chapter3&Chapter4

前言

上一章我们讲了ug1137的第一章和第二章,也算是给整个读书笔记开了个头,这两个章节的内容其实并不太多,主要还是对整个文档的概括性描述,下面我们就开始挨个章节进行阅读和笔记了。

Chapter 3: Development Tools开发工具

这一章整体在讲MPSOC开发过程中使用到的各种开发工具,主要有下面几种。

  • Hardware IDE

  • Software IDEs

  • Compiler toolchain 编译工具链

  • Debug and trace tools 跟踪和调试工具

  • Embedded OS and software libraries 嵌入式系统软件

  • Simulators (for example: QEMU)

  • Models and virtual prototyping tools (for example: emulation board platforms)
    下面挨个工具的说一下。

3.1 Vivado Design Suite

这节介绍了以下Vivado工具,这个工具大家应该都不陌生,在编写XILINX的FPGA的硬件代码时应该都用过,这里稍微说一点:

Vivado Design Suite中的所有工具和工具选项均以原生工具命令语言(Tcl)格式编写,该格式允许在Vivado IDE或Vivado Design Suite Tcl shell中使用。分析和约束分配贯穿整个设计过程。例如,您可以在合成、放置或布线后运行计时或功率估计。由于数据库可以通过Tcl访问,因此对约束、设计配置或工具设置的更改会实时发生,通常不会强制重新实现。

也就是说vivado的所有操作都是基于tcl命令的,有时候我们在某个平台上上编写的工程可能无法跨平台或者跨版本运行,但是TCL命令差不多是共通的,也就是可以使用TCL命令来完整的复现一个工程。

3.2 Vitis Unified Software Platform

这一节介绍了VITIS工具的各种特性和功能,vitis在MPSOC进行裸机开发时会用到,这个工具的特性和功能都比较多,这里几乎都是列表性质的介绍,也只是让你看看名字而已,这里就不多介绍了,有想要更多了解该工具的可以参看ug1400 Vitis Unified Software Platform Documentation: Embedded Software Development。

3.3 Arm GNU tools

GNU工具链是一套为ARM架构芯片提供的开发工具,主要作用是代码的编译,调试,链接等等,下面的表格就是AMD使用的Arm GNU tools:

image

3.4 Device Tree Generator设备树生成器

设备树应该是Linux嵌入式开发的概念,我也不太熟,这里截取了一部分网络上的描述:

Linux 设备树是一种用于描述硬件平台的硬件资源信息的数据结构和语言。它从 Linux 内核版本 2.6 开始引入,起源于 OpenFirmware。设备树的主要特点是实现驱动代码与设备硬件信息的分离,通过 bootloader(如 U-Boot)和 Linux 传递到内核,使内核能够从设备树中获取对应的硬件信息。这样,对于同一 SOC 的不同主板,只需更换设备树文件即可实现不同主板的无差异支持,而无需更换内核文件,从而实现了内核和不同板级硬件数据的拆分。

3.5 PetaLinux Tools

这一节没有什么内容,主要讲了什么是PetaLinux以及其支持的工具,这里引用官方的描述:

PetaLinux 工具提供在 Xilinx 处理系统上定制、构建和调配嵌入式 Linux 解决方案所需
的所有组件。该解决方案旨在提升设计生产力,可与 Xilinx 硬件设计工具配合使用,以简化
针对 Versal、 Zynq UltraScale MPSoC、 Zynq 7000 SoC 和 MicroBlaze 的 Linux 系统开发

3.6 Linux Software Development using Yocto

这一节讲的似乎是使用Yocto进行Linux软件开发,我完全没听说过Yocto,所以还去搜索了一下是什么,大致是说Yocto是一类用于嵌入式产品开发定制化Linux系统的工具,由于我暂时想不到这个东西的用途,所以不多介绍了,感兴趣的可以到Yocto Project官网查看或者查看ug1144 PetaLinux Tools Documentation: Reference Guide.

能发现这一章节基本没有什么内容,主要就是在讲MPSOC开发中可能会用到的各种工具,没有什么实质内容,我们直接开始讲下一章。

Chapter 4: Software Stack软件栈

这章主要介绍了两种用于MPSOC系统的软件栈,裸机软件栈和Linux软件栈,所谓软件栈我引用一段话来解释:

一个软件栈就是共同工作来保证软件的正常运行的独立组件的集合。这些相关组件,可能包含操作系统、架构层、协议、运行时环境、数据库系统、功能调用,以一个在另一个上面的架构组织在一起,像栈一样。一般来说,在该结构的底层组件是直接与硬件进行交换的,高层结构是为终端用户执行任务或者提供服务的。

4.1 Bare Metal Software Stack裸机软件栈

AMD为裸机系统提供的软件栈实际上就是我们在VITIS中使用的板级支持包(BSP),实际上也就是一堆编写好的C代码,其中有着大量能够直接调用的API,这一软件栈是像这样组织的:

image
并同时提到裸机软件栈的关键部件如下:

  • 外围设备的软件驱动程序,包括使用PS中的Arm® Cortex®A53、Arm® Cortex®-R5 F处理器以及PL中的AMD MicroBlazeTM处理器所需的核心例程。
  • 用于PS外围设备和可选PL外围设备的裸金属驱动器。
  • 标准C库:liBC和libm基于开源Newlib库,移植到Arm Cortex-A53、Arm Cortex-R5 F和MicroBlaze处理器。
  • 提供网络、文件系统和加密支持的其他中间件库。
  • 应用程序示例,包括第一阶段引导加载程序(FSBL)和测试应用程序。
    这里还额外提到了C标准库(libc)和C标准数学库(libm)以及库所对应的各种头文件及其作用,篇幅有限就不贴表格了,感兴趣可以查看第34和35页

4.2 Linux Software Stack Linux软件栈

Linux软件栈内容非常的多且复杂,由于我不是很懂,这一块我会大量使用原始翻译。这部分首先介绍了Linux软件栈的架构及组成:

Linux操作系统支持Zynq UltraScale+ MPSoC。除了Arm GPU之外,AMD为PS中的所有外围设备以及PL中的关键外围设备提供开源驱动程序。下图说明了APU中的完整软件堆栈,包括Linux和可选的虚拟机管理程序。
image
Armv8异常模型定义了异常级别EL0-EL3,其中:

  • EL0具有最低的软件执行特权。EL0处的执行称为无特权执行。
  • 异常级别从1增加到3,表明软件执行特权增加。
  • EL1在使用TEE架构时在非安全世界中运行非安全操作系统或在安全世界中运行安全操作系统。
  • EL2提供对处理器虚拟化的支持。您可以选择在软件堆栈中包括开源或商业虚拟机管理程序。
  • EL3提供对安全监控软件的支持。Cortex-A53 MPCore处理器实现所有异常级别(EL0-EL3),并支持每个异常级别的两种执行状态(AArchh64和AArchh32)。

4.2.1 Multimedia Stack Overview 多媒体软件栈

这一小节描述了多媒体软件栈,我觉得大致是描述多媒体软件栈所依赖的图像加速处理需要在硬件底层进行实现,实现的方式就是使用GPU加速器并使用ACE总线互联APU以实现缓存一致性并提供加速服务,具体翻译如下:

GPU和高性能显示端口能够加速图形应用程序。该图形处理器包括一个几何处理器(GP)和两个像素处理器(PP0和PP1),每个处理器都有一个专用的内存管理单元(MMU),为2D和3D图形提供硬件加速。APU和GPU之间的缓存一致性是通过缓存一致性互连(CCI)实现的,该互连仅支持AXI一致性扩展(ACE)。
CCI反过来将APU和GPU连接到DDR控制器,DDR控制器仲裁DDR访问。
下图显示了多媒体。
image
用于多媒体的Linux内核驱动程序使处理器上运行的应用程序能够访问硬件。

这里有一张表显示了通过中间栈的多媒体驱动程序以及中间栈使用的库和驱动,但是我不知道具体意思就不贴出来了。

4.2.2 FreeRTOS Software Stack FreeRTOS软件栈

这部分描述了FreeRTOS软件栈,如果不知道什么是FreeRTOS,那我引用一下正点原子教程中的描述:

Free即免费的, RTOS全称是Real Time Operating System, 中文就是实时操作系统。注意, RTOS不是指某一个确定的系统,而是指一类系统, 比如uC/OS, FreeRTOS, RTX, RT-Thread等这些都是RTOS类操作系统。

操作系统允许多个任务同时运行,这个叫做多任务。实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务。任务调度在各个任务之间的切换非常快,就给人们造成了同一时刻有多个任务同时运行的错觉。

某些操作系统给每个任务分配同样的运行时间,时间到了就轮到下一个任务,比如Unix操作系统。FreeRTOS操作系统则是由用户给每个任务分配一个任务优先级,任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。

FreeRTOS是RTOS系统的一种, FreeRTOS十分的小巧,可以在资源有限的微控制器中运行,当然,FreeRTOS不仅局限于在微控制器中使用。但从文件数量上来看FreeRTOS要uC/OSIIu和C/OSIII小的多。

在嵌入式领域中, 嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。

FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。

由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、 embOS、 salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、 embOS等商业操作系统, FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行

XILINX在VITIS组件中内置了FreeRTOS作为BSP的一部分,并且中图表展示了软件栈,图表如下,这个图表不全不是我的问题,是文档PDF显示就不全:

image

小结

这两章其实内容也不多,大部分都是些介绍类的,但是我之前没有接触过操作系统,基本都是在用裸机,所以很多概念都不太熟,感觉还得再学习学习。

posted @ 2025-12-03 19:26  Sepiaaa  阅读(0)  评论(0)    收藏  举报