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#RCAN 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.txtcansniffer - 交互式监控
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
输出解读:
bash
# 执行命令
canbusload can0@1000000,5000000
# 实际输出
can0@1M/5M 19612 2686844 1255168 2118096 98%
│ │ │ │ │ │ └─ 负载率百分比(98%)
│ │ │ │ │ └─ 数据段比特率下的负载
│ │ │ │ └─ 归一化后的比特数
│ │ │ └─ 总比特数
│ │ └─ 每秒帧率
│ └─ 接口名@仲裁段比特率/数据段比特率
└─ 完整格式说明
# 说明:正常使用注意帧率以及负载即可。高级用法
bash
# 显示时间戳
canbusload -t can0@1000000
# 可视化图形界面
canbusload -v can0@1000000
cangen - CAN 帧生成工具
cangen 用于生成和发送 CAN 帧,支持多种帧类型和生成模式,是压力测试的利器。
基本用法
bash
# 持续发送随机CAN帧
cangen can0
# 设置帧发送间隔(毫秒)
cangen -g 100 can0 # 每100ms发送一帧
# 固定ID发送
cangen -I 123 can0 # 固定ID=0x123
# 固定数据发送
cangen -D 1122334455667788 can0
帧类型配置
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隧道