TDA4 QNX SDK

QNX SDK部分

1. 概述

Processor SDK QNX(PSDK QNX)和处理器SDK RTOS(PSDK RTOS)共同构成了TI公司Jacinto7系列SOC的多处理器软件开发平台。SDK提供了一套全面的软件工具和组件,帮助用户在受支持的J7 SOC上开发和部署应用程序。

本文档随Processor SDK QNX (PSDK QNX) release 07_02_00一起提供。该版本支持QNX SDP 7.0 QNX SDP 7.1,并且已经在TI J721e Alpha和Beta EVM上进行了健全性测试。此软件包中包含的二进制文件旨在帮助开发、调试和/或系统设计解决特定用例。二进制文件不用于生产。

注意:QNX SDP 7.1是建议在生产中使用的。对QNX SDP 7.0的支持将在未来的版本中取消。

本版本中提供的用于在J7 EVM上启用QNX内容的源代码仅作为示例提供。源代码仍在开发和调试中。预计可能会出现问题,并在可能的情况下提供修补程序。PSDK QNX 07_02_00可能会发生API源代码更改。本包的目的是提供QNX SDP 7.0和QNX SDP 7.1开发目标,并显示TI S/W可交付成果的基本集成。

TI J721E Alpha EVM或Beta EVM可作为来自TI的DRA82x和TDA4x系列设备的测试平台。

Jacinto 7的Processor SDK QNX(PSDK QNX)是PSDK RTOS的附加包,它支持QNX环境的PSDK RTOS功能和内容。PSDK QNX用于将多个包关联并验证在一起,从而提供一个经过验证的开发环境。

PSDK QNX版本引用的包有:

——TI PSDK RTOS(Processor SDK RTOS);

——J721E EVM QNX板级支持包。

包中包含了为QNX7.0构建的示例二进制文件,它展示了J721E EVM上TI正在开发的构建块。

2. 开始

Processor SDK RTOS (PSDK RTOS) for Jacinto 7需要单独下载。

2.1 下载和安装PSDK QNX

2.1.1 步骤1:安装QNX开发包

为了构建QNX环境,必须安装QNX软件中心的多个软件包。这包括QNX SDP和相关的软件包。请参阅发行说明的“软件依赖项”部分,以获取这些软件包的列表,并确保它们已安装在主机构建计算机上。

安装QNX SDP时,默认安装位置为:/home/$USER/qnx710

你可以在任何地方安装它,但请在“${PSDK_RTOS_PATH}/vision_apps/vision_apps_tools_path.mak”中相应地更新版本和路径:

export QNX_SDP_VERSION ?= <700 or 710>

ifeq ($(QNX_SDP_VERSION),700)

  export QNX_BASE ?=

  export QNX_CROSS_COMPILER_TOOL ?= aarch64-unknown-nto-qnx7.0.0-

else

 export QNX_BASE ?=

 export QNX_CROSS_COMPILER_TOOL ?= aarch64-unknown-nto-qnx7.1.0-

endif

2.1.2 步骤2:下载PSDK RTOS和PSDK QNX

PSDK RTOS可以从ti.com网站获得。PSDK RTOS和PSDK QNX版本必须相同。PSDK RTOS包需要安装在build计算机中。在此之后,我们将此安装目录称为$PSDK_RTOS_PATH

同样地,下载PSDK QNX包(ti-processor-sdk-qnx_xx_xx_xx.tar.gz)并将其提取到$PSDK_RTOS_PATH:

tar -xvf ti-processor-sdk-qnx_xx_xx_xx.tar.gz -C $PSDK_RTOS_PATH

2.1.3 步骤3:安装PSDK QNX

一旦提取了PSDK QNX包,就可以从$PSDK_RTOS_PATH文件夹运行psdkqa/qnx/scripts/psdk_qnx_setup_qnx710.sh来完成安装。psdk_qnx_setup_qnx710.sh生成如下内容:

——psdkqa/pdk中PDK的QNX特定副本;

——psdkqa/bspTI修改的QNX BSP

必须在psdkqa/qnx/scripts/psdk_qnx_setup_qnx710.sh中正确设置以下变量,脚本才能正常运行。

PDK_VERSION=${PSDK_RTOS_PATH}/pdk_jacinto_07_01_00_XX                  (The location of the extracted PDK package.  Typically found in ${PSDK_RTOS_PATH})

QNX_BSP_PATH=${QNX_BASE}/bsp/                                          (The location of the extracted bsp that was downloaded from QNX Software Center)

QNX_BSP_NAME=BSP_ti-j721e-am752x-evm_br-710_be-710_SVNxxxxxx_JBNyy.zip (The QNX BSP zip file)

QNX_BSP_VERSION=710_SVNxxxxxx_JBNyy                (The QNX BSP version)

引用的QNX_BASE是QNX SDP安装的位置。该脚本假定为默认位置,因此如果安装在其他位置,请提供正确的路径。

注意:默认情况下,QNX软件中心会将BSP归档文件下载到/home/$USER/qnx710/bsp,但是用户可以修改此路径。

在运行psdk_qnx_setup_qnx710.sh脚本之前,必须解压BSP文件。

修改psdkqa/qnx/scripts/psdk_qnx_setup_qnx710.sh脚本后,使用以下命令从PSDK RTOS路径启动。

cd ${PSDK_RTOS_PATH}

./psdkqa/qnx/scripts/psdk_qnx_setup_qnx710.sh

2.2 编译和运行PSDK QNX和Vision Apps demos

——Vision Apps编译环境用作PSDK RTOS和PSDK QNX的集中构建。要构建和运行PSDK QNX和vision apps demo,应遵循《vision_apps用户指南》中的详细说明。请参阅《vision_apps用户指南》的“构建和运行”部分。你可以使用最新的联机文档或本地文档${PSDK_RTOS_PATH}/vision_apps/docs/user_guide/index.html

有关设置EVM、引导模式等的详细信息,请参阅J721e的EVM设置

有关调试RTOS或QNX内核的步骤,请参阅针对J721e的CCS设置一节。

2.3 资源管理器

PSDK QNX包提供在PSDK QNX组件中描述的A72资源管理器:

——SCI

——UDMA

——IPC

——Shared Memory Allocator

这些资源管理器必须在系统初始化期间启动。这方面的例子可以在${PSDK_QNX_PATH}/qnx/scripts/user.sh中看到。此脚本文件在初始化过程中使用,并包含在vision apps用户指南的Build and Run部分的生成的SD卡映像中。

2.4 PSDK QNX启动模式

PSDK QNX addon package支持3种不同的启动模式:

——SPL/Uboot,

——SBL+BootApp(SD Boot)

——SBL+BootApp(OSPI Boot)

详细信息参看vision apps userguideBuild and Run部分。

2.4.1 SPL (Uboot)引导模式

对于SPL/Uboot选项,需要以下二进制文件,它们是PSDKLA包的一部分:

R5 bootloader (tiboot3.bin),

A72 bootloader (tispl.bin),

U-boot (U-boot.img)

DMSC System firmware binary (sysfw.itb).

2.4.2 SBL引导模式

当使用SBL/BootApp引导流时,请注意在QNX启动之前已经配置了以下资源集。这些设置主要是通过使用SBL或Boot App中的“Board_init()”调用来完成的,这些调用反过来又调用Board library中的init函数:

PLL请参阅“gboardplllclkcfgmu[]”和“gboardplllclkcfgmain[]”结构数组中为MCU和MAIN域初始化的PLL列表,如board_pll.c文件所示:

https://git.ti.com/cgit/processor-sdk/pdk/tree/packages/ti/board/src/j721e_evm/board_pll.c

Clock请参阅“gBoardClkModuleMcuID[]”和“gBoardClkModuleMainID[]”数组中为MCU和MAIN域初始化的Clock列表,如board_clock.c文件所示:

https://git.ti.com/cgit/processor-sdk/pdk/tree/packages/ti/board/src/j721e_evm/board_clock.c

Pinmux在J721E EVM上,检测主板和子板,并对这些板使用的主要功能进行基本pinmux设置。任何其他功能都必须定制(针对客户板等)。pinmux配置是使用以下文件中的函数“Board_pinmuxConfig”调用的:

https://git.ti.com/cgit/processor-sdk/pdk/tree/packages/ti/board/src/j721e_evm/board_pinmux.c

可以选择相关的MCU和MAIN域pinmux(取决于连接到主EVM的子板),其中配置显示在这些文件中:

https://git.ti.com/cgit/processor-sdk/pdk/tree/packages/ti/board/src/j721e_evm/include/board_pinmux.h

https://git.ti.com/cgit/processor-sdk/pdk/tree/packages/ti/board/src/j721e_evm/J721E_pinmux.h

https://git.ti.com/cgit/processor-sdk/pdk/tree/packages/ti/board/src/j721e_evm/J721E_pinmux_data.c

对不同的EVM子板还有其他文件。

DDRDDR4内存配置是通过下面文件中的Board_DDRInit()函数进行的:

https://git.ti.com/cgit/processor-sdk/pdk/tree/packages/ti/board/src/j721e_evm/board_ddr.c

Boot media引导应用程序将保留先前使用的引导介质(OSPI闪存或SD卡),但句柄关闭,保持以允许A72上的软件接管控制的状态:

——MMCSD bootSD卡已经释放,准备好让HLOS进行控制

——OSPI flashFlash关闭并在SPI模式下重新初始化,因此HLOS可以根据需要重置Flash,并使用自己的OSPI重新初始化。

3. 版本特点

3.1 PSDK QNX软件特点

7.0.2版本中的特点如下:

——将SMMU的支持添加到CPSW2G驱动中;

——K3conf utility;

——支持QNX SDP 7.1版本;

——将新的enet-lld 集成到A72 CPSW2G & CPSW9G驱动中

——将gPTP的支持添加到CPSW9G Virtual driver

——A72 driver for CPSW2G + gPTP

——Shared Memory Allocator资源管理器

——SCIClient资源管理器

——A72 OpenVx Integraion

——A72 Vision Apps Demo Support

——A72 driver for CPSW9G

——UDMA资源管理器

——IPC资源管理器

——Vision Apps Encode Application

——SBL Boot flow support for QNX

3.2 软件依赖

下面的对QNX SDP 7.1版本的依赖:

TDA4 QNX SDK_第1张图片

另外肯定需要RTOS SDK,这就不用强调了。

需要注意的是:如果想支持SPL启动模式,需要下载PSDK LINUX 07_02_00包,以获得prebuilt binaries,这一点需要注意。

下面是设备支持和确认信息:

4. PSDK QNX组件

4.1 TDA4 QNX BSP

BSP必须在QNX软件中心下载,因为这样的BSP更加正式。

为了创建一个合并的构建过程,并允许支持脚本来创建SD卡内容,需要将BSP提取到PSDK QNX构建环境中的文件夹,如下所示。

# Unzip the BSP

mkdir -p ${PSDK_RTOS_PATH}/psdkqa/qnx/bsp

cd ${PSDK_RTOS_PATH}/psdkqa/qnx/bsp

unzip ${QNX_BASE}/bsp/BSP_ti-j721e-am752x-evm_br-mainline_be-710_.zip

4.1.1 TI对TDA4 BSP的修改

Memory Carveout

具有预定义物理地址的内存段必须在QNX BSP IFS构建文件中留出,这样内存就不会分配给其他程序,只能由远程内核使用。

通过修改启动行以使用“-r”选项来指定要留出的段。例如,要在J7 QNX BSP上的物理地址0xA0000000处保留0x5000000字节,参数的生成文件将是(下面突出显示):

+keeplinked] startup-j721e-evm -v -r0xA0000000,0x5C000000,1

R5显示支持:

对于R5显示支持,启动时需要提供-d选项来指定不配置DSS和eDP。

[+keeplinked] startup-j721e-evm -v -r0xA0000000,0x5C000000,1 -d

参考TI Build文件:

TI build文件在qnx/scripts/bsp中。

# Copy in TI specific build scripts and settings to allow building of a QNX-IFS which supports

# vision_apps demos

cp ${PSDK_RTOS_PATH}/psdkqa/qnx/scripts/bsp/j721e-evm-ti.build ${PSDK_RTOS_PATH}/psdkqa/qnx/bsp/images/

4.2 QNX Screen release

QNX Screen package必须从QNX Software Center下载。

QNX Screen package必须在GPU支持的情况下安装和运行。

QNX Screen package可以选择被A72控制DSS(显示子系统),PSDK QNX包默认是R5F控制DSS。

4.2.1. Enabling R5 Control Of DSS

默认情况下,PSDK QNX将默认为eDP显示,由R5F MCU控制。要使系统以R5F控制的显示方式运行,必须寻址的项目默认设置为:

——libWFDdummy.so必须被QNX graphics.conf文件使用。参考${PSDK_QNX_PATH}/qnx/scripts/user__dss_on_r5.sh

——QNX BSP build文件中的QNX BSP startup命令行选项必须指定“-d”选项;

——ENABLE_DSS标准必须被定义,请参考Vision Apps User Guide中的“Build Instructions”部分。

4.2.2. Enabling A72 Control of DSS

要禁用显示器的R5F控制,并启用显示的A72控制,必须解决的问题有:

——libWFDdummy.so必须被QNX graphics.conf文件使用。参考${PSDK_QNX_PATH}/qnx/scripts/user__dss_on_a72.sh

——QNX BSP build文件中的QNX BSP startup命令行选项严禁指定“-d”选项

——ENABLE_DSS标准必须被取消定义,请参考Vision Apps User Guide中的“Build Instructions”部分。

4.3 QNX USB and Networking Packages

QNX USB and Networking包必须从QNX软件中心下载。

4.4 SCI Client Resource Manager

SCI Client资源管理器(tisci-mgr)支持多个用户使用PSDRKA的sciclient库,而不干扰彼此的请求。它提供了一种将事务序列化到DMSC的机制。

注意:tisci-mgrSYSFW 信息记录到slogger

4.5 IPC Resource Manager

4.5.1 概述

IPC资源管理器(tiipc-mgr)提供了一个与处理器无关的API,可用于多处理器环境中处理器之间的通信。

IPC资源管理器提供了一个用户库(tiipc-usr),它将IPC LLD API公开给QNX应用程序,以便通过IPC资源管理器进行通信。IPC LLD API在PDK文档中有详细描述。

4.5.2 例程应用

软件包中还提供了一个IPC示例应用程序(IPC_test)。要使用此应用程序,需要构建适当的远程内核二进制文件并将其放置在目标文件系统上。需要以下远程内核应用程序:

有关远程CPU内核固件构建说明,请参阅IPC LLD PDK文档。

构建远程内核固件后,将映像复制到rootfs分区中的目标文件系统。应根据需要备份现有的固件二进制文件。ex02*固件二进制文件应重命名为bootloader所需的固件名称。例如:

cp ex02_bios_multicore_echo_test_c7x_1_release.xe71 ${ROOTFS}/lib/firmware/j7-c71_0-fw

cp ex02_bios_multicore_echo_test_c66xdsp_1_release.xe66 ${ROOTFS}/lib/firmware/j7-c66_1-fw

cp ex02_bios_multicore_echo_test_c66xdsp_2_release.xe66 ${ROOTFS}/lib/firmware/j7-c66_0-fw

cp ex02_bios_multicore_echo_test_mcu3_1_release.xer5f ${ROOTFS}/lib/firmware/j7-main-r5f1_1-fw

cp ex02_bios_multicore_echo_test_mcu3_0_release.xer5f ${ROOTFS}/lib/firmware/j7-main-r5f1_0-fw

cp ex02_bios_multicore_echo_test_mcu2_1_release.xer5f ${ROOTFS}/lib/firmware/j7-main-r5f0_1-fw

cp ex02_bios_multicore_echo_test_mcu2_0_release.xer5f ${ROOTFS}/lib/firmware/j7-main-r5f0_0-fw

cp ex02_bios_multicore_echo_test_mcu1_1_release.xer5f ${ROOTFS}/lib/firmware/j7-mcu-r5f0_1-fw

cp ex02_bios_multicore_echo_testb_mcu1_0_release.xer5f ${ROOTFS}/lib/firmware/j7-mcu-r5f0_0-fw

在复制固件并引导目标之后,可以从命令行运行ipc_test(下面给出了示例输出):

TDA4 QNX SDK_第2张图片

在执行ipc_test之前,请确保tiipc-mgr正在运行。请注意,测试应用程序不会退出。

4.6 UDMA Resource Manager

UDMA资源管理器(tiudma-mgr)支持多个用户在不干扰彼此请求的情况下使用UDMA功能。

4.7 Shared Memory Allocator

共享内存分配器资源管理器(shmemallocator)支持多个用户从共享内存区域分配内存。这个共享内存区域作为QNX启动参数的一部分从QNX内存中分离出来。

4.8 CPSW2G DEVNP driver

4.8.1 概述

CPSW2G DEVNP网络驱动程序可以看作是底层CPSW2G底层驱动程序与io-pkt(其上的协议栈)的软件基础结构之间的“粘合剂”。驱动程序的“下半部分”专门用于与PDK的cpsw&udma低级驱动程序交互,而驱动程序的“上半部分”专门用于io-pkt。

注意:J721E CPSW2G DEVNP网络驱动程序支持SMMU。有关如何启用此功能的详细信息,请参阅常见问题解答和应用程序说明。

4.8.2 运行

用SD卡引导开发板。在QNX提示符下,运行下面的命令,加载SD卡,然后启动可执行文件:

tisci-mgr

tiudma-mgr

io-pkt-v6-hc -d cpsw2g verbose=0xff

dhclient -nw am0

cpsw2g驱动程序将所有驱动程序创建的线程配置为运行掩码为0x1。这是为了确保所有线程都在A72的核心0上运行。因此,在使用cpsw2g驱动程序启动io-pkt-v6-hc时,可以选择指定命令前缀“on –C 0”。

对于调试跟踪,在启动DEVNP驱动程序之前运行下面的命令,并使用增加的详细参数(例如:verbose=0x3ff)启动驱动程序,这将显示所有驱动程序slog消息:

slog2info –c

slog2info -w &

4.8.3 其它的步骤

——运行“if_up -p am0”来确认接口是否就绪;

——运行“ifconfig am0 up”进行链路连接;

——运行“dhclient -nw am0”用于DHCP服务器提供IP地址;

——运行“ifconfig -v”检查分配的IP地址和状态;

——运行“tcpdump -e”查看TCP通信。

4.8.4使用其它选项启动驱动

我们可以运行下面的命令来获取DEVNP驱动程序的用法:

use devnp-cpsw2g.so

运行带PHY的cpsw2g devnp驱动:

io-pkt-v6-hc –d cpsw2g verbose=0x0

以1Gbps的MAC-to-MAC模式运行cpsw2g devnp驱动:

io-pkt-v6-hc –d cpsw2g verbose=0x0,mac-to-mac=1,speed=1000

以1Gbps带gPTP的MAC-to-MAC模式运行cpsw2g devnp驱动:

io-pkt-v6-hc –d cpsw2g verbose=0x0,ptp=1,mac-to-mac=1,speed=1000

获得cpsw2g端口的动态IP地址:

dhclient -nw am0

获得cpsw2g端口的静态IP地址:

ifconfig am0 up

ifconfig am0 <static_ip_address>

4.9 CPSW9G DEVNP driver

4.9.1 概述

CPSW9G DEVNP网络驱动程序实现为“虚拟”驱动程序,该驱动程序与运行在R5F核心上的Ethernet Firmware Switch固件通信。控制信息传输通过IPC完成。使用UDMA将RX和TX数据分组传递到CPSW9G端口。

MCU2_0上的CPSW9G固件利用CPTS定时器实现了时间同步模块,用于PTP支持,以与网络上的主时钟同步。TimeSync模块配置了具有以下默认属性的PTP堆栈。

——Ordinary Clock

——IEEE 802.3 Transport

——Peer Delay Mechanism (P2P)

有关时间同步模块的设计,请参阅EthFW文档以了解详细信息。CPSW9G DEVNP驱动程序包含了一个选项,可以通过带有PTP_GET_TIME命令的devctl()返回CPTS计时器时间戳。请参考示例ptp_test,了解如何使用PTP_GET_TIME命令从cpsw9g devnp驱动程序获取CPTS计时器时间戳。

4.9.2 运行

用SD卡引导开发板。在QNX提示符下,运行下面的命令,加载SD卡,然后启动可执行文件:

tisci-mgr

tiipc-mgr

tiudma-mgr

io-pkt-v6-hc -d cpsw9g verbose=0xff

dhclient -nw an0

cpsw9g驱动程序将所有驱动程序创建的线程配置为运行掩码为0x1。这是为了确保所有线程都在A72的内核0上运行。因此,在使用cpsw9g驱动程序启动io-pkt-v6-hc时,可以选择指定命令前缀“on –C 0”。

对于调试跟踪,在启动DEVNP驱动程序之前运行以下命令,并使用增加的verbose参数(例如:verbose=0x3ff)启动驱动程序这将显示所有驱动程序slog消息

slog2info –c

slog2info -w &

4.9.3 其它步骤

——运行“if_up -p am0”来确认接口是否就绪;

——运行“ifconfig am0 up”进行链路连接;

——运行“dhclient -nw an0”用于DHCP服务器提供IP地址;

——运行“ifconfig -v”检查分配的IP地址和状态;

——运行“tcpdump -e”查看TCP通信。

4.9.4 使用其它选项启动驱动

我们可以运行下面的命令来获取DEVNP驱动程序的用法:

use devnp-cpsw9g.so

运行带gPTP的cpsw9g devnp驱动:

io-pkt-v6-hc –d cpsw9g ptp=1

4.10 K3conf QNX utility

K3CONF是基于Linux用户空间的独立应用程序的QNX端口,旨在提供一种快速简便的方法来动态诊断TI基于K3架构的处理器。K3CONF旨在提供与在遗留TI平台上运行的OMAPCONF类似的体验。

注意:这是正在进行的工作!请不要期望事情在任何方面都是完整的。使用风险自负。

可以运行k3conf –help命令获取帮助。

你可能感兴趣的:(嵌入式,dsp,自动驾驶,c++,qnx)