自学内容网 自学内容网

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

背景:

  • 当外购的设备或者自研的设备出现随机故障的时候,需要日志来分析问题,需要工程师去到现场连到设备抓取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文件,然后选择写入就好
不管是备份还是写入都比较费时间,耐心等待即可。

完结撒花


原文地址:https://blog.csdn.net/hrw_embedded/article/details/143750897

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!