当前位置: 首页 > news >正文

基于树莓派的日志抓取工具制作

背景:

  • 当外购的设备或者自研的设备出现随机故障的时候,需要日志来分析问题,需要工程师去到现场连到设备抓取TTL、RS232日志以及can总线数据来分析问题,并且需要人一直挂着笔记本抓取,一直等到问题出现,非常浪费人力成本,虽然自研设备可以转存日志,外购的设备改动就笔记麻烦了,选择了树莓派来做日志抓取工具,既可以抓取自研日志,也可以外购的日志。
    选择树莓派是因为是内部集成了usb转ttl模块的驱动和MCP251X的CAN模块驱动,只要配置好驱动后,使用bash脚本来进行日志生成即可。

主要步骤:
1.系统安装
2.驱动配置
3.应用脚本编写
4.系统备份

1.系统安装
先做树莓派系统,去官网下载系统,我下载的是
2024-07-04-raspios-bookworm-armhf.img.xz
下载完成后,插入树莓派配套的U盘,使用树莓派镜像烧录器进行烧录,建议选择无屏幕方式烧录,这样不用接键盘鼠标和hdmi的屏幕,直接ssh登录即可。
在这里插入图片描述

设备选择ALL,操作系统选择Use custom,然后选择自己从官网下载的镜像包,SD卡选择配套的U盘
在这里插入图片描述
在这里插入图片描述

一定要编辑设置,默认是带屏幕的
设置用户名和密码并配置WiFi
在这里插入图片描述

服务里面打开ssh服务,其他默认即可。
在这里插入图片描述

选择是之后就可以开始烧录了。烧录完成后,在路由端找到树莓派的ip地址
在这里插入图片描述

使用这个ip来进行ssh登录,登录的用户名是之前烧录镜像设置的用户名和密码
端口是默认的22
在这里插入图片描述

部分工具可能登录不了,请使用最新版本的工具来ssh,我的是CRT 9.6.0

自带的VI不好用,建议使用安装命令进行VIM的安装,方便脚本编辑。

其他需要的工具也直接安装即可,前提是你的路由可以正常连上外网的。

到这里树莓派系统就算完成了。
2.驱动配置
USB转串口驱动,这个驱动是内部集成的,插入USB转TTL(CH340),查看dev下面可以看到ttyUSB0
在这里插入图片描述

这个是正常的。
然后配置MCP2512模块
先接线
MCP2512模块是使用SPI通信的,树莓派的排针里面就有spi,使用母对母杜邦线连接模块即可。
在这里插入图片描述

PIN Pi ----------------> MCP2512
#02 5V -----------------> VCC
#06 GND ----------------> GND
#24 (SPI_CE0)GPIO08 ----> CS
#21 (SPI_MISO)GPIO09 —> SO
#19 (SPI_MOSI)GPIO10 —> SI
#23 (SPI_CLK)GPIO11 ----> SCK
#22 (GPIO_GEN6)GPIO25 --> INT

在这里插入图片描述

修改配置,默认没有打开SPI和MCP251X驱动模块
vim /boot/firmware/config.txt
找到

dtparam=spi=on

去到#号,#号是注释掉功能
然后在末尾追加

dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25
dtoverlay=spi0-1cs

这里的晶振根据具体模块的晶振决定,我买的是8M的,这里配置8000000,其他的一般不用修改。这些dtoverlay配置项的说明可以查看/boot/overlays/README
然后安装can的工具,这个直接标准命令安装即可,默认不带can工具的。

sudo apt-get install can-utils

然后重启树莓派
ls /sys/bus/spi/devices/spi0.0/net/
在这里插入图片描述

能显示can0就可以了,使用ifconfig,也可以看到can0
在这里插入图片描述

到这里驱动就可以了。

3.应用脚本编写
第一个脚本GetSerialLog.sh

#!/bin/bash# 设备路径
DEVICE="/dev/ttyUSB0"# 检查设备是否存在
if [ ! -c "$DEVICE" ]; thenecho "设备 $DEVICE 不存在。"exit 1
fi# 波特率
BAUD_RATE=115200stty -F $DEVICE $BAUD_RATE cs8 -cstopb# 循环执行记录操作
while true; do# 使用date命令生成时间戳格式的文件名,例如:2024080715-30.logTIMESTAMP=$(date +'%Y%m%d%H%M')FILENAME="record_${TIMESTAMP}.log"# 读取串口数据并保存到文件,同时为每一行添加时间戳echo "开始记录到文件:$FILENAME"while read -r line; doecho "$(date +'%Y-%m-%d %H:%M:%S') $line" >> "$FILENAME"done < "$DEVICE" &# 等待30分钟sleep 1800# 结束记录echo "记录结束。"
Done

第二个脚本 GetCanLog.sh

#!/bin/bashCAN_INTERFACE="can0"
BITRATE=500000
LOG_DIR="can_logs"
LOG_FILE="$LOG_DIR/can_log.txt"# Ensure the log directory exists
mkdir -p "$LOG_DIR"# Check if CAN interface exists
if ! ip link show $CAN_INTERFACE &> /dev/null; thenecho "CAN interface $CAN_INTERFACE does not exist or is not up." >&2exit 1fi# Set CAN interface with bitrateecho "Setting CAN interface $CAN_INTERFACE with bitrate $BITRATE..."sudo ip link set $CAN_INTERFACE type can bitrate $BITRATE# Bring up the CAN interfaceecho "Bringing up $CAN_INTERFACE..."sudo ip link set $CAN_INTERFACE up# Start capturing CAN logecho "Starting to capture CAN log on $CAN_INTERFACE..."echo "Saving to $LOG_FILE"# Capture CAN log and save to filecandump $CAN_INTERFACE > "$LOG_FILE" &PIDS=$!echo "CAN log capture is running in background with PID: $PIDS"echo "Press [ENTER] to stop capturing..."read -rkill -SIGINT $PIDSecho "CAN log capture stopped. Check $LOG_FILE for the log data."

这两个应用脚本是实现对ttyUSB数据的抓取,使用串口参数是115200,n,8,1,SPI CAN0的数据抓取,can0的波特率是500k
可以根据实际情况调整一下脚本。
写好两个脚本后记得加上执行权限

chmod 777 GetSerialLog.sh
chmod 777 GetCanLog.sh

然后把这两个脚本加入开启启动里面
方便重启后自动抓取
不用ssh登录打开脚本

crontab -e
添加需要执行的脚本
@reboot /home/admin/GetCanLog.sh &
@reboot /home/admin/GetSerialLog.sh &
在这里插入图片描述

保存指令和vim有点像,:wq
在这里插入图片描述

重启即可
重启后使用ps -aux 可以查看是否自启动
在这里插入图片描述

这样就成功了
生成的日志
在这里插入图片描述
在这里插入图片描述

这些文件,可以通过工具通过网络的方式取出来
在这里插入图片描述

4.系统备份
系统备份,主要用于,批量制作这个日志抓取工具,方便进行克隆的工具,不需要一个个取配置,原理很简单,就树莓派的资料里面的备份与还原的功能
关机
拔下U盘
插入带有树莓系统的u盘到电脑

下载打开Win32DiskImager2.0.1.8.exe
在这里插入图片描述

先创建空的img后缀文件
在这里插入图片描述

点击读取,不要点错了,写入会擦除掉U盘的树莓派的。因为你的是空的img文件
提示完成即可。
需要还原的时候,选择这个备份好的img文件,然后选择写入就好
不管是备份还是写入都比较费时间,耐心等待即可。

思考,树莓派除了插U盘的USB口用掉了,还有三个USB可以插USB转TTL,或者USB转RS232都可以,我尝试过三个都插上设备里面会显示三个TTyUSB,TTyUSB1,TTyUSB2,可以可以做个脚本来抓取。

完结撒花


http://www.mrgr.cn/news/75170.html

相关文章:

  • AndroidStudio-常用布局
  • CDA LEVEL 2考试大纲
  • PostgreSQL序列:创建、管理与高效应用指南
  • 18B电阻
  • vue计算属性 初步使用案例
  • django入门【05】模型介绍——字段选项(二)
  • 代理通讯链实现内网通讯
  • 探秘 RPC:揭开远程过程调用的实现原理
  • 如何在python中模拟重载初始化函数?
  • 下载|阿里云等联合编写的《2024大模型典型示范应用案例集》发布
  • 「Mac玩转仓颉内测版10」PTA刷题篇1 - L1-001 Hello World
  • Jdbc学习笔记(四)--PreparedStatement对象、sql攻击(安全问题)
  • 联丰策略炒股股票交易市场券商股,盘中突然拉升
  • 25京考考试时间已确定,速速查收!
  • 时序论文19|ICML24 : 一篇很好的时序模型轻量化文章,用1k参数进行长时预测
  • Linux系统编程多线程之条件变量和信号量讲解
  • java八股-垃圾回收机制-垃圾回收算法,分代回收,垃圾回收器
  • 精灵图(十八课)
  • RHCE web解析、dns配置、firewalld配置实验
  • 人工智能技术的发展历程和现状
  • 基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
  • 多模态Embedding不愧是CVPR和NIPS的共同选择!这发文思路真的需要好好学习一下!
  • c语言学习16按键控制流水灯
  • 闯关leetcode——3178. Find the Child Who Has the Ball After K Seconds
  • docker安装到D盘
  • 游戏引擎学习第11天