1 概述
本文主要阐述使用genivi dlt离线存储相关事项
GENIVI DLT 提供日志和跟踪接口,基于 AUTOSAR 标准 4.0 DLT 中指定的标准化协议。它由其他 GENIVI 组件使用,但可以用作其他应用程序的日志记录框架,与 GENIVI 无关。
本文主要对应DLT Daemon 2.18.8版本
最重要的术语和部分如下图所示。有关 DLT 特定术语的完整概述,请参阅词汇表。
DLT Application:本质上是一个应用程序,服务于其各自(非 DLT 相关)目的并生成 DLT 日志消息。它利用 DLT 库来制作和传输这些消息。
DLT Library:为 DLT 用户(即应用程序)提供了一个方便的 API,以创建 DLT 日志消息并将它们交给 DLT 守护程序。如果后者不可用,库会将消息缓存在环形缓冲区中,这样它们就不会立即丢失。
DLT Daemon:是ECU 的DLT 通信接口。它收集和缓冲来自在 ECU 上运行的一个或多个 DLT 用户的日志消息,并根据他们的请求将它们提供给 DLT 客户端。守护进程还接受来自客户端的控制消息来调整守护进程或应用程序的行为。
DLT Client:通过从 DLT 守护进程获取日志消息来接收和使用来自 DLT 用户的日志消息。它还可以发出控制消息来控制 DLT 守护程序或其连接的 DLT 用户的行为。 DLT 客户端甚至可以通过所谓的注入消息将用户定义的数据传输给 DLT 用户。
Log Storage:主要从Daemon的缓存中拉取日志信息,可以对输出按照Filter配置进行控制。
2 指南
cd dlt-daemon-master
2.1 Make
2.1.1 修改CONFIGURATION_FILES_DIR
修改CMakeList.txt
#set(CONFIGURATION_FILES_DIR ${CMAKE_INSTALL_FULL_SYSCONFDIR})
set(CONFIGURATION_FILES_DIR ${CMAKE_CONFIG_FILE_PATH})
2.1.2 修改配置的 install path
将DESTINATION ${CONFIGURATION_FILES_DIR} 调整为DESTINATION ${CMAKE_INSTALL_PREFIX}/etc
./src/daemon/CMakeList.txt
INSTALL(FILES dlt.conf
DESTINATION ${CMAKE_INSTALL_PREFIX}/etc
COMPONENT base)
./src/gateway/CMakeList.txt
INSTALL(FILES dlt_gateway.conf
DESTINATION ${CMAKE_INSTALL_PREFIX}/etc
COMPONENT base)
cmake -DCMAKE_TOOLCHAIN_FILE=../aarch64.toolchain.cmake -DCMAKE_CONFIG_FILE_PATH=/your_config_path/2578/etc -DCMAKE_INSTALL_PREFIX=/your_file_path/2578/install ..
make
make install
2.2 code
2.2.1 标准接口Simple code
#include "dlt/dlt.h"
DLT_DECLARE_CONTEXT(myContext1)
DLT_DECLARE_CONTEXT(myContext2)
DLT_DECLARE_CONTEXT(myContext3)
/* dlt:register dlt application: LogAppName=APP */
DLT_REGISTER_APP("APP","Application for Logging");
/* dlt:register all contexts: ContextName=TEST */
DLT_REGISTER_CONTEXT(myContext1,"TEST1","Test Context 1 for Logging");
DLT_REGISTER_CONTEXT(myContext2,"TEST2","Test Context 2 for Logging");
DLT_REGISTER_CONTEXT(myContext3,"TEST3","Test Context 3 for Logging");
/* dlt: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"));
/* dlt:unregister your contexts */
DLT_UNREGISTER_CONTEXT(myContext1);
DLT_UNREGISTER_CONTEXT(myContext2);
DLT_UNREGISTER_CONTEXT(myContext3);
/* dlt:unregister your application */
DLT_UNREGISTER_APP();
./dlt-daemon -c /home/my_dlt/etc/dlt.conf -t /tmp/genivi_dlt -p 3495
Applications wanting to connect to a daemon using a custom directory need to be started with the environment variable DLT_PIPE_DIR set appropriately.
export DLT_PIPE_DIR=/tmp/genivi_dlt
Applications wanting to connect to a daemon using a custom port need to be started with the environment variable DLT_DAEMON_TCP_PORT set appropriately.
export DLT_DAEMON_TCP_PORT =3495
2.3 config
Directory for local fifo and user-pipes (Default: /tmp/genivi_dlt)
Port to monitor for incoming requests (Default: 3495)
DLT daemon configuration file (Default: /home/my_dlt/etc/dlt.conf)
LoggingFilename = /tmp/genivi_dlt/dlt.log
ControlSocketPath = /tmp/genivi_dlt/dlt-ctrl.sock
2.3.1 dlt_daemon
./dlt-daemon -c /home/my_dlt/dlt.conf -t /tmp/genivi_dlt -p 3495
2.3.2 dlt_logstorage
./bin/dlt-logstorage-ctrl -c 1 -p /home/my_dlt/storage/genivi_dlt/log
# Offline logstorage
OfflineLogstorageMaxDevices = 1
dlt_logstorage.conf
[FILTER1]
LogAppName=LOG
ContextName=TEST
LogLevel=DLT_LOG_DEBUG
File=svsoc01
FileSize=500
NOFiles=5
LogAppName 对应APID: LOG,
ContextName 对应CTID: TEST,
这里的ECUID继承dlt.conf的ECU: ECU1
LogLevel用于限制输出的level
File文件名,这里不能指定文件路径,文件路径只能dlt-logstorage-ctrl的-p参数指定
FileSize:文件大小,单个文件的大小
NOFiles:文件个数
注意:File文件不能出现下划线_, 因为DLT默认的分隔符是_(可以调整),这样会引起DLT获取数据分割时失败,从而导致Index无法从文件名中获取导致计数和递增失败。
比如出现如下问题
[ 4691.526959]~DLT~ 2887~ERROR ~Unable to calculate index from log file name. Reset to 001
转载请注明出处