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
轉載請註明出處