Diagnostic Log and Trace——dlt的编译和安装

Posted andylauren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Diagnostic Log and Trace——dlt的编译和安装相关的知识,希望对你有一定的参考价值。

概述

GENIVI DLT 提供日志和跟踪接口,基于 AUTOSAR 标准 4.0 DLT 中指定的标准化协议。它被其他 GENIVI 组件使用,但可以作为其他应用程序的日志框架,与 GENIVI 无关。

最重要的术语和部分如下图所示。有关 DLT 特定术语的完整概述,请参阅词汇表。

简单来说就是一个很好用的应用日志服务,这个服务支持图形化绿色软件 DLT-Viewer,需要网络支持,可以存储离线日志,体积十分小巧,灵活的配置管理方式。

源码开源网址:GitHub - COVESA/dlt-daemon: Diagnostic Log and Trace.

备份开源网址:dlt-daemon: Diagnostic Log and Trace欢迎使用 GENIVI 诊断日志和跟踪 (DLT)。如果您熟悉 DLT 并想了解新功能,请查看发行说明。DLT 新手?伟大的!欢迎上车。我们为您准备了简要概述以及有关如何立即开始的一些信息。在您熟悉 DLT 的基本机制后,您可以了解有关高级概念和功能的更多信息。https://gitee.com/RTplay/dlt-daemon

 编译与安装

需要安装以下软件包才能构建和安装 dlt-daemon程序:

cmake

zlib

dbus

json-c (only required for dlt-receives extended filtering)

在 Ubuntu 上,可以使用以下命令安装这些依赖项:

sudo apt-get install cmake zlib1g-dev libdbus-glib-1-dev
sudo apt-get install libjson-c-dev

如果您还没有下载 DLT,请继续下载。我们建议克隆存储库,但下载和提取 zip 存档也很好。

cd /path/to/workspace
git clone https://gitee.com/RTplay/dlt-daemon.git

要构建和安装 DLT 守护程序,请执行以下步骤:

cd /path/to/workspace/dlt-daemon
mkdir build
cd build
cmake ..
make
optional: sudo make install
optional: sudo ldconfig # 如果你执行了 make install

构建api文档

如果你想阅读 API 文档,你现在必须在本地构建它。 API 文档是使用 doxygen 生成的。要构建它,请使用 -DWITH_DOC=ON 选项运行 cmake,会有如下依赖,

sudo apt-get install pandoc doxygen asciidoc

执行以下步骤:

mkdir build
cd build
cmake -DWITH_DOC=ON ..
make doc

配置、控制和接口

关于 DLT,还有很多值得探索的地方。如果您使用 cmake 选项 -DWITH_MAN=ON 打开联机帮助页的生成,您可以了解如何配置 DLT 以完全满足您的需求、如何控制运行实例的行为以及如何通过提供的适配器将 DLT 与现有系统连接起来。

手册页是用 pandoc 生成的,它也需要 asciidoc 作为依赖项。

使用例如构建联机帮助页(最初或因为某些更改)

mkdir build
cd build
cmake -DWITH_MAN=ON ..
make generate_man

DLT 演示运行

doc/dlt_demo_setup.md · Gitee 极速下载/dlt-daemon - Gitee.com

在本文档中,您将运行 dlt-daemon 的一个实例。它静静地等待收集和缓冲由一个或多个 DLT 用户生成的日志消息。您将运行这些 DLT 用户之一,并使其生成发送到守护程序的日志消息。最后,您启动一​​个客户端来收集和显示这些消息。

运行 DLT 守护进程

DLT 守护程序是高度可配置的,但对于这种情况,默认设置是可以的:

dlt-daemon
[101679.622834]~DLT~21069~NOTICE   ~Starting DLT Daemon; DLT Package Version: 2.18.8 STABLE, Package Revision: v2.18.8_5_g1f51eab, build on Nov  2 2021 14:11:04
-SYSTEMD -SYSTEMD_WATCHDOG -TEST -SHM

[101679.622935]~DLT~21069~INFO     ~FIFO size: 65536
[101679.622946]~DLT~21069~INFO     ~Activate connection type: 5
[101679.622960]~DLT~21069~INFO     ~dlt_daemon_socket_open: Socket created
[101679.622972]~DLT~21069~INFO     ~dlt_daemon_socket_open: Listening on ip 0.0.0.0 and port: 3490
[101679.622979]~DLT~21069~INFO     ~dlt_daemon_socket_open: Socket send queue size: 16384
[101679.622992]~DLT~21069~INFO     ~Activate connection type: 1
[101679.623020]~DLT~21069~INFO     ~Activate connection type: 9
[101679.623033]~DLT~21069~INFO     ~Cannot open configuration file: /tmp/dlt-runtime.cfg
[101679.623038]~DLT~21069~INFO     ~Ringbuffer configuration: 500000/10000000/500000
[101679.623331]~DLT~21069~NOTICE   ~Failed to open ECU Software version file.
[101679.623348]~DLT~21069~INFO     ~Activate connection type: 6
[101679.623353]~DLT~21069~INFO     ~Switched to buffer state for socket connections.
[101679.623367]~DLT~21069~WARNING  ~dlt_daemon_applications_load: cannot open file /tmp/dlt-runtime-application.cfg: No such file or directory

守护进程打开了一个命名管道,准备从中读取和缓冲日志消息。它还接受客户端在 TCP 端口 3490 上的连接以收集消息。

生成日志消息

一个模拟的 ECU——一个 DLT 用户——现在将使用 DLT 库来创建日志消息并通过命名管道发送它们以供守护程序收集。打开第二个终端并运行

dlt-example-user -n 5 -l 3 "This is my first log message"
Send 0 This is my first log message
Client connected!
Log level changed of context TEST, LogLevel=4, TraceState=0 
Log level changed of context TS1, LogLevel=4, TraceState=0 
Log level changed of context TS2, LogLevel=4, TraceState=0 
Send 1 This is my first log message
Send 2 This is my first log message
Send 3 This is my first log message
Send 4 This is my first log message

这将发送包含字符串负载的 5 (-n 5) 条相同的日志级别WARNING (-l 3) 日志消息。

Read logs

DLT 守护进程现在将消息保存在其缓冲区中,并将它们保存在那里,直到它们被提取。接收和处理日志消息的强大工具是 DLT-Viewer,它也提供图形用户界面。现在,一个简单的命令行客户端就足够了:

dlt-receive -a localhost
2020/04/30 12:27:14.976731   17134987 000 ECU1 DA1- DC1- control response N 1 [service(3842), ok, 02 00 00 00 00]
2020/04/30 12:27:14.976779   17067139 000 ECU1 DA1- DC1- control response N 1 [service(3842), ok, 01 00 00 00 00]
2020/04/30 12:27:14.976787   17067139 004 ECU1 DLTD INTM log info V 1 [Client connection #7 closed. Total Clients : 0]
2020/04/30 12:27:14.976794   17104625 005 ECU1 DLTD INTM log info V 1 [ApplicationID 'LOG' registered for PID 5241, Description=Test Application for Logging]
2020/04/30 12:27:14.976802   17104625 000 ECU1 DA1- DC1- control response N 1 [get_log_info, 07, 01 00 4c 4f 47 00 01 00 54 45 53 54 ff ff 18 00 54 65 73 74 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 4c 6f 67 67 69 6e 67 1c 00 54 65 73 74 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 66 6f 72 20 4c 6f 67 67 69 6e 67 72 65 6d 6f]
2020/04/30 12:27:14.976823   17104625 000 ECU1 DA1- DC1- control response N 1 [get_log_info, 07, 01 00 4c 4f 47 00 01 00 54 53 31 00 ff ff 1b 00 54 65 73 74 20 43 6f 6e 74 65 78 74 31 20 66 6f 72 20 69 6e 6a 65 63 74 69 6f 6e 1c 00 54 65 73 74 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 66 6f 72 20 4c 6f 67 67 69 6e 67 72 65 6d 6f]
2020/04/30 12:27:14.976844   17104625 000 ECU1 DA1- DC1- control response N 1 [get_log_info, 07, 01 00 4c 4f 47 00 01 00 54 53 32 00 ff ff 1b 00 54 65 73 74 20 43 6f 6e 74 65 78 74 32 20 66 6f 72 20 69 6e 6a 65 63 74 69 6f 6e 1c 00 54 65 73 74 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 66 6f 72 20 4c 6f 67 67 69 6e 67 72 65 6d 6f]
2020/04/30 12:27:14.976866   17104588 000 ECU1 LOG- TEST log warn V 2 [0 This is my first log message]
2020/04/30 12:27:14.976872   17109592 001 ECU1 LOG- TEST log warn V 2 [1 This is my first log message]
2020/04/30 12:27:14.976880   17114599 002 ECU1 LOG- TEST log warn V 2 [2 This is my first log message]
2020/04/30 12:27:14.976884   17119607 003 ECU1 LOG- TEST log warn V 2 [3 This is my first log message]
2020/04/30 12:27:14.976889   17124611 004 ECU1 LOG- TEST log warn V 2 [4 This is my first log message]
2020/04/30 12:27:14.976894   17134988 006 ECU1 DLTD INTM log info V 1 [New client connection #8 established, Total Clients : 1]
2020/04/30 12:27:15.442016   17139641 000 ECU1 DA1- DC1- control response N 1 [service(3841), ok, 4c 4f 47 00 54 45 53 54 72 65 6d 6f]
2020/04/30 12:27:15.442044   17139642 007 ECU1 DLTD INTM log info V 1 [Unregistered ApID 'LOG']

户端连接到 localhost 的默认端口 3490 以收集所有消息并将有效负载解释为 ASCII 文本 (-a)。您可以看到许多其他消息。这些是控制客户端和守护进程之间的流的控制消息。稍后您将了解它们。现在,您已经建立了一个基本示例,已经看到了 DLT 的运行情况。

Dlt到现在为止还只能手动运行,如果想要开机自启还需要把它设置为服务,可以自创建一个dlt-daemon.service文件,文件内容如下:

[Unit]
Description= dlt service.

[Service]
Type= simple
ExecStart= /usr/local/bin/dlt-daemon
Restart=on-failure
RestartSec=30s
RestartPreventExitStatus=SIGKILL
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

将文件放到/usr/lib/systemd/system,使用systemctl enable dlt-daemon.service设置开机启动,然后使用systemctl start dlt-daemon.service启动服务。

以上是关于Diagnostic Log and Trace——dlt的编译和安装的主要内容,如果未能解决你的问题,请参考以下文章

Diagnostic Log and Trace——dlt的编译和安装

Diagnostic Log and Trace——开发人员如何使用 DLT

Diagnostic Log and Trace——为应用程序和上下文设置日志级别的方法

使用 Trace 和 TraceSource 的区别

Diagnostic and programming Interface

Diagnostic and programming Interface