系列文章目录
前言
每个 Jetson 开发套件包括多个扩展接头和连接器(统称 "接头"):
40 针扩展接头: 可让您将 Jetson 开发套件连接到现成的 Raspberry Pi HAT(顶部附加硬件),如 Seeed Grove 模块、SparkFun Qwiic 产品等。许多引脚可用作 GPIO 或 "特殊功能 I/O"(SFIO),如 I2C、I2S 等。
CSI 连接器: 该连接器上的引脚既可用作 GPIO,也可用作 DMIC、DSPK、I2S 等 "特殊功能 I/O"(SFIO)。
M.2 Key E 插槽: 该连接器上的引脚既可用作 GPIO,也可用作 I2S 等 "特殊功能 I/O"(SFIO)。
该表显示了每个 Jetson 平台上可用的扩展头:
Jetson Platform | 40-pin header | M.2 Key E slot | CSI connector * | |
---|---|---|---|---|
NVIDIA® Jetson Orin™ NX and Jetson Orin™ Nano series | ✓ | ✓ | ✓ | |
NVIDIA® Jetson AGX Orin™ | ✓ | ✓ | ✓ | |
NVIDIA® Jetson Xavier™ NX series | ✓ | ✓ | ✓ | |
NVIDIA® Jetson AGX Xavier™ series | ✓ | ✓ | ✓ | |
* Jetson-IO 将 Jetson Xavier NX 系列设备上的 CSI 连接器识别为 "CSI Nano 连接器"。CSI Nano 连接器是一个 30 针连接器。其他 NVIDIA® Jetson™ 设备上的 CSI 连接器是标准的 128 针连接器。 |
Jetson 开发套件上所有 I/O 引脚的配置都是静态定义的,并在闪存时编程到设备中。要直接更改引脚配置,必须更新平台的 pinmux 电子表格,然后将新配置闪入 Jetson 设备。
这是配置生产系统的合适方法,但对开发系统来说非常不便。因此,英伟达提供了 Jetson 扩展头工具(又称 Jetson-IO),这是一个在 Jetson 开发套件上运行的 Python 脚本,可让用户通过图形用户界面更改引脚配置。Jetson-IO 会修改设备树 Blob (DTB) 固件,以便在重启开发套件时应用新的扩展头配置。
一、运行 Jetson-IO
要启动 Jetson-IO,请在开发套件上输入以下命令:
sudo /opt/nvidia/jetson-io/jetson-io.py
1.1 主屏幕: 选择扩展头
启动 Jetson-IO 时会显示主屏幕,其中列出 Jetson 设备支持的扩展头。例如,在 Jetson AGX Xavier 上,主屏幕如下所示:
选择其中一个选项可显示标题屏幕,您可以用它来配置所选标题。
1.2 扩展头屏幕
页眉屏幕显示所选页眉的当前配置。例如,在 Jetson AGX Xavier 上,40 针扩展针座的针座屏幕如下所示:
头屏幕为您提供了两个配置 I/O 引脚的选项:
- 为兼容硬件配置: 显示 "兼容硬件 "屏幕,让您从可连接到针座的硬件模块配置列表中进行选择。
- 手动配置针座引脚: 显示 "扩展针座配置 "屏幕,让您指定要在针座上启用的功能。
- 返回: 返回主屏幕。
1.3 兼容硬件屏幕
兼容硬件屏幕显示选定针座与特定硬件模块接口的配置列表。例如,在 Jetson AGX Xavier 上,40 针扩展针座的兼容硬件屏幕如下所示:
选择配置后,Jetson-IO 会返回头屏幕,更新头配置以反映所选硬件模块:
页眉屏幕还会显示一组不同的选项:
- 保存针脚更改: 保存针座的新配置并返回主屏幕;请参阅主屏幕: 保存,如下。
- 丢弃针脚更改: 丢弃针头的新配置更改,并重新显示带有原始选项集的先前配置(见上文 "针头屏幕")。您可以再次选择配置选项,或选择 "返回 "返回主屏幕。
1.3 扩展头配置屏幕
扩展头配置屏幕显示所选头支持的特殊功能列表。括号中显示了与功能相关的引脚。例如,在 Jetson AGX Xavier 上,40 针针座的扩展针座配置屏幕如下所示:
要切换引脚功能,请按向上箭头和向下箭头键突出显示该功能,然后按 Enter 或空格键。
有关支持功能的更多详情,请参阅开发套件中 Jetson SoC 的《技术参考手册》(TRM)。
要接受所选功能集,请选择 "返回"。Jetson-IO 重新显示页眉屏幕,更新以反映所选功能的新状态。头屏幕还显示 "保存引脚更改 "和 "放弃引脚更改 "选项,如 "兼容硬件屏幕 "中所述,另外还有一个选项:
- 导出为设备树覆盖: 将所选头配置导出为新的设备树覆盖(DTBO)。它将文件存储在 /boot/ 目录中。
1.4 配置 CSI 连接器
适用于 仅适用于 Jetson Xavier NX 系列
主菜单选项 "Configure Jetson Nano CSI Connector(配置 Jetson Nano CSI 连接器)"可让您配置 Jetson Xavier NX 上的 CSI 连接器。
- 从主菜单中选择 "Configure Jetson Nano CSI Connector(配置 Jetson Nano CSI 连接器)"。
- Jetson-IO 显示 CSI 连接器屏幕。
- 从兼容硬件列表中选择。您可以添加自定义配置,如传感器软件驱动程序编程主题中的内核配置所示。
- 选择 "保存针脚更改",保存所做的选择:
- 选择 "保存并重新启动以重新配置引脚 "完成重新配置:
- Jetson-IO 会显示所修改 DTB 文件的名称,并提示您重新启动设备:
1.5 主屏幕: 保存
完成对针座配置的更改并选择针座屏幕的 "保存针脚更改 "选项后,Jetson-IO 将重新显示主屏幕。
主屏幕允许您配置或重新配置另一个针座,并显示一些附加选项:
- 保存并重新启动以重新配置引脚: 通过为标头配置应用设备树覆盖创建新的 DTB,更新用于启动 Linux 的配置文件(/boot/extlinux/extlinux.conf),并重新启动开发套件。
- 保存并退出,无需重启: 与 "保存并重启 "一样,创建新的 DTB 并更新 extlinux.conf,但不会重启开发工具包。您可以自行选择重启时间,应用新配置。
- 丢弃所有针脚更改: 丢弃对所有标头所做的更改;以原始选项集重新显示主屏幕。
注意事项
Jetson-IO 会保留您保存在配置文件中的所有配置,而不仅仅是最新的配置。如果除默认配置外还保存了一个或多个配置,每次启动时开发套件都会显示一个配置菜单,允许您选择当前配置或任何较旧的配置。
1.6 命令行界面
如果您喜欢通过命令行而不是菜单配置头文件,NVIDIA 提供了一套命令行实用程序,可提供相同的功能。下文将介绍这些实用程序。
config-by-pin: 按引脚查看头配置
显示支持的头的当前配置:
config-by-pin.py [<options>]
命令行选项指定要显示的配置部分。如果没有指定选项,则显示整个配置。
下表描述了命令行选项。
命令行选项 | 含义 |
---|---|
-h –help | 显示使用信息并退出。 |
-l –list | 列出目标平台支持的头和每个头的头编号。(命令行实用程序使用头文件编号来指代特定的头文件)。 |
-n <h> –header <h> | 指定头的头编号。如果未指定,则默认为 1,目前代表 40 引脚扩展头。该选项与 -p 一起使用,可指定一个针座和该针座上的引脚。 |
-p <p> –pin <p> | 显示扩展头编号 <h> 上引脚 <p> 的当前配置。 |
示例:
sudo /opt/nvidia/jetson-io/config-by-pin.py
sudo /opt/nvidia/jetson-io/config-by-pin.py -l
sudo /opt/nvidia/jetson-io/config-by-pin.py -p 5
sudo /opt/nvidia/jetson-io/config-by-pin.py -p 10 -n 2
config-by-function: 按特殊功能配置标头
显示并配置所有支持的标头的 I/O 功能:
config-by-function.py -h
config-by-function.py ‑l {all,enabled}
config-by-function.py ‑o {dtb,dtbo} <hfs> <hfs> ...
下表介绍了命令行选项。
命令行选项 | 含义 |
---|---|
-h –help | 显示使用信息并退出。 |
-l {all,enabled} –list {all,enabled} | 列出标头支持的功能。 all 列出所有功能;enabled 仅列出当前已启用的功能。 |
-o {dtb,dtbo} –out {dtb,dtbo} | 创建新的 DTB 或一个或多个设备树覆盖,其中包含对标头所做的配置更改。 dtb: 创建新的 DTB 文件。Linux 启动配置文件(/boot/extlinux/extlinux.conf)将更新为使用该 DTB 启动的新选项。 dtbo: 为每个重新配置的头创建设备树覆盖文件。 |
<hfs> <hfs> … | 与 -o 一起使用,可在一个或多个标头中启用一个或多个功能。每个 <hfs> 都有以下一种形式: <hn>="<f1> <f2> ..." <hn> 是页眉编号,如 1 或 2。 <f1> <f2> ...是该标头要启用的一个或多个功能的列表。 如果只指定一个功能,可以省略引号。 您也可以以其中一种形式指定 <hfs>,以便只配置标头编号 1: "<f1> <f2> ..." |
示例:
sudo /opt/nvidia/jetson-io/config-by-function.py -l all
sudo /opt/nvidia/jetson-io/config-by-function.py -l enabled
sudo /opt/nvidia/jetson-io/config-by-function.py -o dtb i2s4 spi1
sudo /opt/nvidia/jetson-io/config-by-function.py -o dtbo i2s4 spi1
sudo /opt/nvidia/jetson-io/config-by-function.py -o dtb 1="i2s4 spi1" 2=dmic2
sudo /opt/nvidia/jetson-io/config-by-function.py -o dtbo 1="i2s4 spi1" 2=dmic2
config-by-hardware: 按硬件模块配置头
显示支持的硬件模块配置列表,并为给定的硬件模块配置 Jetson 设备:
config-by-hardware.py -h
config-by-hardware.py -l
config-by-hardware.py -n <hds> <hds> ...
下表介绍了命令行选项。
Command line option | Meaning |
---|---|
-h –help | 显示使用信息并退出。 |
-l –list | 显示可用硬件模块配置列表。 |
‑n <hds> <hds> … ‑name <hds> <hds> … | 配置一个或多个头以连接指定的硬件模块。每个 <hds> 的格式如下 <hn>=<模块 <hn> 是标头编号,如 1 或 2。 <module> 是要配置标头的硬件模块。 您也可以将 <hds> 单独指定为 <module>(不含 <hn> 或 "="),以仅配置标头编号 1。 该选项会为指定的硬件模块生成一个新的 DTB 文件,并更新 Linux 启动配置文件 /boot/extlinux/extlinux.conf,加入使用该 DTB 启动的新选项。 |
示例:
sudo /opt/nvidia/jetson-io/config-by-hardware.py -l
sudo /opt/nvidia/jetson-io/config-by-hardware.py -n "Adafruit SPH0645LM4H"
sudo /opt/nvidia/jetson-io/config-by-hardware.py -n 1="Adafruit SPH0645LM4H"
二、添加对定制硬件的支持
通过为硬件模块创建设备树覆盖层,您可以使用 Jetson-IO 支持自定义硬件模块。下面几节将介绍这一过程。
2.1 设备树覆盖
要在 Jetson-IO 中添加对定制硬件的支持,你必须了解 Jetson-IO 是如何管理硬件附加组件的。硬件模块的支持由设备树覆盖文件(.dtbo 文件)处理。
硬件模块的设备树覆盖文件必须定义
- 覆盖名称(overlay-name)属性,用于指定硬件模块的名称;一个可将此覆盖与其他覆盖区分开来的唯一名称
- jetson-header-name 属性,用于指定与硬件模块相关联的扩展标头;必须根据硬件模块与哪个标头相关联,指定下表中描述的值之一
jetson-header-name
valuesHeader
Value
40-pin expansion header
Jetson 40pin Header
M.2 Key E slot
Jetson M.2 Key E Slot
CSI connector (Jetson AGX Xavier series/Orin)
Jetson AGX Xavier CSI Connector
- 兼容属性表示覆盖层支持哪种 Jetson 模块和载板组合;必须指定下表中所述的一个或多个值,具体取决于支持哪些 Jetson 平台
Jetson Platform
compatible
property valuesJetson Xavier NX (development,P3668-0000)
nvidia,p3509-00000+p3668-0000
Jetson Xavier NX (production,P3668-0001)
nvidia,p3509-0000+p3668-0001
Jetson AGX Xavier series
nvidia,p3509-0000+p3668-0001
Jetson AGX Orin
nvidia,p3737-0000+p3701-0000
nvidia,p3737-0000+p3701-0004
nvidia,p3737-0000+p3701-0005
Jetson Orin NX and Nano series
nvidia,p3768-0000+p3767-0000
nvidia,p3768-0000+p3767-0001
nvidia,p3768-0000+p3767-0003
nvidia,p3768-0000+p3767-0004
nvidia,p3768-0000+p3767-0005
nvidia,p3509-0000+p3767-0000
nvidia,p3509-0000+p3767-0001
nvidia,p3509-0000+p3767-0003
nvidia,p3509-0000+p3767-0004
nvidia,p3509-0000+p3767-0005
-
为针座定义的特殊功能 I/O 引脚(如有
-
模块上任何设备(如音频编解码器等外部集成电路)的节点和/或属性
用户可通过输入以下命令为其 Jetson 平台获取正确的兼容字符串。如果您有 Jetson Nano 开发套件,该命令还可识别 PCB 修订版:
cat /sys/firmware/devicetree/base/compatible
以 "FE-PI Audio V1 和 Z V2 "模块为例。在目标机的 /boot/ 目录中,有名称符合模式的覆盖文件:
*-fe-pi-audio.dtbo
您可以使用 fdtdump 实用程序检查覆盖文件的内容,查看覆盖名称、jetson-header-name 和兼容属性。例如,在 Jetson Nano Developer Kit 上,输入以下命令即可显示这些属性:
fdtdump /boot/tegra194-p3668-all-p3509-0000-fe-pi-audio.dtbo
2.2 创建简单的设备树覆盖层
要为 Jetson AGX Xavier 开发套件创建一个简单的设备树覆盖层以添加新的自定义属性并将其附加到 40 针扩展头,请在目标平台上创建一个名为 my-overlay.dts 的文件,内容如下:
/dts-v1/;
/plugin/;
/ {
overlay-name = "My Jetson Overlay";
jetson-header-name = "Jetson 40pin Header";
compatible = "nvidia,p2822-0000+p2888-0001";
fragment@0 {
target-path = "/";
__overlay__ {
my-custom-property = "This Is My Overlay";
};
};
};
输入以下命令将 DTS 源文件编译成叠加文件:
dtc -O dtb -o my-overlay.dtbo -@ my-overlay.dts
将新的覆盖文件复制到 /boot/ 目录后,Jetson-IO 会找到覆盖文件并允许您应用它:
sudo cp my-overlay.dtbo /boot
sudo /opt/nvidia/jetson-io/config-by-hardware.py -l
Header 1 [default]: Jetson 40pin Header
Available hardware modules:
1. Adafruit SPH0645LM4H
2. Adafruit UDA1334A
3. FE-PI Audio V1 and Z V2
4. My Jetson Overlay
5. ReSpeaker 4 Mic Array
6. ReSpeaker 4 Mic Linear Array
Header 2: Jetson AGX Xavier CSI Connector
Available hardware modules:
1. Camera Dual IMX274
2. Camera IMX274
3. Jetson Camera Dual-IMX274
4. Jetson Camera E3331 module
5. Jetson Camera E3333 module
6. Jetson Camera IMX185
7. Jetson Camera IMX390
Header 3: Jetson M.2 Key E Slot
No hardware configurations found!
sudo /opt/nvidia/jetson-io/config-by-hardware.py -n "My Jetson Overlay"
2.3 创建自定义设备树覆盖
如果你想为自定义硬件模块创建一个覆盖层,并将其连接到支持的标头之一,最简单的方法是使用 Jetson-IO 按需配置标头,并将配置导出为覆盖层。你可以使用菜单化的 Jetson-IO 脚本或相关的 config-by-... 命令行工具来完成。
例如,要为 Jetson AGX Xavier 创建一个覆盖,启用 40 针扩展针座上的 I2S 接口,请输入以下命令:
sudo /opt/nvidia/jetson-io/config-by-function.py -o dtbo i2s2
Configuration saved to /boot/kernel_tegra194-p2888-0001-p2822-0000-hdr40-user-custom.dtbo.
然后,您可以输入此命令将覆盖图转换为设备树源文件:
dtc -I dtb -O dts -o my-overlay.dts /boot/kernel_tegra194-p2888-0001-p2822-0000-hdr40-user-custom.dtbo
你可以根据自己的定制硬件修改生成的设备树源代码,添加硬件模块所需的任何额外节点和/或属性。然后重新编译设备树源代码,并将其放入 /boot/ 目录供 Jetson-IO 使用:
dtc -O dtb -o my-overlay.dtbo -@ my-overlay.dts
sudo cp my-overlay.dtbo /boot