当前位置:首页 > 行业动态 > 正文

如何在Linux系统中进行DLT抓包操作?

DLT抓包在Linux系统中的应用与实践,,本文主要介绍了在Linux环境下进行 DLT(Diagnostic Log and Trace) 抓包的相关内容。包括DLT的概念,如其由GENIVI联盟制定、用于汽车等领域的诊断日志和追踪等;详细阐述了在Linux下使用DLT抓包的方法步骤,如获取dlt-daemon源码并编译安装、获取dlt-viewer工具等;还说明了DLT的运行配置、协议介绍以及在不同模式下的消息结构等,为在Linux系统中进行DLT相关操作提供了全面的指导。

在Linux系统中,DLT(Diagnostic Log and Trace)抓包是一种用于捕获和分析诊断日志与跟踪信息的技术,以下是关于DLT抓包的详细内容:

一、环境搭建

1、安装DLT相关工具

首先需要获取dlt-daemon源码,可以通过以下命令克隆GitHub仓库:

 git clone https://github.com/GENIVI/dlt-daemon.git

进入目录后,创建构建目录并编译安装:

 cd dlt-daemon
     mkdir build
     apt-get update
     apt-get install –y build-essential
     cmake ..
     make
     make install
     ldconfig

接着获取dlt-viewer工具,同样先克隆仓库:

 git clone https://github.com/GENIVI/dlt-viewer.git

然后安装依赖包并编译:

 apt-get install ros-melodic-qt-create
     apt-get install ros-melodic-qt-build
     apt-get install libqt5serialport5-dev libudev-dev
     cmake ..

编译完成后,在build/bin目录下会生成可执行文件dlt-viewer

2、配置DLT Daemon

如何在Linux系统中进行DLT抓包操作?

复制dlt.conf文件到系统目录:

 cd dlt-daemon/src/daemon/
     sudo cp dlt.conf /etc/

编辑dlt.conf文件,根据需求修改相关参数,例如将LoggingMode设置为合适的模式等。

二、构造测试进程

1、编写测试程序

下面是一个使用C语言编写的简单测试程序示例,该程序包含三个不同的上下文(context),并分别记录了不同级别的日志信息:

 include <stdio.h>
     include <dlt.h>
     DLT_DECLARE_CONTEXT(myContext1);
     DLT_DECLARE_CONTEXT(myContext2);
     DLT_DECLARE_CONTEXT(myContext3);
     int main()
     {
         // register application
         DLT_REGISTER_APP("MAPP","Test Application for Logging");
         // register all contexts
         DLT_REGISTER_CONTEXT(myContext1,"TES1","Test Context 1 for Logging");
         DLT_REGISTER_CONTEXT(myContext2,"TES2","Test Context 2 for Logging");
         DLT_REGISTER_CONTEXT(myContext3,"TES3","Test Context 3 for Logging");
         // Write your logs
         DLT_LOG(myContext1,DLT_LOG_ERROR,DLT_INT(5),DLT_STRING("This is a error"));
         DLT_LOG(myContext2,DLT_LOG_INFO,DLT_INT(5),DLT_STRING("But this only information"));
         DLT_LOG(myContext3,DLT_LOG_DEBUG,DLT_INT(5),DLT_STRING("But this only information"));
         // Sleep some time to avoid a flaw in dlt-daemon that would eat your messages if you deregister while it still processes your registration
         sleep(3);
         // unregister your contexts
         DLT_UNREGISTER_CONTEXT(myContext1);
         DLT_UNREGISTER_CONTEXT(myContext2);
         DLT_UNREGISTER_CONTEXT(myContext3);
         // unregister your application
         DLT_UNREGISTER_APP();
         return 0;
     }

将上述代码保存为example.c文件,然后在dlt-daemon/examples/example1/目录下创建构建目录并编译:

 cd dlt-daemon/examples/example1/
     mkdir build
     cmake ..
     make

这样就会生成测试程序dlt-example1

如何在Linux系统中进行DLT抓包操作?

2、启动DLT Daemon和接收端

启动DLT Daemon服务:

 dlt-daemon -c /etc/dlt.conf

启动log接收端,指定接收日志的文件路径和主机地址:

 dlt-receive -o /tmp/log.dlt localhost

运行测试程序:

 sudo ./dlt-example1

/tmp/log.dlt文件中就会记录测试程序产生的日志,可以使用dlt-viewer工具来查看这些日志。

三、常见问题及解决方法

1、问题一:无法找到dlt-daemon或dlt-viewer命令

如何在Linux系统中进行DLT抓包操作?

解答:这可能是由于环境变量没有正确设置或者安装路径不正确导致的,确保在安装过程中按照正确的步骤进行操作,并且检查系统的PATH环境变量是否包含了dlt-daemondlt-viewer所在的目录,如果使用的是apt安装的,可以尝试更新软件包列表并重新安装相关软件包:

 sudo apt-get update
     sudo apt-get install --reinstall dlt-daemon dlt-viewer

如果是从源代码编译安装的,确认编译后的可执行文件被放置在了系统的可执行文件搜索路径中,例如/usr/local/bin等目录,如果不是,可以将可执行文件手动移动到这些目录中,或者在运行命令时指定完整的路径。

2、问题二:dlt-viewer无法打开日志文件

解答:首先检查日志文件的路径是否正确,以及文件是否存在且有读取权限,如果路径错误或文件不存在,dlt-viewer将无法打开日志文件,可能是日志文件格式不正确或者损坏导致无法解析,可以尝试重新生成日志文件,或者检查测试程序是否正确地记录了日志,如果问题仍然存在,可以尝试更新dlt-viewer工具到最新版本,或者查看官方文档和社区论坛获取更多帮助。