news 2026/9/16 9:15:06

LubanCat RK3588 实时 Linux 开发(六):启用 gs_usb 驱动并完成 USB-CAN 收发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LubanCat RK3588 实时 Linux 开发(六):启用 gs_usb 驱动并完成 USB-CAN 收发

摘要:说明CONFIG_CAN_GS_USB=m的含义,完成模块生成、加载、SocketCAN 接口配置和安全收发测试。

适用对象:使用兼容 GS-USB 协议的 USB-CAN 适配器,并希望在 LubanCat 上使用 SocketCAN 的开发者。收发测试需要第二个 CAN 节点或真实总线。

文章目录

    • 本篇要解决什么问题
      • 一个很常见的误区
    • 一、gs_usb 是什么
    • 二、启用内核模块
    • 三、确认模块确实生成
    • 四、识别 USB-CAN 设备
    • 五、配置并测试
    • 六、如何判断问题到底出在哪一层
      • 情况 1:`modprobe gs_usb` 报错
      • 情况 2:模块能加载,但没有 `can0`
      • 情况 3:`can0` 存在,但发送报错或进入 bus-off
    • 七、真实收发才算完整验收
    • 八、本文验收清单
    • 小结
    • 专栏导航
    • 参考资料

本篇要解决什么问题

Linux 下 USB-CAN 的关键不是“装一个 CAN 软件”,而是让 USB 设备被正确的内核驱动绑定,并最终暴露为 SocketCAN 网络接口。本篇使用gs_usb作为例子,把链路分成四层:

层次成功标志常用命令
内核配置CONFIG_CAN_GS_USB=mgrep CONFIG_CAN_GS_USB .config
模块产物存在gs_usb.ko且 vermagic 匹配modinfo
USB 绑定设备被gs_usb驱动识别lsusbdmesg
SocketCAN出现can0等接口并能真实收发ipcandumpcansend

一个很常见的误区

can-utils是用户态测试工具,gs_usb.ko是内核驱动。安装can-utils不能替代内核驱动;同样,只看到gs_usb.ko文件存在,也不能证明 USB 设备已经绑定并能完成 CAN 收发。

一、gs_usb 是什么

采用 GS-USB/candleLight 兼容固件的 USB-CAN 适配器可以使用 Linux 的gs_usb驱动。加载成功后,设备通过 SocketCAN 表现为can0can1等网络接口;仅仅安装一个名字相近的用户态库不会生成这些接口。

二、启用内核模块

在 SDK 内核 defconfig 中确认:

CONFIG_CAN=y CONFIG_CAN_RAW=y CONFIG_CAN_GS_USB=m

以上是本次最终.config的实测值。使用 SDK 的入口进入内核配置并保存到当前内核 defconfig:

cd"$HOME/lubancat/LubanCat_SDK"./build.sh kernel-config

菜单中选择Networking support → CAN bus subsystem support → CAN Device Drivers → CAN USB interfaces → Geschwister Schneider UG interfaces,设为M

修改配置后必须重新构建kerneldeb,仅在目标机安装一个同名用户态库不能代替内核驱动。

三、确认模块确实生成

开发主机执行:

findkernel-6.1/drivers/net/can/usb-namegs_usb.ko-printmodinfo kernel-6.1/drivers/net/can/usb/gs_usb.ko\|grep-E'filename|vermagic|alias|intree'

还应从最终 DEB 再检查一次,避免出现“源码树生成了模块,但打包时漏掉”的情况:

dpkg-deb-clinux-image-6.1.99-rt36-rk3588_6.1.99-rt36-rk3588-12_arm64.deb\|grep'/gs_usb\.ko$'

安装到目标设备后:

sudodepmod-asudomodprobe gs_usb modinfo gs_usb|grep-E'filename|vermagic|alias|intree'

如果提示 vermagic 不匹配,说明模块不是针对当前运行内核构建的,不能强行使用旧模块。

四、识别 USB-CAN 设备

lsusbdmesg|grep-iE'gs_usb|can|usb'ip-detailslinkshowtypecan

本次设备识别后生成了多个 CAN 接口。接口初始为DOWN是正常的,因为波特率尚未配置。

五、配置并测试

sudoiplinksetcan0 down2>/dev/null||truesudoiplinksetcan0typecan bitrate500000sudoiplinksetcan0 upip-detailslinkshow can0

安装工具:

sudoaptinstallcan-utils

接收:

candump can0

发送测试帧:

cansend can0123#11223344

上述测试至少需要另一个 CAN 节点提供 ACK。连接 CAN_H、CAN_L 和必要的参考地线,总线两端各使用一个 120 Ω 终端电阻,并确保所有节点波特率一致。没有第二节点时连续发送可能累计错误甚至进入 bus-off。

测试结束后关闭接口:

sudoiplinksetcan0 down

六、如何判断问题到底出在哪一层

情况 1:modprobe gs_usb报错

先看modinfo gs_usbfilenamevermagic。如果 vermagic 与当前uname -r不匹配,应重新用当前内核配置构建模块,而不是强行加载旧模块。

情况 2:模块能加载,但没有can0

继续检查 USB 枚举和驱动绑定:

lsusbdmesg|tail-n100ip-detailslinkshowtypecan

此时问题可能在 USB 设备、固件协议兼容性、驱动 alias 或硬件连接,而不是 CAN bitrate。

情况 3:can0存在,但发送报错或进入 bus-off

先检查物理总线:

  • 节点波特率是否一致;
  • CAN_H/CAN_L 是否接反;
  • 总线两端是否有 120 Ω 终端电阻;
  • 是否存在另一个可正常 ACK 的 CAN 节点;
  • 是否出现 error-passive / bus-off 状态。

可以查看详细状态:

ip-details-statisticslinkshow can0

七、真实收发才算完整验收

仅执行ip link set can0 up只能证明接口能被配置。完整验收至少应该做到:

  1. gs_usb模块 vermagic 匹配;
  2. USB 设备被驱动绑定;
  3. can0能设置目标 bitrate;
  4. candump能收到另一节点发来的帧;
  5. cansend发出的帧被另一节点实际收到。

如果只有单个节点,建议不要长时间反复发送测试帧,以免因为缺少 ACK 造成错误计数持续累积。

八、本文验收清单

  • 最终.configCONFIG_CAN_GS_USB=m
  • 最终 DEB 包含gs_usb.ko
  • 目标板modprobe gs_usb成功;
  • modinfo的 vermagic 与运行内核匹配;
  • 出现 SocketCAN 接口;
  • bitrate 配置正确;
  • 已使用真实第二节点完成收发闭环。

小结

CONFIG_CAN_GS_USB=m是内核驱动配置,不是普通用户态库安装问题。最终验收应同时包括模块、接口、波特率和真实收发四项。

专栏导航

专栏LubanCat RK3588 实时 Linux 开发实战(第 6/13 篇)

  • 上一篇:LubanCat RK3588 实时 Linux 开发(五):如何确认 PREEMPT_RT 实时内核真正生效
  • 下一篇:LubanCat RK3588 实时 Linux 开发(七):YT6801 PCIe 网卡驱动移植与 vermagic 排查

参考资料

  • Linux 6.1 SocketCAN 文档
  • Linux CAN 子系统文档

文中的版本号、接口名、设备地址和测试数据均应以自己的板卡实测为准;引用命令前请先确认当前 SDK、内核和启动布局。

标签gs_usbUSB-CANSocketCANRK3588Linux驱动

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 9:14:14

商场管理系统开发:SSM框架实战与零售业务数字化

1. 项目概述:商场管理系统的核心价值与定位商场管理系统作为现代零售业数字化转型的核心基础设施,其价值早已超越简单的收银记账功能。2026届毕业生选择这个课题作为毕业设计,实际上是在挑战一个融合了零售业务逻辑、供应链协同、用户行为分析…

作者头像 李华
网站建设 2026/9/16 9:13:55

Sqlite数据库文件格式简图

前 言最近在学习sqlite micro logger源码,涉及到sqlite数据库文件格式,对照“Sqlite Database File Format”以及sqlite micro logger源码使用的格式,画出sqlite数据库文件格式简图,随着对源码的分析和对sqlite文件格式官方文档的…

作者头像 李华
网站建设 2026/9/16 9:12:55

语义中间件:破解ERP/CRM系统孤岛的薄纱式集成架构

1. “ever-gauzy”不是产品名,而是系统架构隐喻:从热词反推一个被低估的集成设计哲学你搜“ever-gauzy”,页面一片空白——没有官网、没有文档、没有GitHub仓库,连维基百科词条都不存在。但当你把鼠标移向那些高频热词&#xff1a…

作者头像 李华
网站建设 2026/9/16 9:11:37

GC6208三合一镜头驱动SoC:安防IPC机电控制的集成化演进

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 9:10:49

MySQL下载安装完全指南:从Windows到Linux的避坑实战教程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华