DLT(Diagnostic Log and Trace)简单应用 · 大专栏

您所在的位置:网站首页 daemon是什么 DLT(Diagnostic Log and Trace)简单应用 · 大专栏

DLT(Diagnostic Log and Trace)简单应用 · 大专栏

2023-03-28 15:12| 来源: 网络整理| 查看: 265

git clone https://github.com/GENIVI/dlt-daemon.git cd dlt-daemon mkdir build cd build cmake .. make sudo make install sudo ldconfigdlt-daemon 编译安装就完成了libdlt.so 位于 /usr/local/libdlt 等头文档位置 /usr/local/include/dlt 二、启动 dlt-daemon(守护进程)

首先复制 dlt.conf 文档

cd dlt-daemon/src/daemon/ sudo cp dlt.conf /etc/ 可以通过 sudo gedit /etc/dlt.conf 更改配置

DLT 守护进程是从不同的应用进程中收集日志和跟踪信息的中心位置,这些日志和跟踪信息可以临时存储或永久存储,并传输到 DLT 客户机应用进程

三、输出日志进程编写

可以参考 example 中例子

四、接收日志进程

通过安装 dlt-daemon 会自动编译安装这个进程,也可以自己找到同名文档进行编译定制。

dlt-receive -f filter.txt -o ./log.dlt -a localhost dlt-receive -o ./log.dlt -a localhost

五、dlt-viewer 查看日志文档工具

现装依赖包 sudo apt-get install libqt5serialport5-dev libqt5serialport5

git clone https://github.com/GENIVI/dlt-viewer.git mkdir build cd build cmake .. make

注意

app context 默认四字节 id 默认一字节更加 autosar 协议 所以最大 255

输出日志进程, 和守护进程都有缓存机制。

The library path and include path must be set in the build environment prior to building a program using the shared dlt library.

you may not call DLT_REGISTER_APP before fork()

If your application uses fork(), you may not call DLT_REGISTER_APP before fork(). And fork() should never be called after DLT_REGISTER_APP. This is because of state information and inter process communication channel to daemon would be copied to new process, but threads would be not.

# include < dlt / dlt.h >

首先要做的是包含 DLT 的标准头文档

DLT_DECLARE_CONTEXT (mycontext);

接下来是为应用进程的每个使用上下文创建实例。在使用任何上下文之前,这必须在源代码之外完成。

DLT_IMPORT_CONTEXT (mycontext);

如果在另一个软件模块中第二次使用上下文,则必须调用以下宏来访问上下文。

DLT_REGISTER_APP(“LOG”、“Test Application for Logging”);

在应用进程初始化的下一步中,应用进程必须在 DLT 守护进程中注册。应用进程的标识符 (这里是 “LOG”) 最多有四个字符。

DLT_REGISTER_CONTEXT(mycontext,"TEST"," TEST Context for Logging");

然后必须在 DLT 守护进程中注册每个上下文。必须调用这个宏,以便 DLT 守护进程和客户机能够设置应用进程中上下文的日志级别。上下文的标识符 (这里是 “TEST”) 最多有四个字符。此上下文使用默认日志级别和默认跟踪状态。

DLT_REGISTER_CONTEXT(mycontext,"TEST"," TEST Context for Logging",DLT_LOG_VERBOSE,DLT_TRACE_STATUS_ON);

作为替代,可以在期间提供特定的日志级别和跟踪状态

上下文的注册。现在在详细模式和非详细模式之间选择:

DLT_LOG(mycontext ,DLT_LOG_WARN, DLT_INT(num),DLT_STRING(text));

对于详细模式 (默认):注册之后,可以使用上下文向 DLT 守护进程发送日志消息。必须使用日志消息的使用日志级别和参数的变量列表调用 DLT_LOG 宏。您将在附录 API 规范中找到完整的参数列表。

DLT_LOG_INT (mycontext DLT_LOG_WARN, num);DLT_LOG_STRING_INT(mycontext,DLT_LOG_WARN, text, num);

作为一种替代方法,可以使用高级日志宏来实现参数的特殊组合。您将在附录 API 规范中找到完整的列表。

DLT_LOG_ID(mycontext,DLT_LOG_WARN,msgid,DLT_INT(num),DLT_STRING(text));

对于非详细模式:注册之后,可以使用上下文向 DLT 守护进程发送日志消息。必须使用日志消息的使用日志级别、消息 id 和参数变量列表调用 DLT_LOG_ID 宏。您将在 API 规范中找到完整的参数列表。

int injection_callback(uint32_t service_id, void *data, uint32_t length);

高级日志宏在非详细模式下不可用。要使用的一个可选特性是消息注入特性。DLT 客户机可以将用户定义的消息发送到应用进程,应用进程由服务 id(例如 0xfff) 标识。如果应用进程接收到这样的消息,则调用回调。回调的格式为:

DLT_REGISTER_INJECTION_CALLBACK (mycontext,0 xfff injection_callback);

若要在应用程序内登记回调,必须进行以下调用:

DLT_TRACE_NETWORK(mycontext, DLT_NW_TRACE_CAN, headerlen, header, payloadlen, payload);

此外,还可以跟踪网络消息。这里必须指定接口 DLT_NW_TRACE_CAN、头数据的长度和指向头数据的指针、负载数据的长度和指向负载数据的指针。如果没有头或有效负载可用,则必须将对应的长度设置为 0,并且必须将对应的指针设置为 NULL。

DLT_UNREGISTER_CONTEXT (mycontext);DLT_UNREGISTER_APP ();

在使用应用进程和上下文之后,必须从 DLT 守护进程注销它们。首先是所有上下文,然后必须注销应用进程。

参考

genivi 的 DLT 移植

DLT(Diagnostic Log and Trace)嵌入式系统进程运行记录



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3