使用dlt-viewer查看日志

想知道node-health-monitor在哪里退出了,要查看日志。一读代码发现所有日志都是用DLT_LOG输出的,syslog默认位置/var/log下看不到任何有用的日志。于是搜索如何查看dlt日志,how to view dlt log,查到可以使用dlt-viewer查看DLT日志 。
该组件作用是通过SSH连接ECU,可视化呈现ECU上所有通过DLT输出的日志,如下图:

该组件为开源软件,可通过源代码编译后使用。参考文档:
https://pelux.io/software-factory/master/swf-blueprint/docs/articles/sdk/read-system-logs.html
源代码:
https://github.com/COVESA/dlt-viewer
dlt-viewer日志分析
首先映入眼帘的是nhm在请求pas服务时被拒绝,systemctl status pas-daemon发现该服务压根没启动。
systemctl enable pas-daemon启用服务后还是不行。
分析dlt-viewer日志发现:
ERROR1
pas服务在获取DBUS name时失败了。
查看nodestatemanager-daemon服务的配置文件,大致在如下四个位置:
/lib/systemd/system/nodestatemanager-daemon.service

其中针对dbus配置的行:
BusName=org.genivi.NodeStateManager
/etc/dbus-1/system.d/org.genivi.NodeStateManager.conf

该文件用于定义dbus总线的归属、目的地及接口。
其中:

需要跟代码中g_bus_own_name函数传入的bus name匹配。

一般跟own的值一致。

定义interface,取值与下面文件中的接口相一致:
/usr/share/dbus-1/interfaces/org.genivi.NodeStateManager.LifecycleConsumer.xml

另外还有两个接口定义文件,但不知道为什么不需要/etc/dbus-1/system.d/下没有对应的conf
/usr/share/dbus-1/interfaces/org.genivi.NodeStateManager.LifecycleControl.xml
org.genivi.NodeStateManager.LifecycleControl.xml
/usr/share/dbus-1/system-services/org.genivi.NodeStateManager.LifeCycleControl.service

[D-BUS Service]
Name=org.genivi.NodeStateManager
SystemdService = nodestatemanager-daemon.service
Exec=/bin/false
该文件用于定义dbus服务名及对应的systemd服务名和启动命令行。注意Name要与system服务service文件中定义的 BusName 匹配。

根据以上信息,结合persistence-admin源代码中的dbus配置文件,手动添加如下文件:
/etc/dbus-1/system.d/org.genivi.persistence.admin.conf
/usr/share/dbus-1/system-services/org.genivi.persistence.admin.service
同时在/lib/systemd/system/pas-daemon.service中添加:
BusName=org.genivi.persistence.admin
重启发现pas-daemon服务起来了,但node-health-monitor服务仍然没有起来。
继续查看dlt-viewer日志发现:
ERROR2
node-health-monitor服务也获取DBUS name失败。
按照解决ERROR1的方法对node-health-monitor进行dbus配置,结果不好用。
看node-health-monitor源代码发现,其使用的dbus类型为2,即session dbus,而之前的nodestatemanager-daemon和pas-daemon服务使用的dbus类型都是1,system dbus。
结果及总结
经过搜索system dbus和session dbus的区别和各自的配置方法,以及多番尝试,最后得出如下结论:

  1. 服务service文件
    使用system dbus的服务,其服务service文件存放在/lib/systemd/system下
    使用session dbus的服务,其服务service文件存放在/etc/systemd/user和/lib/systemd/system两个位置,/etc/systemd/user下的service文件可以是软链接指向/lib/systemd/system下对应的服务service文件
  2. dbus配置文件
    使用system dbus的服务,其dbus配置文件存放在/etc/dbus-1/system.d/
    使用session dbus的服务,其dbus配置文件存放在/etc/dbus-1/session.d/
  3. dbus服务service文件
    使用system dbus的服务,其dbus服务service文件存放在/usr/share/dbus-1/system-services/
    使用session dbus的服务,其dbus服务service文件存放在/usr/share/dbus-1/services/
  4. 服务启用命令
    使用system dbus的服务,启用服务的命令为systemctl enable xxx.service
    使用session dbus的服务,启用服务的命令为systemctl --user enable xxx.service
  5. 服务状态查看
    使用system dbus的服务,查看服务状态的命令为systemctl status xxx.service
    使用session dbus的服务,查看服务状态的命令为systemctl --user status xxx.service
    第四点尤为重要,因为没有注意到这一点卡了三四天,直到在启用服务时加了–user,才终于把node-health-monitor服务启动起来。
    执行:
    ps -e | grep -i dbus
    会发现有两个dbus-daemon:
    dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
    dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
    第一个由/lib/systemd/system/dbus.service服务启动
    第二个由/usr/lib/systemd/user/dbus.service服务启动
    依赖于dbus的服务在service文件中定义require和after的时候都添加dbus.service,系统会根据服务对应的dbus服务类型(system或session)自动匹配对应目录下的dbus.service。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值