天天看点

2021-01-14

Jacinto™7处理器软件概述 — 上

本文绍了用于Jacinto™7处理器的处理器SDK。主题包括软件体系结构概述、下载和安装指南,以及如何开始在Jacinto 7 EVM开箱即用中使用SDK。

Processor SDK包含各种软件组件,允许您在Jacinto 7 soc家族上开发和部署应用程序。

用于Jacinto 7的处理器SDK Automotive是通用的软件开发工具包,它跨越了Jacinto 7 soc家族。你可以使用这个SDK来开发各种汽车专用的应用程序,比如环绕视图应用程序,停车辅助,传感器融合,前置摄像头,以及网关应用程序,I/O hub,和信息娱乐应用程序。

处理器SDK由两个安装程序包组成——一个用于开发linux端应用程序,另一个用于开发RTOS端应用程序。在一个典型的终端应用程序中,同时需要Linux和RTOS端包。

例如,大多数应用程序都会在ARM Cortex-R5F,C66X或C7X DSP上运行一些软件。这需要RTOS SDK。RTOS SDK由Linux在armcortex-A72上的登陆来补充。Linux是Linux SDK的一部分。

Linux和RTOS SDK一起提供了访问Jacinto 7上各种硬件特性所需的所有基线软件。这允许您专注于您的特定应用程序,而不必了解SOC和软件的所有低级细节。此外,在ARM Cortex-A72上,你可以用第三方操作系统代替Linux,比如UNX或Green Hills INTEGRITY操作系统。

现在让我们仔细看看Linux和RTOS SDK软件栈。Jacinto 7 SRC由多个异构cpu组成,如ARM和DSP。每个CPU的目标是执行特定的优化功能。所有cpu协同工作以实现最终的应用程序。Linux SDK运行在ARM Cortex- A72上,RTOS SDK运行在ARM Cortex R5、C66 DSP、C7X DSP等cpu上。

SDK本身可以表示为一个分层的软件体系结构。在最底层,我们有引导加载程序。bootloader用于将各种cpu从reset中引导出来,并开始运行Linux操作系统或RTOS应用程序。

U-Boot是Linux操作系统的引导程序。U-Boot也用于引导流程中较早的RTOS cpu。此外,TI还提供了一个裸机引导程序作为RTOS SDK的一部分。这可以被第三方OS供应商使用,或者,在某些情况下,它也可以用于快速引导Linux和RTOS cpu。

接下来,我们有操作系统本身。它由Linux内核和A72上的管理程序(可选)组成。在dsp和R5F上,我们有称为SYS-BIOS的TI RTOS。

与操作系统相关的是处理器间通信库,也称为IPC。IPC允许不同cpu上的各种软件应用程序相互同步和交换消息。这种消息交换使用公共共享内存和中断来帮助减少消息传递、开销和延迟。

接下来,我们为不同的CPU提供了不同的设备驱动程序。在Linux上,您可以获得常见的Linux内核驱动程序,如UART、ethernet、PCI、USB,以及用于多媒体和图形的特定硬件加速器驱动程序。在RTOS方面,SDK包含各种外围驱动程序,作为平台开发工具包(简称PDK)的一部分。RTOS SDK还包含计算机视觉和深度学习库和深度学习应用。在ARM R5F上也提供了AutoSAR MCAL来帮助开发AutoSAR应用程序。

为了加速异构SOC上的应用程序开发,SDK还提供了中间件库,如用于ADAS应用的OpenVX、用于图形的OpenGL和用于多媒体的GStreamer。OpenVX运行在RTOS cpu上,允许从A72访问深度学习、摄像头和硬件加速器的RTOS函数。各种中间件抽象了SOC的异构性,为Linux A72应用提供了统一和简化的视图。

最后,SDK还提供了演示应用程序,演示如何集成各种软件组件并构建特定于汽车的应用程序。具体来说,RTOS SDK包含显示环绕视图和深度学习分析的演示,网关演示显示以太网交换机和CAN外设的使用,集成的MCU演示在ARM R5F上显示安全性,MCU,和响应时间演示。

RTOS SDK还包含用于ARM R5F、C6X和C7X DSP的编译器和代码生成器工具。GCC编译器用于Linux A72。所有这些组件都打包在两个自包含的Linux和RTOS SDK安装程序中。

让我们看看如何下载和安装不同的Linux和RTOS SDK。要下载Linux SDK,请转到Processor SDK Linux Automotive产品下载页。此页面包含Linux SDK安装程序和其他工具和辅助资料。您需要下载安装程序二进制文件,如下所示。您也可以通过进入用户指南首页在线浏览用户指南,如下所示。

类似地,要下载RTOS SDK,请转到Processor SDK RTOS Automotive产品下载页。这个页面包含了RTOS SDK安装程序以及其他工具和辅助资料。您需要下载SDK安装程序tar文件,如下所示。要运行深度学习演示,还需要下载演示输入数据集tar文件,如下所示。您也可以通过进入用户指南主页浏览在线用户指南,如下所示。再一次,Linux和RTOSSDK是相辅相成的,下载并安装Linux和RTOSSDK是非常重要的。

接下来,我们将安装Linux和RTOS SDK。请注意,您需要在Linux Ubuntu 64位机器上执行这些步骤。推荐使用100G磁盘空间的Ubuntu 18.04。像VirtualBox或VMware这样运行Ubuntu的虚拟机也可以使用。

要安装Linux SDK,请创建一个文件夹来安装SDK。任何文件夹都可以。如下所示安装SDK。按照屏幕上的步骤,安装到新创建的文件夹中。首先,在web浏览器中打开用户指南主页,如下所示。

接下来,让我们看看如何导航到Linux SDK用户指南的重要部分。在Linux上,可以从这个主页开始获取SDK文档。要开始,请参阅快速入门指南。关于不同Linux SDK组件的详细信息,如U-Boot内核,请参阅基础组件。有关EVM设置和其他有用提示和开发人员说明的详细信息,请转至操作指南。

接下来,我们安装RTOS SDK。同样,请注意您需要在Linux Ubuntu 64位机器上执行这些步骤。要安装RTOS SDK,需要创建一个文件夹来安装SDK。任何文件夹都可以。如这里所示安装SDK。首先,在web浏览器中打开用户指南主页,如下所示。

现在让我们看看如何导航到RTOS SDK用户指南的重要部分。所有的RTOS SDK文档都可以从这个主页开始。要开始,请参见《开始》。关于不同RTOS SDK组件的详细信息,如SYS/BIOS、TIDL、OpenVX,请参见SDK组件。EVM安装的详细信息请参见EVM安装。有关其他有用的提示和开发人员说明,请访问开发人员说明部分。

首先,我们将简要介绍组成SDK的各种组件,并详细介绍安装SDK后在哪里可以找到它们。然后,我们将学习如何设置构建环境,以便您可以根据需要修改和重建特定的组件或演示。最后,我们将介绍在Jacinto 7 EVM上运行演示的步骤。

现在让我们仔细看看Processor SDK Linux包的内容。重申一下,处理器SDK Linux运行在Jacinto 7平台上的Cortex-A内核上,并提供了支持快速应用程序开发的基本构建块。Processor SDK Linux构建在分层架构之上,以提供主要围绕Linux和Linux兼容组件构建的软件授权。对于大多数组件,源代码都包含在/board-support文件夹下。

现在我们来看一下SDK中包含的特定组件。在最底层,我们有ATF,或ARM信任固件,这是ARM社区项目的一个端口。ATF为运行在ARM V8体系结构上的secure vault软件提供了参考实现。

然后我们有引导加载程序—在本例中是U-Boot。U-Boot支持两个阶段的引导过程—一个最小的第一阶段,然后是一个功能更丰富的第二阶段引导程序。U-Boot包括单独的配置,用于构建两个阶段的每个阶段。正常的开发工作流程将利用引导加载程序的两个阶段,而对于更优化的生产工作流程,可能会绕过一个或两个阶段。

处理器SDK Linux包还包括一个Jailhouse形式的静态分区hypervisor。这可以用来将系统划分为独立的域,然后可以从独立的虚拟机实例映射和使用这些域。Processor SDK包含了一个运行两个虚拟机实例的配置示例,这两个实例实际上将Linux作为操作系统运行。

然后我们进入下一层,操作系统——在本例中是Linux。SDK中的Linux支持基于社区支持的LTS,或者长期稳定的内核版本。在这种工作模式下,SDK发行版每年都会迁移到最新的LTS内核。Linux的源代码可以放在一个单独的文件夹中,其中包含了Jacinto 7支持的大多数外设的内核和驱动程序。

一些外围设备包括托管在内核树、图形模块和视频编码/解码模块之外的驱动程序,这些驱动程序具有内核树外驱动程序支持的特定示例。在Linux内核下,使用RP消息和RemoteProc模块支持处理器间通信。同样,连接模块的外设驱动程序,如PCI,以太网,I2C。而存储外围设备(如MMC、UFS)则作为Linux下的标准驱动程序提供。

SDK包括一个预构建的根文件系统,以及使用Yocto重建根文件系统所需的脚本和配置配方。作为SDK安装的一部分,设置了用于交叉编译的主机环境,并将相应的依赖项捆绑在/linux-devkit文件夹下。

最后,处理器SDK Linux依赖于GCC编译器,需要按照我在SDK下载页面中包含的链接下载32位和64位工具链版本。

重要说明——PSDKLA包括用于以太网交换机固件的预构建二进制文件、以太网固件的源代码、演示,同样,OpenVX组件也包含在PSDKLA包中。

现在,让我们看看如何设置构建环境,以便您可以修改和重新构建SDK组件。设置主机环境和组件级构建的步骤总结在"Quick Start Guide" section on "SDK Documentation Landing Page."部分。

下载并安装SDK之后,按照用户指南“设置主机环境”一节中描述的步骤进行操作。首先运行SDK安装脚本。这是一个一次性步骤,它将提取和填充/linux-devkit文件夹下的内容。默认情况下,这会安装64位的工具链版本。如果同时需要32位和64位工具链,请从SDK下载页面下载并安装以下链接。

然后运行setup.sh。这将验证主机端依赖关系,安装所需的主机端包,并为根文件系统、NFS TFTP导出和许多其他有用的实用程序设置环境。

现在我们来看一下如何重建特定的SDK组件。SDK包括基于makefile的构建系统,用于有选择地重新构建一个或多个SDK组件。当只修改一个特定的组件时,因此需要重新构建时,这就很方便了。

第一步,确保安装了基于makefile的构建系统所需的主机包。在此之后,确保将默认路径更新为指向安装交叉编译工具链的位置。通过这个步骤,我们现在可以使用基于makefile的构建系统重新构建组件了。

在SDK安装的顶级文件夹中,可以调用makefile来构建特定的SDK组件。大多数基本组件,如内核、U-Boot、管理程序,都支持作为makefile目标。您可以使用自动完成特性查看支持的目标列表。

SDK还包括完整SDK构建的Yocto配方,包括根文件系统。有关Yocto构建设置的具体说明,请参见用户数据中相应的章节。

典型的开发工作流将涉及到对特定组件的更新——例如,对内核配置或设备树配置的更新。对于这些,可以利用基于makefile的组件级构建。使用Yocto需要额外的专业知识,可以更好地利用文件系统构建或完整的SDK构建。

现在我们来看看准备和运行开箱即用的二进制文件的步骤。SDK包包括用于引导映像和根文件系统的预构建的二进制文件。您可以使用“mksdboot”脚本对SD卡进行分区,并使用预构建的文件系统和引导映像填充它。

一旦创建了卡,就可以使用它在Jacinto 7 EVM上使用SD卡引导模式启动Linux内核。这样,您应该能够引导到Linux提示符,并在EVM的显示端口上看到墙纸。

至此,我们将切换上下文,并将重点放在处理器SDK RTOS包上。现在让我们仔细看看处理器SDK RTOS包的内容。

RTOS SDK包采用了模块化的方法,大多数SDK组件都放在文件夹的各个组件级别上。首先,RTOS SDK构建在SYS-BIOS之上作为操作系统。它运行在R5F核心和C7X和C66X DPS上。

TI的裸机引导加载程序、系统固件二进制文件、处理器间通信库和各种外围驱动程序都包含在PDK组件中。然后,在管理Jacinto 7平台上集成的以太网交换机的R5F核心上运行以太网交换机固件。交换机固件负责交换机的配置,并使运行于各种其他CPU内核的客户端直接通过交换机发送和接收流量。

硬件加速的计算机视觉和深度学习库作为单独的组件包含在RTOSSDK中。OpenVX支持灵活的基于图形流水线的方法,用于实现视觉和计算应用程序,利用异构体系结构和Jacinto7平台上的加速器核心。TI对OpenVX标准的实现包含在TIOVX组件下。

在安全MCU孤岛上运行的软件——即对AUTOSAR的MCAL支持和CAN响应安全授权的演示——都包括在MCU软件组件中。

/vision_apps文件夹包含多个演示,这些演示集成了来自SDK的各种组件,以实现用于视觉处理的系统应用程序,如环绕视图应用程序和自动泊车辅助。在/vision_apps文件夹下还包括一些基本的演示,可以用于快速的硬件校验或作为其他应用程序开发的起点。/gateway-demos组件包括一个CAN以太网桥接应用程序的示例。

除了SDK包的内容之外,还需要单独下载其他工具,如GCC编译器。关于设置主机开发环境的详细信息,请参阅用户指南。

现在,让我们看看在Jacinto 7 EVM上设置构建环境、构建和运行开箱即用演示的步骤。构建和运行说明包括在Vision Apps用户指南的一部分。你可以从顶级的PSDK文档链接导航到这个。

作为第一步,需要设置生成环境。按照用户指南“构建环境设置”一节中描述的说明进行操作。构建环境设置好之后,就可以使用基于makefile的构建机制来构建SDK或特定组件。构建SDK的步骤,包括支持的构建配置和makefile选项,在用户指南的构建指令一节中有描述。最后,在用户指南的“运行说明”部分描述了用构建二进制文件准备SD卡和运行SDK演示的步骤。

在此基础上,我们成功地完成了针对Jacinto 7平台的process SDK Automotive培训课程。

具体来说,我们将以surround view park assist的一个用例作为案例研究。

在本课程中,您将学习如何将硬件框图映射到jac7 SOC。接下来您将学习如何设计软件来实现这样的用例。最后,您将学习如何使用处理器SDK在TI EVM上构建和运行具有代表性的环绕视图泊车辅助演示。请注意,环绕视野泊车辅助只是众多可在Jacinto7设备上实现的ADAS应用程序的一个示例。

首先让我们从硬件框图的角度来看看基于摄像头的环绕视野泊车辅助系统的外观。在输入端,我们以一辆车的四个侧面上放置的四个摄像头为例。摄像机通常以原始裸格式捕获数据,并通过FPD链路序列化器(如UB953)将数据传输到中央ECU。UB960在中央ECU,这是反序列化和转换为CSI2流,这是馈送到Jacinto 7 SOC。在输出端,我们可以将多个显示器连接到Jacinto 7,它可用于在显示设备上可视化环绕视图输出。

此外,以太网UART还可以用于传输额外的传感器或对象数据输入,如来自激光雷达、雷达和超声波传感器的数据。连接到Jacinto 7的其他设备包括用于运行时数据和代码存储的LPDDR4、用于文件系统和其他非易失性数据存储的eMMC、用于电源的PMIC。在一个典型的系统中,也有一个安全MCU,通过CAN或以太网与汽车网络的其他部分通信。对于Jacinto 7,该安全MCU集成在Jacinto 7中。OSPI通常被用作集成安全MCU的引导介质。

在定义了硬件框图之后,现在让我们看看如何使用jacinto7 cpu和硬件加速器实现环绕视野泊车辅助应用程序。如前所述,摄像头数据通过UB960反序列化器CCSI2端口输入到Jacinto 7。该数据在Jacinto 7 SOC中由CSI2RX硬件块捕获。

然后,数据被提供给ISP,即图像信号处理器,由它将数据从原始的裸格式转换为YUV格式。ISP的输出然后馈送给GPU的环绕视图可视化和显示。ISP数据也可以压缩、存储或传输到eMMC这样的非易失性内存中。这就形成了可视化管道。

同时,ISP数据也会被发送到泊车辅助的分析中。首先,我们使用VPAC和DMPAC硬件引擎做了一些预处理。这里的数据是使用VPAC的硬件缩放器缩小的。然后利用VPAC的长度失真采集硬件采集鱼眼长度失真数据。

然后将数据输入到DMPAC中的密集光流引擎中。密集光流引擎提供像素级的运动信息,这是用于分析算法,如深度使用结构的运动和运动分割。这些预处理后的数据然后被送入C7X MME和C66进行CNN处理和计算机视觉算法。

这些算法的输出通常是对象和语义信息,如行人、车辆、车道、交通标志和深度图的位置。这也被称为环境模型。然后将目标信息反馈给arm A72和arm R5F上的融合部件规划和控制算法学习。这些算法通过融合摄像头、激光雷达、超声波和雷达传感器生成的环境信息,自动导航并将汽车停在停车场。

正如我们在这个数据流中所看到的,Jacinto 7可以用于完成从环绕视图可视化、摄像头感知以及导航和控制的完整环绕视图泊车辅助应用程序。高百万像素的输入数据可以由各种硬件加速块有效地处理,而不需要大量的CPU负载。高百万像素的CNN处理还允许软件在自动驾驶和停车时识别诸如车道标志、物体、路缘等细节。

现在让我们看看数据流如何映射到来自SDK的各种软件组件。Jacinto 7 SOC由各种异构cpu组成。每个CPU都针对特定的优化功能。不同cpu上的软件协作以实现预期的用例或应用程序。

SOC通过MCU R5F上的引导加载程序开始执行,引导SOC上的不同cpu。我们有运行在arm R5F, C66和C7x dsp上的TI-RTOS或SYS-BIOS。注意,每个CPU运行一个唯一的TI-RTOS实例。A72运行Linux操作系统或第三方操作系统,如Unix。MCU R5还运行AutoSAR操作系统和AutoSAR软件堆栈。

在每个CPU上运行的处理器间通信(IPC)用于在所有CPU之间同步和交换消息。MCU 21R54专门控制VPAC、DMPAC、摄像机捕获、显示、视频编码、视频解码等各种硬件加速器。C7x MMA为基于cnn的算法运行TI深度学习库,而C66为传统的计算机视觉算法运行division库。

在Linux端,我们通过OpenGL运行图形。存储和网络驱动程序也由Linux控制。MCU 20R5F用于运行以太网交换机固件,MCU 10R5F用于运行AutoSAR堆栈。和MCU 3 R5s免费供客户使用。

使用OpenVX作为中间件,将R5和dsp的硬件加速器和深度学习功能导出到A72。OpenVX允许我们使用A72中简单统一的API构建跨SOC的硬件和软件块的数据流图。这让你可以专注于A72上的最终应用,而不是R5和DSP的底层硬件细节。最后,您可以自定义并在各种CPU上添加自己的软件和算法,最终集成的环绕视图和泊车辅助应用程序位于A72上。

现在让我们看看如何运行SDK中的一些演示,它有这样的硬件和软件数据流。首先,打开RTOS SDK用户指南主页,进入入门页面。在这个页面上,点击ADAS, Vision, DL, Vision apps链接打开Vision apps用户指南。Vision apps包含源代码和有关环绕视图的信息以及泊车辅助演示的分析。

导航到“应用程序演示环绕视图3d环绕视图”应用程序页面。此页面包含有关环绕视图演示的信息,包括演示的简要描述、数据流和性能信息。它还提供了如何运行演示的步骤。

同样,导航到应用程序演示DL,或深度学习演示,自动代车泊车应用程序2页。这个页面有关于停车演示分析的信息。我也鼓励你看看vision apps用户指南中的其他演示页面。有多种演示,从简单的CNN演示,到简单的摄像头演示,显示环回演示。了解这些演示将有助于您开始应用程序开发。

这里显示的是在SDK演示中实现的surround视图的数据流。这也可以在前面显示的演示页面中找到。类似地,这是在SDK演示中实现的自动代客泊车的数据流。最终的应用程序可能看起来有所不同,但总体而言,高级设计和软件架构与SDK演示类似。

然后您可以通过以下两种方法之一在EVM上进行这些演示。在第一个选项中,您可以将预构建的演示二进制文件和Linux文件系统闪存到SD卡上。请参见RTOSSDK用户指南主页上的开箱即用演示。在第二个选项中,您可以从源代码构建演示,然后创建一组新的二进制文件来闪存SD卡。有关从源代码生成和运行演示的信息,请参阅《vision apps用户指南》。

要运行预构建的二进制文件,需要从SDK下载页面下载一个单独的预构建的tar文件。下载预构建的tar文件后,按照本页上提到的步骤在TI EVM上创建和运行演示。要构建和运行源代码,请访问division apps用户指南。从这里开始,构建并运行page。按照本页上提到的步骤在TI EVM上构建和运行演示。

最后,让我向您展示如何在SDK中找到所有这些演示的源代码。在RTOS SDK中,进入vision apps文件夹。您将看到如图所示的环绕视图应用程序和如图所示的自动代客泊车应用程序。我还鼓励您看看简单的CNN和camera应用程序,以理解如何从较小的构建块构建更大的应用程序。

继续阅读