环境信息

  • Ubuntu 20.04.4 LTS 64-bit
  • Linux kernel: tegra 5.10.65
  • JetPack 5.0.1-b118

目标

在Jetson AGX Orin上接入一块自定义的数据采集板,使用SPI通信接收到数据。

流程

我现在有的设备是一台Jetson AGX Orin 和一块采集板,采集板通过Orin的40 pin接口接入。总体来说,主要分为三个步骤:

  1. 调整pinmux,打开SPI接口;
  2. 载入SPI设备驱动,用设备树文件自定义设备节点;
  3. 为采集板编写自己的硬件驱动程序。

我在安装和配置的过程中,遇到了各种问题,Orin的资料和文档也比较少,以此记录一下=v=

Pinmux(busybox配置)

引脚复用(Pin Multiplexing),根据Orin的 40 pin GPIO expansion header,为需要的pin打开SPI功能。比如我用的是SPI1,那就需要打开19、21、23、24、26。

一般Jetson机器配置pinmux的方法是使用jetson-io,但我目前版本的Orin使用jetson-io会报错。报错信息为:

Traceback (most recent call last):File "/opt/nvidia/jetson-io/jetson-io.py", line 25, in <module>from Jetson import boardFile "/opt/nvidia/jetson-io/Jetson/board.py", line 28, in <module>import HeadersFile "/opt/nvidia/jetson-io/Headers/__init__.py", line 34, in <module>if hdr.HDR.default:
AttributeError: module 'Headers.__init++' has no attribute 'HDR'

根据Nvidia开发者论坛上的信息,官方会在下一次版本发布中修复。
所以在修复之前先不使用jetson-io,使用busybox手动修改register里的值来配置pinmux。也可以修改dtb文件来配置,但流程比较复杂,而且目前没有找到很完整的Orin配置文档,所以用busybox手动配置。这种配置方法在重启机器后就会失效,需要重新配置,但配置起来较为方便。

下载

sudo apt-get install busybox

使用方法是:

busybox devmem <32-bit address> # 查看register里的值
busybox devmem <32-bit address> w <value> # 为register写入value

找到register的地址

  • 打开Jetson Orin Technical Reference Manual(TRM)

  • 在TRM里找到pin的名字,一般是根据关键词搜索,比如我要配置SPI1,就搜索“SPI1”,在Pinmux Registers章节下找到相关的register,记录下offset。

  • 根据刚才找到的register的名字,确定属于哪个pad controll group。比如刚才找到的PADCTL_G2_SPI1_CS0_0就在G2 PAD Control Registers底下,看到是对应的PADCTL_A13。在TRM里搜索“PADCTL_A13”,在System Address Map的表格里找到对应的起始地址。记录起始地址。


  • register address = 起始地址 + offset,比如 PADCTL_G2_SPI1_CS0_0,就是0x0243d008。

给register赋值

具体要赋的值可以在刚才的TRM里查询,比如打开SPI1的话,可以这样赋值。

busybox devmem 0x0243d008 w 0x00000400
busybox devmem 0x0243d018 w 0x00000450
busybox devmem 0x0243d028 w 0x00000400
busybox devmem 0x0243d038 w 0x00000400
busybox devmem 0x0243d040 w 0x00000400

修改完可以立即生效。

SPI驱动和设备树(device tree)

Orin上是有spidev的驱动的,只是开机时没有启动。临时启动可以使用 modprobe spidev,也可以添加到/etc/modules-load.d/modules.conf里开机自动加载。
但我需要一个自定义的spi节点,所以需要修改设备树文件。方法是要通过另一台主机flash dtb,只刷有关dtb的内容。

找到要修改的dtb文件

在Orin上查看:

dmesg | grep -i dts

可以看到文件名是 ../hardware/nvidia/platform/t23x/concord/kernel-dts/tegra234-p3701-0000-p3737-0000.dts

刷机

找到另一台Ubuntu的主机,我是在Windows下用的Ubuntu 18的虚拟机。

  • 下载安装 Nvidia SDK Manager。打开软件,在Step 1 和 Step 2 里打勾并下一步,下载需要的JetPack,在Step 3里 Skip 需要Flash的部分,只下载。这时候也可以不插入Orin机器。如果不修改下载地址,最后会在home目录下出现 ~/nvidia/nvidia_sdk/JetPack_5.0.1_DP_Linux_JETSON_AGX_ORIN_TARGETS,里面有刷机需要的flash.sh

  • 下载和Orin版本一致的kernel源码(https://developer.nvidia.com/embedded/jetson-linux ),解压,并在 /Linux_for_Tegra/source/public下解压kernel_src.tbz2,这是kernel的源码。

  • 找到要修改的dts文件。根据刚刚在Orin上找到的文件路径,找到相应的文件。打开后并没有看到spi相关的内容,所以在include的文件里找,可以找到spi的内容在/Linux_for_Tegra/source/public/kernel_src/hardware/nvidia/platform/t23x/concord/kernel-dts/cvb/tegra234-p3737-0000-a00.dtsi

  • 按照自己的需求修改文件的内容,比如要换名字或者compatible。

  • 进行kernel内核编译。
    编译需要的包:

sudo apt install build-essential bc
sudo apt install flex
sudo apt install bison

编译的完整步骤:https://blog.csdn.net/huiyuanliyan/article/details/92803764

PS. 此处也许也可以只编译DTB文件。

  • 编译完成后的文件夹下,arch/arm64/boot/底下就有dts文件夹,把里面的内容复制并替换到之前用SDK Manager下载的JetPack文件夹下:~/nvidia/nvidia_sdk/JetPack_5.0.1_DP_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/kernel/dtb
  • 把Orin以Recovery mode连接到这台主机。
  • 开始刷机:
./flash.sh -k A_kernel-dtb jetson-agx-orin-devkit mmcblk0p1

结束后Orin会自己启动,完成。

验证

查看设备树是否已有新加入的节点:

ls /sys/firmware/devicetree/base/

插入硬件设备

根据硬件设备选择合适的接口连接。比如我要用到的是40-pin header,对于Orin机器来说,有箭头标注的地方是pin1。连接时要注意对应,不能插反。

载入自定义硬件驱动程序

对于写好的硬件驱动程序,编译成.ko文件,加载驱动:

sudo insmod mydriver.ko

如果在/dev/下找到自己自定义的设备,即驱动程序配置成功。
关闭这个驱动:

sudo rmmod mydriver.ko

相关资料

  • 40pin图:https://jetsonhacks.com/nvidia-jetson-agx-orin-gpio-header-pinout/
  • Orin 修改pinmux
  • SPI1 配置:https://forums.developer.nvidia.com/t/spi1-not-work-on-xavier/72141
  • Orin信息:https://developer.nvidia.com/embedded/learn/jetson-agx-orin-devkit-user-guide/howto.html
  • 设备树文件转化:
sudo dtc -I dtb -O dts A.dtb > A.dts
sudo dtc -I dts -O dtb A.dts > A.dtb
  • Jetson 教程:https://blog.csdn.net/huiyuanliyan/category_9291206.html
  • 驱动程序编写:https://www.bilibili.com/video/BV12A411J7DG

Jetson AGX Orin 连接自定义硬件设备(pinmux + 设备树)相关推荐

  1. Jetson AGX Orin刷机教程,奶奶看完都说会了!

    最近在鼓捣NVIDIA AGX Jetson Orin,刷机过程中踩了一些坑,记录一下刷机的流程供有需求的友友们避坑,废话不多说,直接进入正题喽! 文章目录 一.刷机前的准备 二.刷机过程 总结 一. ...

  2. Nvidia Jetson AGX Orin 初体验

    一.开箱 Nvidia Jetson AGX Orin是今年Nvidia推出的唯一的开发套件,相比Jetson Nano 472GFLOP算力.Jetson Xaiver 32TOPS(INT8)算力 ...

  3. 玩转Jetson AGX Orin—— Quick Start

    也是最近看到的新闻,小马要在22年底量产基于orin的域控制器,本来还在考虑买Xaiver还是买orin呢,Xaiver现在本来就溢价很严重,这下就不纠结了,直接买orin了,先看一下NVIDIA这几 ...

  4. 玩转Jetson AGX Orin官方套件

    玩转Jetson AGX Orin官方套件 Jetson AGX Orin产品问题点汇总 序号 异常现象描述 问题定位 处理时长/H 1 Jetson AGX Orin正常启动,但显示黑屏 DP线有限 ...

  5. Jetson AGX Orin 刷机采坑全过程

    参考: Nvidia Jetson AGX Orin 初体验 Jetson AGX Orin 开发工具包入门 NVIDIA Jetson 开发工具包快速开始 公司新买回来Orin,通电连上屏幕没有显示 ...

  6. NVIDIA Jetson AGX Orin的计算能力

    我看了一下,官网还真是没有更新: 其实一个很简单的方法,就是直接在Jetson上利用Devicequary就可以查到计算能力: 可以看到NVIDIA Jetson AGX Orin的计算能力是8.7.

  7. Jetson AGX Orin上部署YOLOv5_v5.0+TensorRT8

    一.首先是捋请思路 ①刷机后的Orin上环境是:CUDA11.4+CUDNN8.3.2使得后续需要的部署环境只能为TensorRT8.x(这是根据cuda和cudnn的版本确定的,安装见:三.Tens ...

  8. Nvidia Jetson AGX Orin 64G深度学习环境配置的超详细教程

    新手小白环境配置成功!特此开贴记录~~~ 我接下来的写的内容基本上都是参考的该博客:Jetson AGX Orin安装Anaconda.Cuda.Cudnn.Pytorch.Tensorrt最全教程 ...

  9. FG96-8CH 搭配Realsense D457 在Jetson AGX Orin/Xavier上的展示

    微信交流号: shenzhukeji 硬件: SOM  平台:Jetson AGX Xavier Devkit (NVIDIA或国产套件均可) GMSL相机:Intel Realsense D457 ...

最新文章

  1. [译]怎样用VisualStudio查看非托管代码
  2. 横向瀑布流android,RecyclerView实现瀑布流布局
  3. CoolPad backdoor CoolReaper
  4. 实习二 栈、队列和递归算法设计 (题目:停车场管理 )
  5. Privoxy shadowscocks代理
  6. redis 发布订阅实际案例_【赵强老师】Redis的消息发布与订阅
  7. 什么是工业光纤收发器,工业收发器的作用是什么?
  8. 【白皮书分享】2021中国数字经济时代人工智能生态白皮书.pdf(附下载链接)...
  9. 卷积神经网络处理猫和狗图片(改进网络)
  10. pyqt:使用qrc文件配置图片资源,生成py文件
  11. java 文本提取_Java 提取PDF 文本内容
  12. 添加分隔符|的几种方法
  13. 计算机进制之间的转换(2进制、10进制、8进制、16进制)
  14. 美食源码php,美食类门户网站仿豆果网php源码
  15. word2019未找到MathPage.wll文件的解决方法
  16. 外贸邮箱用哪个邮箱号比较好,是多少?
  17. L-ink复刻笔记(记录)
  18. matlab根号下是多项式,多项式求根
  19. Jetbrains系列产品
  20. 为什么你学了那么多,却没赚到钱?

热门文章

  1. 程序员的春节对联,你喜欢哪一副?
  2. 公司企业邮箱如何申请?怎样申请企业邮箱账号?
  3. 16 岁高中生成功在 iPhone 7 上安装 Ubuntu 20.04 桌面!
  4. Android面试中常见问题集锦
  5. 微信小程序分享好友功能
  6. java 脚本启动 linux,linux可运行的shell脚本与设置开机服务启动(自己总结)
  7. 通过新兴的DeFi概念改善链上债务——期权
  8. 分布式应用程序是什么
  9. 登录华为ssl vpn secoclient客户端时,接收返回码超时解决方案
  10. Centos7配置阿里云yum源