Skip to content

can-utils 工具集

can-utils 是 SocketCAN 官方配套的命令行工具集,提供了完整的 CAN 总线测试、调试和分析能力。

安装

bash
sudo apt install can-utils

工具概览

工具功能典型用途
cansend发送单条报文快速测试、手动控制
candump监听并记录报文调试分析、日志记录
cansniffer交互式监控实时变化追踪
canbusload总线负载统计性能评估
cangen批量生成报文压力测试

核心调试工具

cansend - 报文发送

用于发送单条 CAN 报文,格式为 cansend <接口名> <报文ID>#<数据段>

基本用法

bash
# 发送标准帧:ID=0x123,数据=11223344
cansend can0 123#11223344

# 发送扩展帧:ID=0x12345678,数据=55667888
cansend can0 12345678#55667888

# 发送远程帧(仅请求数据,无数据段)
cansend can0 1123#R

CAN FD 报文

bash
# 发送CAN FD帧并启用比特率切换(BRS),需要接口支持,使用##分隔符
cansend can0 123##1112233445566778899AABBCC  # 数据段第一位 1 表示BRS标志
#数据段第一位为 2 启用ESI,为 3 同时启用BRS和ESI,为 4 仅发送 FD 帧

candump - 报文监听

candump 实时监听 CAN 总线报文,支持输出到屏幕、保存到文件,核心参数用于过滤 ID、设置时间格式。

基本用法

bash
# 监听所有CAN报文
candump can0

# 监听多个接口
candump can0 can1

# 彩色输出(更易阅读)
candump -c can0

# 显示帧类型标识 (推荐)
candump -x can0

输出格式解读

$candump can0
can0  123  [8]  11 22 33 44 55 66 77 88
│     │    │    └─ 数据字节(十六进制)
│     │    └─ DLC(数据长度)
│     └─ CAN ID(十六进制)
└─ 接口名

# 使用 -x 显示帧类型标识
$candump -x can1
can1  RX B -       123  [08]  11 22 33 44 55 66 77 88 99 AA BB CC
       │ │                └─ DLC(数据长度,CAN FD 显示两位数 [08])                 
       │ └─ 数据类型
       └─ 接收方向标识

过滤功能

bash
# 只监听特定ID
candump can0,123:7FF        # 监听ID 0x123(掩码0x7FF表示精确匹配)

# 监听多个特定ID
candump can0,123:7FF,456:7FF,789:7FF

# 使用掩码过滤(范围匹配)
candump can0,123:7F0        # 监听ID 0x120-0x12F
candump can0,100:700        # 监听ID 0x100-0x1FF

# 排除特定ID
candump can0,~123:7FF       # 监听除0x123外的所有ID

# 扩展帧过滤
candump can0,12345678:1FFFFFFF  # 监听扩展ID(29位)

输出格式控制

bash
# 显示绝对时间戳
candump -t a can0
# 输出:(1640995200.123456)  can0  123  [8]  11 22 33 44 55 66 77 88

# 显示相对时间戳(从启动开始)
candump -t r can0

# 显示增量时间戳(与上一帧的时间差)
candump -t d can0

# 显示精确时间戳(微秒级)
candump -t a -H can0

# ASCII 解码(显示可打印字符)
candump -A can0

日志记录

bash
# 自动生成日志文件(格式:candump-YYYYMMDD-HHMMSS.log)
candump -l can0

# 指定日志文件名
candump can0 > my_can_log.txt

# 同时显示和记录
candump can0 | tee can_log.txt

# 记录特定时长(结合timeout命令)
timeout 60 candump -l can0  # 记录60秒

高级选项

bash
# 设置接收缓冲区大小
candump -n 1000 can0  # 缓冲1000帧

# 静默模式(仅记录不显示)
candump -s can0 > can_log.txt

cansniffer - 交互式监控

cansniffer 提供交互式的 CAN 报文监控界面,能够自动识别变化的数据字节,适合实时调试。

功能特点

  • 自动按 CAN ID 分组显示
  • 高亮显示变化的数据字节
  • 支持十六进制和二进制显示
  • 支持过滤和搜索功能

基本用法

bash
# 启动交互式监控
cansniffer can0

# 彩色显示(推荐)
cansniffer -c can0

# 二进制模式显示
cansniffer -b can0

# 指定初始过滤器
cansniffer -m 123:7FF can0  # 只显示ID 0x123

交互式按键

按键功能
q退出程序
c清空屏幕
b切换二进制/十六进制显示
+增加刷新间隔
-减少刷新间隔
Space冻结/恢复显示

应用场景

场景1:追踪传感器数据变化

bash
# 监控发动机转速数据(假设ID=0x200)
cansniffer -c -m 200:7FF can0
# 变化的字节会以不同颜色高亮显示

场景2:识别活跃的 CAN ID

bash
# 监控所有ID,快速识别哪些ID在发送数据
cansniffer -c can0
# 活跃的ID会自动排序到顶部

canbusload - 总线负载监控

实时刷新显示 CAN 总线的负载率、帧率,是性能评估的重要工具。

基本用法

bash
# 显示can0在1M波特率下的负载率
canbusload can0@1000000

# 监控多个接口
canbusload can0@1000000 can1@500000

# CAN FD模式(仲裁段1M,数据段5M)
canbusload can0@1000000,5000000

canbusload

输出解读

bash
# 执行命令
canbusload can0@1000000,5000000

# 实际输出
can0@1M/5M 19612 2686844 1255168 2118096  98%
     └─ 负载率百分比(98%)
      └─ 数据段比特率下的负载
      └─ 归一化后的比特数
      └─ 总比特数
      └─ 每秒帧率
       └─ 接口名@仲裁段比特率/数据段比特率
└─ 完整格式说明

# 说明:正常使用注意帧率以及负载即可。

高级用法

bash
# 显示时间戳
canbusload -t can0@1000000

# 可视化图形界面
canbusload -v can0@1000000

canbusload2

cangen - CAN 帧生成工具

cangen 用于生成和发送 CAN 帧,支持多种帧类型和生成模式,是压力测试的利器。

基本用法

bash
# 持续发送随机CAN帧
cangen can0

# 设置帧发送间隔(毫秒)
cangen -g 100 can0        # 每100ms发送一帧

# 固定ID发送
cangen -I 123 can0        # 固定ID=0x123

# 固定数据发送
cangen -D 1122334455667788 can0

cangen

帧类型配置

bash
# 生成扩展帧(29位ID)
cangen -e can0            # 随机29位ID
cangen -e -I 12345678 can0 # 固定扩展ID

# 生成CAN FD帧
cangen -f can0            # 基本CAN FD帧

# CAN FD带比特率切换(BRS)
cangen -f -b can0

# CAN FD带错误状态指示(ESI)
cangen -f -E can0

# 生成远程帧
cangen -R can0

高级选项

bash
# 限制发送数量
cangen -n 100 can0        # 只发送100帧

# 指定数据长度(DLC)
cangen -L 8 can0          # 固定8字节数据

# 混合模式(标准帧+扩展帧)
cangen -m can0

# 详细输出(显示发送的每一帧)
cangen -v can0

# 指定ID范围
cangen -I 100 -i 200 can0  # ID在0x100-0x200之间随机

性能测试场景

bash
# 最大帧率
cangen can0 -f -b -g -x -i -L 8 -I AA -D AAAAAAAAAAAAAAAA

# 最大带宽
cangen can0 -f -b -g -x -i -L 64 -I 0 -D 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

工具集完整列表

bash
# 查看所有can-utils工具
dpkg -L can-utils | grep bin/

# 常见工具及简介
canconfig      # 配置CAN接口(已废弃,使用ip命令替代)
canbusload     # 总线负载监控
candump        # 报文监听和记录
canfdtest      # CAN FD测试
cangen         # 报文生成
canlogserver   # 远程日志服务器
canplayer      # 日志回放
cansend        # 发送单条报文
cansniffer     # 交互式监控
isotpdump      # ISO-TP协议监听
isotprecv      # ISO-TP接收
isotpsend      # ISO-TP发送
isotpserver    # ISO-TP服务器
isotpsniffer   # ISO-TP交互监控
isotptun       # ISO-TP隧道

驱动智能连接,赋能科技未来