Linux candump 命令 - 抓取并显示 CAN 总线报文
介绍
candump 命令用于监听 CAN 总线上的报文,并以可读格式在终端输出。它是 CAN 总线调试中最常用的工具之一,支持多接口同时监听、报文过滤、时间戳显示、日志记录以及 CAN FD 报文的解析。
candump 命令由 can-utils 软件包提供,在 Debian/Ubuntu 系统上可以使用如下命令进行安装。
sudo apt install can-utils
使用前需先配置并启动 CAN 接口,例如:
sudo ip link set can0 type can bitrate 500000
sudo ip link set can0 up
语法:
candump [options] <CAN interface>+
可同时指定最多 16 个 CAN 接口,每个接口可附加可选的过滤器,格式为:<ifname>[,filter]*。使用 CTRL-C 终止程序。
选项:
-t <type>:时间戳格式,可选(a)bsolute(绝对时间)、(d)elta(增量)、(z)ero(归零)、(A)bsolute w date(带日期的绝对时间)-H:读取硬件时间戳,而非系统时间戳-c:递增彩色输出级别-i:以二进制格式输出(每行可能超过 80 字符)-a:额外输出 ASCII 字符-S:交换输出中 CAN 数据字节的字节序(以`标记)-s <level>:静默模式,0关闭(默认)、1动画、2静默-l:将 CAN 帧记录到文件(默认同时设置-s 2)-L:在标准输出上使用日志文件格式-n <count>:接收<count>帧后退出-r <size>:设置 socket 接收缓冲区大小-D:当检测到的 CAN 设备下线时不退出-d:监控被丢弃的 CAN 帧-e:以人类可读格式输出 CAN 错误帧-x:打印额外报文信息(rx/tx、brs、esi)-T <msecs>:超过<msecs>毫秒未收到报文则退出
过滤器:
每个 CAN 接口可指定逗号分隔的过滤器:
<can_id>:<can_mask>:当received_can_id & mask == can_id & mask时匹配<can_id>~<can_mask>:当received_can_id & mask != can_id & mask时匹配#<error_mask>:设置错误帧过滤器(参见include/linux/can/error.h)[j|J]:将多个过滤器以逻辑 AND 方式组合
CAN ID、掩码和数据内容均使用十六进制表示。当 can_id 为 8 位十六进制时,自动设置 CAN_EFF_FLAG(29 位扩展帧)。未指定过滤器时,默认接收所有数据帧(0:0)。使用接口名 any 可从所有 CAN 接口接收。
相关命令:cansend、cangen、cansniffer、canbusload、canplayer
示例
1、监听 can0 接口上的所有报文:
candump can0
2、带绝对时间戳和彩色输出,同时监听 can0 和 can2:
candump -c -ta can0 can2
3、只接收 can0 上 ID 为 0x123 的标准帧(含 EFF 和 RTR):
candump can0,123:7FF
4、只接收 can0 上 ID 为 0x123 的标准帧(仅 SFF、非 RTR):
candump can0,123:C00007FF
5、匹配扩展帧 ID 0x12345678:
candump can0,12345678:DFFFFFFF
6、将报文记录到日志文件(静默模式):
candump -l can0
7、接收 100 帧后自动退出:
candump -n 100 can0
8、多接口带过滤器,同时监听多个总线:
candump -c -ta can0,123:7FF,400:700 can2,400~7F0 can3
9、监听所有 can 接口上的所有报文:
candump any