ROS2导航系统(Jetson Orin NX)-第一章-底盘松灵Ranger Mini V3.0 gs_usb
一、问题背景
硬件:Jetson Orin NX (JetPack 6.x, 内核 5.15.148-tegra)
设备:USB-CAN 适配器 (ID 1d50:606f)
- 问题:系统内核默认不包含
gs_usb驱动,需要手动编译
二、编译gs_usb模块
2.0 克隆工具仓库并运行下载脚本
cd ~ git clone https://github.com/jetsonhacks/jetson-orin-kernel-builder.git cd jetson-orin-kernel-builder/scripts ./get_kernel_sources.sh2.1 进入内核源码目录并配置gs_usb
# 将内核源码复制到用户目录,这样就不需要 sudo 了 cp -r /usr/src/kernel/kernel-jammy-src ~/kernel_build_src # 进入源码目录 cd ~/kernel_build_src # 从当前运行的内核导出配置(保证配置与系统一致) zcat /proc/config.gz > .config # 更新配置到当前内核版本 make olddefconfig # 启用 gs_usb 模块(设置为模块,用 m 表示) scripts/config --module CONFIG_CAN_GS_USB # 验证配置是否生效(应该输出 CONFIG_CAN_GS_USB=m) grep CONFIG_CAN_GS_USB .config2.2 编译gs_usb模块
# 准备编译环境(生成必要的头文件) make modules_prepare # 只编译 USB CAN 目录下的模块(节省时间) make M=drivers/net/can/usb modules2.3 编译成功标志
# 检查编译出的模块文件 ls -la ~/kernel_build_src/drivers/net/can/usb/gs_usb.ko输出:gs_usb.ko文件存在
三、安装和加载驱动
# 创建 USB CAN 驱动目录(如果不存在) sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/net/can/usb/ # 复制生成的 .ko 文件到系统模块目录 sudo cp drivers/net/can/usb/gs_usb.ko /lib/modules/$(uname -r)/kernel/drivers/net/can/usb/ # 更新模块依赖关系 sudo depmod # 加载驱动模块 sudo modprobe gs_usb # 验证模块是否加载成功(应该看到 gs_usb) lsmod | grep gs_usb输出:
gs_usb 24576 0
can_dev 36864 2 mttcan,gs_usb
四、配置 CAN 接口
4.1 查看接口
ip link show | grep can输出:
2: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN mode DEFAULT group default qlen 10
link/can
9: can1: <NOARP,ECHO> mtu 16 qdisc noop state DOWN mode DEFAULT group default qlen 10
link/can
系统自带的 CAN 控制器显示为can0
USB-CAN 适配器显示为can1(或can0,取决于硬件)
4.2 启用并配置接口
# 启用 can1(根据实际接口调整) sudo ip link set can1 up type can bitrate 500000 # 验证状态 ip link show can1输出:state up状态正常
9: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
link/can
4.3 测试通信
# 监听 CAN 数据 candump can1输出:
can1 221 [8] 00 00 00 00 00 00 00 00
can1 281 [8] 00 00 00 00 00 00 00 00
can1 271 [8] 00 00 00 00 00 00 00 00
can1 241 [8] 00 7E 7E 7E 7E 7E 00 92
can1 251 [8] 00 00 00 04 FF FF FF FC
can1 252 [8] 00 00 00 00 00 00 00 01
can1 262 [8] 01 EB 00 28 1A 40 00 00
can1 253 [8] 00 00 00 01 FF FF FF FC