NVIDIA Holoscan SDK v2.9.0

AJA 视频系统

AJA 提供各种经过验证的专业视频 I/O 设备,并且由于 NVIDIA 和 AJA 之间的合作关系,Holoscan 为 AJA NTV2 SDK 和设备驱动程序提供持续支持。

AJA 驱动程序和 SDK 为 NVIDIA GPU 提供 RDMA 支持。此功能允许直接从 AJA 卡捕获视频数据到 GPU 内存,这显著减少了 GPU 视频处理应用程序的延迟和系统 PCI 带宽,因为从处理管道中消除了系统内存到 GPU 的复制。

以下说明描述了在具有 PCIe 插槽的 NVIDIA 开发者套件上设置和使用具有 RDMA 支持的 AJA 设备所需的步骤。请注意,Holoscan 的 AJA NTV2 SDK 支持包括所有的 AJA 开发者产品,尽管以下说明仅针对 Corvid 44 12G BNCKONA XMKONA HDMI 产品进行了验证。

注意

向 NVIDIA 开发者套件添加 AJA 设备是可选的。Holoscan SDK 具有一些元素,可以在带有 AJA 设备的情况下运行,并具有上述附加功能,但这些元素也可以在没有 AJA 的情况下运行。例如,有一些 Holoscan 示例应用程序具有 AJA 实时输入组件,但它们也可以将视频重放作为输入。同样,延迟测量工具可以测量有或没有 AJA 设备可用的视频 I/O 子系统的延迟。

本节介绍如何在 Clara AGX 开发者套件上安装 AJA 硬件。请注意,AJA 硬件也与 NVIDIA IGX Orin 开发者套件兼容。

要将 AJA 视频系统设备安装到 Clara AGX 开发者套件中,请卸下 Clara AGX 背面的两个螺丝,从而卸下侧面板。这提供了对两个可用 PCIe 插槽的访问,这两个插槽在 Clara AGX 开发者套件用户指南 中标记为 13 和 14。

agx_pcie_slots.jpg

虽然这些插槽在物理上是相同的 PCIe x16 插槽,但它们通过不同的 PCIe 桥连接到 Clara AGX。只有插槽 14 与 RTX6000 dGPU 共享相同的 PCIe 桥,因此必须将 AJA 设备安装到插槽 14 中才能获得 RDMA 支持。下图显示了安装在插槽 14 中的 Corvid 44 12G BNC 卡,这是启用 RDMA 支持所必需的。

aja_card_installation.jpg

AJA NTV2 SDK 包括启用 AJA 设备所需的驱动程序(内核模块)以及用于从应用程序访问 AJA 设备的 SDK(头文件和库)。

每次系统重启时都必须加载驱动程序,并且必须在主机系统上本地加载驱动程序(即,不在容器内)。无论应用程序是在本地还是在容器内运行,都必须加载驱动程序(请参阅 在容器中使用 AJA 设备)。

SDK 只需要安装在将用于编译具有 AJA 支持的应用程序的本地主机和/或容器上。Holoscan SDK 容器已经安装了 NTV2 SDK,因此在这些容器内构建启用 AJA 的应用程序(例如参考 Holoscan 应用程序)无需额外的步骤。但是,在本地主机上本地安装 NTV2 SDK 和实用程序对于 AJA 设备的初始设置和测试非常有用,因此以下说明涵盖了此本地安装。

注意

总而言之,本节中的步骤必须在本地主机上、容器外部执行,以下步骤只需执行一次

以下步骤每次重启后都需要执行

以下步骤是可选的(但在初始设置期间建议执行)

使用 AJA NTV2 驱动程序和 SDK 构建脚本

scripts 目录中包含 aja_build.sh 脚本,该脚本可用于下载 AJA NTV2 源代码,构建驱动程序和 SDK,加载驱动程序,并运行 ntv2enumerateboards 实用程序以列出连接到系统的 AJA 板卡。要下载和构建驱动程序和 SDK,只需运行脚本

复制
已复制!
            

$ ./scripts/aja_build.sh


要选择性地让脚本在构建完成后加载驱动程序并列出连接的设备,请添加 –load-driver 标志

复制
已复制!
            

$ ./scripts/aja_build.sh --load-driver


注意

本文档其余步骤介绍了如何手动构建和加载 AJA NTV2 驱动程序和 SDK,使用构建脚本时不需要这些步骤。但是,在重启系统后,仍然需要通过运行 load_ajantv2 命令重新加载驱动程序,如 加载 AJA NTV2 驱动程序 中所述。

下载 AJA NTV2 SDK 源代码

导航到您希望下载源代码的目录,然后执行以下操作以克隆 NTV2 SDK 源代码。

复制
已复制!
            

$ git clone https://github.com/nvidia-holoscan/libajantv2.git $ export NTV2=$(pwd)/libajantv2


注意

这些说明使用官方 AJA NTV2 仓库 的一个分支,该分支由 NVIDIA 维护,可能包含 Holoscan SDK 支持所需的其他更改。这些更改将尽可能推送到官方 AJA NTV2 仓库,目标是最大限度地减少或消除两个仓库之间的差异。

安装用于 RDMA 支持的 NVIDIA 开源内核模块

如果要使用 RDMA 支持构建 AJA NTV2 驱动程序,则必须安装开源 NVIDIA 内核模块,而不是默认的专有驱动程序。如果驱动程序是从 NVIDIA 驱动程序安装程序包安装的,请按照 NVIDIA 开源 GPU 内核模块源代码 GitHub 页面上的说明进行操作。如果 NVIDIA 驱动程序是使用 Ubuntu 软件包通过 apt 安装的,则将已安装的 nvidia-kernel-source 软件包替换为相应的 nvidia-kernel-open 软件包。例如,以下显示已安装 545 版本驱动程序

复制
已复制!
            

S dpkg --list | grep nvidia-kernel-source ii nvidia-kernel-source-545 545.23.08-0ubuntu1 amd64 NVIDIA kernel source package


以下命令将用相应的 nvidia-kernel-open 驱动程序替换它们

复制
已复制!
            

S sudo apt install -y nvidia-kernel-open-545 $ sudo dpkg-reconfigure nvidia-dkms-545


然后必须重启系统以加载新的开源内核模块。

构建 AJA NTV2 驱动程序

以下命令将构建启用 RDMA 支持的 AJA NTV2 驱动程序。构建完成后,内核模块 (ajantv2.ko) 和加载/卸载脚本 (load_ajantv2unload_ajantv2) 将输出到 ${NTV2}/driver/bin 目录。

复制
已复制!
            

$ export AJA_RDMA=1 # Or unset AJA_RDMA to disable RDMA support $ unset AJA_IGPU # Or export AJA_IGPU=1 to run on the integrated GPU of the IGX Orin Devkit (L4T >= 35.4) $ make -j --directory ${NTV2}/driver/linux


加载 AJA NTV2 驱动程序

运行任何使用 AJA 设备的应用程序都需要加载 AJA 内核驱动程序,即使应用程序是从容器内运行的也是如此。

注意

要启用 AJA 的 RDMA,请确保在 AJA NTV2 驱动程序之前加载 NVIDIA GPUDirect RDMA 内核模块

每次机器重启后,都必须使用 load_ajantv2 脚本手动加载 AJA 驱动程序

复制
已复制!
            

$ sudo sh ${NTV2}/driver/bin/load_ajantv2 loaded ajantv2 driver module

注意

NTV2 环境变量必须指向先前在 构建 AJA NTV2 驱动程序 中描述的构建驱动程序的 NTV2 SDK 路径。

必须禁用安全启动才能加载未签名的模块。如果在加载模块时发生任何错误,请参阅下面的 故障排除 部分。


构建和安装 AJA NTV2 SDK

由于 AJA NTV2 SDK 已加载到 Holoscan 容器中,因此为了构建或运行任何 Holoscan 应用程序,此步骤并非严格必需。但是,这会构建和安装各种工具,这些工具对于在 Holoscan 容器外部测试 AJA 硬件的运行非常有用,并且是 测试 AJA 设备 中提供的步骤所必需的。

复制
已复制!
            

$ sudo apt-get install -y cmake $ mkdir ${NTV2}/cmake-build $ cd ${NTV2}/cmake-build $ export PATH=/usr/local/cuda/bin:${PATH} $ cmake .. $ make -j $ sudo make install


测试 AJA 设备

以下步骤依赖于上一步 构建和安装 AJA NTV2 SDK 构建和安装的工具。如果发生任何错误,请参阅下面的 故障排除 部分。

  1. 为了确保 AJA 设备已正确安装,可以使用 ntv2enumerateboards 实用程序

    复制
    已复制!
                

    $ ntv2enumerateboards AJA NTV2 SDK version 16.2.0 build 3 built on Wed Feb 02 21:58:01 UTC 2022 1 AJA device(s) found: AJA device 0 is called 'KonaHDMI - 0' This device has a deviceID of 0x10767400 This device has 0 SDI Input(s) This device has 0 SDI Output(s) This device has 4 HDMI Input(s) This device has 0 HDMI Output(s) This device has 0 Analog Input(s) This device has 0 Analog Output(s) 47 video format(s): 1080i50, 1080i59.94, 1080i60, 720p59.94, 720p60, 1080p29.97, 1080p30, 1080p25, 1080p23.98, 1080p24, 2Kp23.98, 2Kp24, 720p50, 1080p50b, 1080p59.94b, 1080p60b, 1080p50a, 1080p59.94a, 1080p60a, 2Kp25, 525i59.94, 625i50, UHDp23.98, UHDp24, UHDp25, 4Kp23.98, 4Kp24, 4Kp25, UHDp29.97, UHDp30, 4Kp29.97, 4Kp30, UHDp50, UHDp59.94, UHDp60, 4Kp50, 4Kp59.94, 4Kp60, 4Kp47.95, 4Kp48, 2Kp60a, 2Kp59.94a, 2Kp29.97, 2Kp30, 2Kp50a, 2Kp47.95a, 2Kp48a

  2. 为了确保 RDMA 支持已编译到 AJA 驱动程序中并且运行正常,可以使用 rdmawhacker 实用程序(使用 <ctrl-c> 终止)

    复制
    已复制!
                

    $ rdmawhacker DMA engine 1 WRITE 8388608 bytes rate: 3975.63 MB/sec 496.95 xfers/sec Max rate: 4010.03 MB/sec Min rate: 3301.69 MB/sec Avg rate: 3923.94 MB/sec

从容器访问 AJA 设备需要驱动程序在主机上本地加载(请参阅 加载 AJA NTV2 驱动程序),然后必须使用 --device docker 参数与容器共享由 load_ajantv2 脚本创建的设备,例如 –device /dev/ajantv20:/dev/ajantv20

  1. 问题: sudo sh ${NTV2}/driver/bin/load_ajantv2 命令返回错误。

    解决方案

    1. 确保 AJA 卡已正确安装并已供电(请参阅下面的 2.a)

    2. 检查是否禁用了安全启动验证

      复制
      已复制!
                  

      $ sudo mokutil --sb-state SecureBoot enabled SecureBoot validation is disabled in shim

      如果启用了安全启动验证,请使用以下步骤禁用它

      复制
      已复制!
                  

      $ sudo mokutil --disable-validation

      • 输入临时密码并重启系统。

      • 重启后,当您看到蓝色屏幕 MOK 管理时,按任意键

      • 选择“更改安全启动状态”

      • 输入您选择的密码

      • 选择“是”以在 shim-signed 中禁用安全启动

      • 重启后,您可以再次验证是否在 shim 中禁用了安全启动验证。

  2. 问题: ntv2enumerateboards 命令未找到任何设备。

    解决方案

    1. 确保 AJA 设备已正确安装并被系统检测到(请参阅 安装 AJA 硬件

      复制
      已复制!
                  

      $ lspci 0000:00:00.0 PCI bridge: NVIDIA Corporation Device 1ad0 (rev a1) 0000:05:00.0 Multimedia video controller: AJA Video Device eb25 (rev 01) 0000:06:00.0 PCI bridge: Mellanox Technologies Device 1976 0000:07:00.0 PCI bridge: Mellanox Technologies Device 1976 0000:08:00.0 VGA compatible controller: NVIDIA Corporation Device 1e30 (rev a1)

    2. 确保 AJA 驱动程序已正确加载(请参阅 加载 AJA NTV2 驱动程序

      复制
      已复制!
                  

      $ lsmod Module Size Used by ajantv2 610066 0 nvidia_drm 54950 4 mlx5_ib 170091 0 nvidia_modeset 1250361 8 nvidia_drm ib_core 211721 1 mlx5_ib nvidia 34655210 315 nvidia_modeset

  3. 问题: rdmawhacker 命令输出以下错误

    复制
    已复制!
                

    ## ERROR: GPU buffer lock failed


    解决方案: 需要编译启用 RDMA 支持的 AJA 驱动程序。按照 构建 AJA NTV2 驱动程序 中的说明进行操作,确保在构建驱动程序时不要跳过 export AJA_RDMA=1

上一篇 第三方硬件设置
下一篇 Emergent Vision Technologies (EVT)
© 版权所有 2022-2024,NVIDIA。 上次更新于 2025 年 1 月 27 日。