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

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

背景:

  • 当外购的设备或者自研的设备出现随机故障的时候,需要日志来分析问题,需要工程师去到现场连到设备抓取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" ]; then
    echo "设备 $DEVICE 不存在。"
    exit 1
fi

# 波特率
BAUD_RATE=115200

stty -F $DEVICE $BAUD_RATE cs8 -cstopb

# 循环执行记录操作
while true; do
    # 使用date命令生成时间戳格式的文件名,例如:2024080715-30.log
    TIMESTAMP=$(date +'%Y%m%d%H%M')
    FILENAME="record_${TIMESTAMP}.log"

    # 读取串口数据并保存到文件,同时为每一行添加时间戳
    echo "开始记录到文件:$FILENAME"
    while read -r line; do
        echo "$(date +'%Y-%m-%d %H:%M:%S') $line" >> "$FILENAME"
    done < "$DEVICE" &

    # 等待30分钟
    sleep 1800

    # 结束记录
    echo "记录结束。"
Done

第二个脚本 GetCanLog.sh

#!/bin/bash

CAN_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; then
    echo "CAN interface $CAN_INTERFACE does not exist or is not up." >&2
        exit 1
        fi

        # Set CAN interface with bitrate
        echo "Setting CAN interface $CAN_INTERFACE with bitrate $BITRATE..."
        sudo ip link set $CAN_INTERFACE type can bitrate $BITRATE

        # Bring up the CAN interface
        echo "Bringing up $CAN_INTERFACE..."
        sudo ip link set $CAN_INTERFACE up

        # Start capturing CAN log
        echo "Starting to capture CAN log on $CAN_INTERFACE..."
        echo "Saving to $LOG_FILE"

        # Capture CAN log and save to file
        candump $CAN_INTERFACE > "$LOG_FILE" &

        PIDS=$!
        echo "CAN log capture is running in background with PID: $PIDS"

        echo "Press [ENTER] to stop capturing..."
       read -r

        kill -SIGINT $PIDS

       echo "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.kler.cn/a/394687.html

相关文章:

  • EXCEL延迟退休公式
  • 论文翻译 | The Capacity for Moral Self-Correction in Large Language Models
  • SQL 中 BETWEEN AND 用于字符串的理解
  • Linux源码阅读笔记-V4L2框架基础介绍
  • 【算法一周目】双指针(2)
  • Linux基础1
  • ssh和nfs
  • Vue之插槽(slot)
  • 力扣 LeetCode 344. 反转字符串(Day4:字符串)
  • 力扣889:根据先序和后序遍历构造二叉树
  • Spring Boot与Quartz定时任务集成:深入指南
  • Ubuntu中使用纯命令行进行Android开发
  • 【SQL】一文速通SQL
  • Spring Boot驱动的电子商务平台开发
  • 【go从零单排】SHA256 Hashes加密
  • 【已解决】git push一直提示输入用户名及密码、fatal: Could not read from remote repository的问题
  • 使用ensp配置单臂路由、静态路由,实现PC互相通信。
  • golang 实现比特币内核:从公钥创建wallet地址
  • 【缓存策略】你知道 Write Through(直写)这个缓存策略吗?
  • MySQL 的主从复制数据同步
  • 生成式GPT商品推荐:精准满足用户需求
  • 斯坦福iDP3——改进3D扩散策略以赋能人形机器人的训练:不再依赖相机校准和点云分割(含源码解析)
  • 计算机毕业设计Python+大模型农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop
  • STM32系统的GPIO原理与结构
  • Python爬虫项目 | 一、网易云音乐热歌榜歌曲
  • 基于混沌加密的遥感图像加密算法matlab仿真