概述
GENIVI DLT 提供日志和跟踪接口,基于 AUTOSAR 标准 4.0 DLT 中指定的标准化协议。它被其他 GENIVI 组件使用,但可以作为其他应用程序的日志框架,与 GENIVI 无关。
最重要的术语和部分如下图所示。有关 DLT 特定术语的完整概述,请参阅词汇表。
简单来说就是一个很好用的应用日志服务,这个服务支持图形化绿色软件 DLT-Viewer,需要网络支持,可以存储离线日志,体积十分小巧,灵活的配置管理方式。
源码开源网址:GitHub - COVESA/dlt-daemon: Diagnostic Log and Trace.
编译与安装
需要安装以下软件包才能构建和安装 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启动服务。