目录
前言
Chapter 5: Software Development Flow 软件开发流程
5.1 Bare Metal Application Development 裸机应用开发
5.2 Application Development Using PetaLinux Tools 使用PetaLinux工具开发应用程序
5.3 Linux Application Development Using Vitis 使用Vitis进行Linux应用程序开发
本章小结
Chapter 6: Software Design Paradigms 软件设计范式
6.1 Frameworks for Multiprocessor Development 多处理器开发框架
6.2 Symmetric Multiprocessing (SMP) 对称多处理
6.3 Asymmetric Multiprocessing (AMP) 非对称多处理
6.3.1 OpenAMP
6.3.2 Virtualization with Hypervisor 使用虚拟机进行虚拟化
6.3.3 Use of Hypervisors 虚拟机的使用
小结
前言
上一章我们讲了ug1137的第3章和第4章,两个章节说实话没有什么实际内容可言,主要都是些概念性的,或者介绍性的内容,我们这次讲的第5章和第6章也差不多,实际内容并不多,不过我们依然还是要过一遍。
Chapter 5: Software Development Flow 软件开发流程
这个章节主要介绍了使用VITIS对MPSOC进行裸机开发和使用PetaLinux进行Linux软件开发的流程,我们首先介绍一下MPSOC的软件开发架构:
这张图大致示意了使用VIVADO进行硬件设计,然后导出硬件给软件开发工具,然后合同软件栈开发的架构图。
5.1 Bare Metal Application Development 裸机应用开发
裸机应用开发这一小节讲了比较基础的如何使用VITIS进行裸机开发的流程,但是说实话写的比较简陋,几乎没有参考意义,如果真要学最基础的什么导入硬件平台,创建工程这些内容不如找一份中文教程看。这部分也就没有什么内容了。不够有几个NOTE点还是值得注意一下:
Note: 1.AMD建议您使用Managed Make flow而不是标准Make C/C++,除非您愿意使用make files。 2.Cortex®-R5F和Cortex®-A53 32位的裸机软件不支持使用DMA的64位地址进行数据传输。 3.默认情况下,所有独立应用程序将仅在APU0上运行。其他APU核心将关闭。 5.2 Application Development Using PetaLinux Tools 使用PetaLinux工具开发应用程序
这个小节仅展示了一下基于PetaLinux工具的软件开发流程的图表,有点意义不明,这个图表在下一小节也出现了,我们这里就跳过这一小节。
5.3 Linux Application Development Using Vitis 使用Vitis进行Linux应用程序开发
这一小节讲了如何使用VITIS进行Linux开发的步骤,内容大部分是教程类的,由于我也还没用过VITIS开发Linux,这里就完整把这些操作的中文版翻译了。
AMD软件设计工具促进了Linux用户应用程序的开发。本节概述了Linux应用程序开发的开发流程。 下图说明了使用Vitis软件平台开发Linux用户应用程序所涉及的典型步骤。 5.3.1 创建Linux应用程序项目
您可以使用“新建应用程序项目”向导创建C或C++ Linux应用程序项目。 要创建一个项目:
单击File → New → Application Project。出现“新建应用程序项目”对话框。
在“Project Name”字段中输入项目名称。
选择项目的位置。您可以通过选中“Use default location”复选框来使用“位置”字段中显示的默认位置。否则,单击复选框并输入或浏览到目录位置。
选择下一步。
在“选择平台”选项卡上,选择具有Linux域的平台,然后单击“下一步”。
在“域”窗口中,从“域”下拉列表中选择域。
选择您喜欢的语言:C或C++。
或者,选择Linux系统根以指定Linux系统根路径,并选择Linux工具链以指定Linux工具链路径。> 9. 单击下一步移动到“Templates”视图。
Vitis软件平台提供了“模板”对话框中列出的有用示例应用程序,您可以使用这些应用程序来创建项目。“描述”框显示所选示例应用程序的简要描述。当您为项目使用示例应用程序时,Vitis软件平台会创建所需的源文件和头文件以及链接器脚本。
选择所需的模板。如果要创建空白项目,请选择“空应用程序”。创建项目后,您可以将C文件添加到项目中。
单击“完成”创建您的Linux应用程序项目。
单击小锤子图标以生成或生成应用程序项目。
我翻译了第一个后就没翻译了,主要我发现他这里说是创建Linux工程,但实际实际上所有步骤几乎都和裸机开发时一样的,只有第8步指定Linux System Root这步不一样,但是他有没有展开说,而且实际上vitis里选domain时根本没有Linux这个选项,这个章节就显得很意义不明。后面的教程都是比较简单的创建Hello World工程,进行调试,这些比较简单的内容,就不再翻译了。
本章小结
本来以为这章会真的介绍软件工作流,结果进来看才发现怎么全是水货,有种上当了的感觉,不过这章也倒是只有7页,也就算了。
Chapter 6: Software Design Paradigms 软件设计范式
这一章节大致是在介绍在MPSOC中使用异构计算的几种方法,可能也就是标题所说的范式的意思,我们直接来看介绍:
MPSoC架构支持针对不同任务的异构多处理器引擎。开发针对这些处理器的软件的主要方法是使用以下方法:
多处理器开发框架:描述可用于在MPSoC上开发的框架。
对称多处理(SMP):使用PetaLinux进行SMP开发是在MPSoC上使用Linux平台开发SMP的最简单流程。
非对称多处理(AMP):AMP是一种强大的模式,可以使用多个处理器引擎,并精确控制每个处理器上运行的内容。与SMP不同,有很多不同的使用方式可以使用AMP。本节描述了复杂程度不同的两种使用AMP的方法。
这里说到了很多专有名词,我们来挨个解释一下,第一个是异构多处理器,所谓异构多处理器就是指在一个多核处理器中在不同核心上使用不同的系统,例如在一个APU上使用Linux,在另一个上使用裸机就可以成为异构多处理器。而AMP和SMP我这里引用一下正点原子的描述:
AMP 运行模式指多个内核相对独立的运行不同的任务,每个内核相互隔离,可以运行不同的操作系统(OS)或裸机应用程序。
SMP 运行模式指多个处理器运行一个操作系统,这个操作系统同等的管理多个内核,如 PC 电脑。
下面就逐小节介绍这些内容。
6.1 Frameworks for Multiprocessor Development 多处理器开发框架
这一小节主要是讲AMD或者说是ARM提供给多处理器用来进行开发的一些基础框架,基于这些框架可以进行多处理器下更高安全性,或者更高性能的开发,不过还是如之前所说,我对ARM架构以及其安全性的框架不是很熟,这里就还是多翻译原文了:
AMD为MPSoCs提供多个框架,以促进在异构处理器和AMD 7系列FPGA上的应用程序开发。这些框架描述如下:
虚拟机管理程序框架:AMD提供Xen虚拟机管理程序,这是支持MPSoC的APU上虚拟化所需的关键项目。“虚拟机管理程序的使用”部分涵盖了更多详细信息。
身份验证框架:MPSoC支持身份验证和加密功能,作为身份验证框架的一部分。要了解有关身份验证框架的更多信息,请参阅引导时安全性。
TrustZone框架:TrustZone技术允许并维护同一系统内安全和非安全流程之间的隔离。有关更多信息,请参阅本白皮书。
多处理器通信框架:AMD为MPSoCs提供OpenAMP框架,以允许不同处理单元之间的通信。有关更多详细信息,请参阅快速模拟器用户指南:QEMU。
电源管理框架:电源管理框架允许跨不同处理单元运行的软件组件与电源管理单元通信。
AMD通过Trusted Firmware-A(TF-A)提供信任区支持,以保持安全和非安全世界之间的隔离。要了解有关TF-A的更多信息,请参阅Trusted Firmware-A。 6.2 Symmetric Multiprocessing (SMP) 对称多处理
如之前所说,对称多处理SMP实际上就是在一个操作系统中使用多个核心,典型的就是PC端的Windows系统,在这个模式下,操作系统会管理处理器,外设,中断,以及负载。在MPSOC上,使用Linux系统可以同时将四个A53核纳入Linux系统中管理,下面这张图展示了MPSOC上使用四核心的SMP运行单一Linux系统:
这同时也提到了SMP工作在Linux系统时其实时性会比较差,不过给出解释比较奇怪,这里不多做解读了,原文是:
This would not be the best mode of operation when there are hard, real-time requirements as it ignores Linux application core affinity which should be available to developers with the existing AMD software. 6.3 Asymmetric Multiprocessing (AMP) 非对称多处理
非对称多处理就是在多处理器上运行不同的操作系统或者不同的运行内容,这一节主要会介绍两种不同的AMP,不过在此之前还有一些其他事项要明确。
首先在使用AMP前,开发者必须要先指定那些代码需要在哪个处理器上运行,我记得VITSI在创建完硬件平台并指定硬件平台创建工程后,就需要确定该工程的域(domain),我这里截了一张图,上面能看到这个工程工作在A53-0核的裸机模式:
同时要指出,MPSOC的两个R5F核只支持使用AMP而不支持SMP,所以这两个核心也常被用于支持高实时性要求的应用。另一方面,AMP模式还可以被单独用于PL端的MicroBlaze处理器中,并且可以单独运行,不需要和PS端进行通信,这里本来还有一张示意图表但是意义不太大,所以就不贴出来了。
6.3.1 OpenAMP
openAMP是上面说到的两种AMP模式中的一个,这里都是介绍性的内容,我就只贴翻译了:
OpenAMP框架提供了执行以下操作的机制:
加载和卸载硬件
使用标准API在应用程序之间进行通信
下图显示了Openamp的示例以及使用Openamp框架的RPU的硬实时功能。
在这种情况下,运行在APU上的Linux应用程序执行RPU应用程序的加载和卸载。这允许开发人员根据需要将不同的处理专用算法加载到RPU处理引擎,并具有非常确定的性能。
6.3.2 Virtualization with Hypervisor 使用虚拟机进行虚拟化
虚拟化这个概念我理解的就是将硬件资源抽象化,使其能够不止被单一设备使用的一种手段,可能理解比较粗浅,具体解释可以看下这篇文章:https://www.cnblogs.com/xiugeng/p/18703305。而MPSOC中的很多资源也支持虚拟化,来看下面的原文:
Zynq MPSoCs拥有一个对于Arm CortexA53处理器、中断控制器和Arm System MMU(SMMU)的硬件虚拟化扩展,可灵活地将各种操作系统组合(包括SMP和AMP)结合在一起。 下图显示了支持SMP的操作系统的示例,例如与实时操作系统(RTOS)配合使用的Linux以及使用单个虚拟机管理程序的裸机应用程序。 不过文档提到,在MPSOC中使用虚拟化技术还是比较复杂的,特别是较为底层的设计会更为复杂,例如FPGA端编写的硬件代码也必须有着能够被虚拟机调用的接口,所以文档也建议要优先确定系统架构。
6.3.3 Use of Hypervisors 虚拟机的使用
这一小节说是在讲虚拟机的使用,但是我看了下感觉更像是在讲什么是Xen Hypervisors,由于我也没用过,就还是以翻译为主了:
AMD在MPSoC中为Xen开源虚拟机管理程序分发了一个端口。Xen虚拟机管理程序提供在同一计算平台上运行多个操作系统的能力。Xen虚拟机管理程序直接在硬件上运行,负责管理中央处理器、内存和中断。多个操作系统可以在虚拟机管理程序上运行。这些操作系统称为域(也称为虚拟机(VMs))。 Xen虚拟机管理程序能够相对轻松地同时运行多个操作系统及其标准应用程序。然而,Xen不提供通用接口,使客户能够通过操作系统访问系统功能。因此,您需要遵循本节中提到的注意事项。 Xen虚拟机管理程序控制一个域(域0)以及一个或多个用户域。控制域具有特殊特权,例如以下:
直接访问硬件的能力
处理对系统I/O功能的访问的能力
与其他虚拟机的交互。
它还向外部世界暴露了一个控制界面,通过该界面控制系统。每个来宾域都运行自己的操作系统和应用程序。访客域与硬件完全隔离。
使用Xen虚拟机管理程序运行多个操作系统涉及设置主机操作系统并添加一个或多个客户操作系统。 小结
又是两章没啥实际内容的章节,或者说是我不太看得懂的章节,由于都是介绍性的内容,所以感觉干货不多,不够我们下一章就要准备上干货了,下一章讲boot的相关内容,我们下次见。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
相关推荐