You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20.04下slcand调用Canable报错:Inappropriate ioctl for device

解决Ubuntu 20.04下Canable设备使用slcand报错的问题

问题根源

你的Canable当前处于gs_usb原生CAN模式,而非串口转CAN模式:

  • 该模式下设备会被识别为网络CAN接口(而非串口设备),因此不会生成/dev/ttyUSB0或/dev/ttyACM0这类节点
  • 你创建的udev规则指向的是整个USB设备节点(usb_device类型),而slcand仅支持串口设备节点,所以会触发"Inappropriate ioctl for device"错误

两种解决方案(二选一)

方案1:直接使用原生gs_usb模式(推荐,无需slcand)

这种模式下Canable作为原生CAN接口工作,直接用can-utils工具操作:

  1. 确认内核模块加载:
    lsmod | grep gs_usb
    # 如果无输出,手动加载模块
    sudo modprobe gs_usb
    
  2. 查看可用CAN接口:
    ip link show
    # 你会看到类似`can0`的网络接口
    
  3. 配置并启动CAN接口(以1Mbps波特率为例):
    sudo ip link set can0 up type can bitrate 1000000
    # 若需开启回环测试,添加`loopback on`参数
    # sudo ip link set can0 up type can bitrate 1000000 loopback on
    
  4. 测试通信:
    • 接收数据:candump can0
    • 发送数据:cansend can0 123#1122334455667788

可选:给原生CAN接口设置固定名称(修改udev规则)

替换你之前的udev规则为以下内容(保存到/etc/udev/rules.d/99-canable.rules):

SUBSYSTEM=="net", ATTRS{serial}=="002900355934570820373433", NAME="can8"

执行sudo udevadm control --reload-rules && sudo udevadm trigger生效后,接口会固定为can8。


方案2:切换到串口转CAN模式(使用slcand)

若你必须使用slcand,需要将Canable固件切换为slcan模式:

  1. 进入DFU升级模式:
    • 方法1:按住设备上的BOOT按键,同时插入USB
    • 方法2:先关闭当前CAN接口,再触发DFU:
      sudo ip link set can0 down
      sudo gs_usb_dfu
      
  2. 刷入slcan固件:
    下载对应型号的slcan固件(文件名通常为slcan.bin),执行刷入命令:
    sudo dfu-util -d 1d50:606f -a 0 -D slcan.bin -R
    
  3. 重新插拔设备,检查串口节点:
    ls /dev/ttyACM*
    # 会看到类似`/dev/ttyACM0`的节点
    
  4. 修正udev规则(针对串口设备):
    替换原规则为:
    SUBSYSTEM=="tty", ATTRS{serial}=="002900355934570820373433", SYMLINK+="cantest2"
    
    重载规则:sudo udevadm control --reload-rules && sudo udevadm trigger
  5. 使用slcand启动CAN接口:
    sudo slcand -o -c -s8 /dev/cantest2 can8
    sudo ip link set can8 up
    
    之后同样可以用candump/cansend测试通信。

内容的提问来源于stack exchange,提问作者LeeJaeBong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:55:17