Jetson 模组
[√] Jetson AGX Orin
Jetson 软件
[√] JetPack 5.1.3
问题描述
我现在在使用一块PCIe Gen3 x16的FPGA板卡与Orin Developer Kit相连,但Orin无法识别我的设备,我检查了各引脚的输出电压,发现只有3.3V输出,没有12V输出,我在以往的帖子中看到在Jetpack 5.0.2中已经修正了这个问题,但是我的Jetpack版本为5.1.3,仍然存在这个问题,我不知道如何去解决。同时我作为Linux和Jetson新手,也不敢对内核驱动进行修改,希望能够得到解答
错误码
把这里替换为错误码(无需其他信息)
错误日志
dmesg.txt (70.2 KB)
这是我的dmesg信息,希望有用
这是我的版本信息
你好,
- 确认 FPGA 板卡在其他主板(如 PC)上能被正常识别,排除板卡本身问题。
- 检查 PCIe 槽供电针脚,确认 12V 线缆和接口无损坏
设备树调整,举例
regulator@105 { // p3737_vdd_3v3_pcie
...
// 原有配置可能有 "regulator-boot-on"
// 建议移除该属性
// 并确保控制引脚为正确的GPIO
regulator-boot-on;
gpio = <&tegra_main_gpio TEGRA234_MAIN_GPIO(H, 4) GPIO_ACTIVE_HIGH>;
...
};
regulator@114 { // p3737_vdd_12v_pcie
...
// 同样建议移除 "regulator-boot-on"
// 并检查控制引脚
regulator-boot-on;
...
};
- 刷写后,使用万用表测量 PCIe 槽 12V 是否上电。
- 用
lspci
命令确认 FPGA 是否被识别。
- 进一步检查设备树 regulator 节点和 GPIO 配置是否与硬件实际一致。
请问您可以提供一个更加详细的重新刷写设备树的流程吗?我之前没搞过Linux以及Jetson开发。此外,我应该对之前的内核做备份吗?备份方法及恢复方法是什么?
参考下面这个流程。
一、设备树(DTB)重新刷写详细流程
1. 准备工作
- 准备一台Ubuntu主机(建议20.04/22.04)。
- 安装好对应JetPack版本的BSP包(Linux_for_Tegra),可通过SDK Manager自动下载或手动下载解压。
- 获取或修改好你需要刷写的设备树dtb文件(如
tegra234-p3701-0000-p3737-0000.dtb
)。
2. 将设备置于Recovery模式
- 断电,连接好Type-C数据线(开发板RECOVERY口)。
- 按住RECOVERY键,短按RESET键后松开RECOVERY键。
- 在主机上运行
lsusb
,出现NVIDIA Corp.
相关设备(如0955:7023)即为成功进入Recovery模式。
3. 替换设备树文件
- 将你的dtb文件拷贝到
Linux_for_Tegra/kernel/dtb/
目录下,覆盖原有同名dtb。
cp <your_new>.dtb Linux_for_Tegra/kernel/dtb/
4. 刷写设备树(不重刷系统)
cd Linux_for_Tegra
sudo ./flash.sh -r -k kernel-dtb jetson-agx-orin-devkit mmcblk0p1
-r
表示保留原有rootfs,不重刷系统。
-k kernel-dtb
表示只刷写dtb分区。
- 刷写完成后,设备会自动重启,新的设备树生效。
官方文档 - Flashing Support — NVIDIA Jetson Linux Developer Guide
我按照您给出的方案进行了dtb文件的反编译、修改与编译,并进行了设备树的重新刷写,发现系统并没有自动重启,命令行窗口报错如msg.txt文件所示,我改写的dts文件如dts.txt所示,具体我做的修改如下:
将regulator@105和regulator@114的regulator-boot-on删除了,并将regulator@105的gpio改为了gpio = <0x14 0x3c 0x00>;并将pcie_ep@141a0000的nvidia,refclk-select-gpios字段修改为了gpios = <0x14 0x7c 0x00>;请您帮我看一下是哪里出了问题?
msg.txt (19.6 KB)
每个回复只能贴一个文件,我把我的dts.txt文件放到这个回复里面
dts.txt (552.5 KB)
应该是GPIO配置格式错误引起,尝试一下恢复预定义宏并验证硬件连接。
使用NVIDIA提供的宏定义
// 电源控制GPIO(regulator@105)
gpio = <&tegra_main_gpio TEGRA234_MAIN_GPIO(H, 4) GPIO_ACTIVE_HIGH>;
// PCIe参考时钟选择GPIO
nvidia,refclk-select-gpios = <&tegra_aon_gpio TEGRA234_AON_GPIO(AA, 5) GPIO_ACTIVE_HIGH>;
设备树节点依赖
&tegra_main_gpio {
status = "okay";
};
&tegra_aon_gpio {
status = "okay";
};
再重新编译设备树(示例)
sudo ./dtc -I dts -O dtb -o tegra234-p3701-0000-p3737-0000.dtb tegra234-p3701-0000-p3737-0000.dts
刷设备树
sudo ./flash.sh -r -k kernel-dtb jetson-agx-orin-devkit mmcblk0p1
另外,你是说每个回复里只能加一个附件吗?(我们应该是允许上传3个附件)
谢谢您的回复,我按照您的方法重新写了dts文件,将regulator@105中的gpio字段改成了<&tegra_main_gpio TEGRA234_MAIN_GPIO(H, 4) GPIO_ACTIVE_HIGH>;将pcie_ep@141a0000中的nvidia,refclk-select-gpios字段改成了<&tegra_aon_gpio TEGRA234_AON_GPIO(AA, 5) GPIO_ACTIVE_HIGH>;并在dts文件中写了
&tegra_main_gpio {
status = “okay”;
};
和
&tegra_aon_gpio {
status = “okay”;
};
具体的dts文件如下,但是报错信息为

认为我这一句中有语法错误,这一句就是<&tegra_aon_gpio TEGRA234_AON_GPIO(AA, 5) GPIO_ACTIVE_HIGH>;我用cat命令检查了也没有发现特殊字符,是我哪里写错了吗?
dts(1).txt (552.8 KB)
要包含 #define TEGRA234_AON_GPIO(AA, 5) 69
宏定义。
在dts 文件中最上面包含文件
#include <dt-bindings/gpio/tegra234-gpio.h>
#include <dt-bindings/gpio/gpio.h>
再重新执行。
非常抱歉我仍然没有解决我的问题,我现在的dts文件如下所示,在执行dtc编译命令的时候跟我说第三行有语法错误,是不是我下载的Jetpack包没有包含这两个库?我只解压了Linux_for_Tegra文件夹,我是否还需要解压其他文件夹?同时,我还尝试了SOLUTION/TUTORIAL: Jetson ORIN Enabling PCIE power - Jetson & Embedded Systems / Jetson AGX Orin - NVIDIA Developer Forums这个帖子中的dtb文件,在烧录进板子后仍然没有自动重启,随后我又测试了Jetpack包中原有的dtb文件,发现也没有自动重启,输出信息如下msg.txt所示,在有的帖子中我看到可能跟显示器连接有关,我的显示器连接是DP转HDMI,不知是否有影响
msg信息如下
msg(1).txt (19.6 KB)