一、所需下载安装安装包:
1、dbus-1.8.0.tar.gz
http://www.freedesktop.org/wiki/Software/dbus
2、expat-2.1.0.tar.gz
http://sourceforge.net/projects/expat/
二、安装步骤
1、expat安装
tar -zxvf expat-2.1.0.tar.gz
cd expat-2.1.0/
先进行配置:
./configure --host=arm-none-linux-gnueabi(编译器) --prefix=/home/yjs/expat(安装目录)
编译源文件:make.
安装:make install.
2、dbus安装
tar -zxvf dbus-1.8.0.tar.gz
cd dbus-1.8.0.tar.gz
配置:
./configure --prefix=/home/yjs/dbus(安装目录) --host=arm-none-linux-gnueabi “LIBS=-L/home/yjs/expat/lib”(刚才引用安装的expat的库文件) “CPPFLAGS=-I/home/yjs/expat/include”(引用expat的头文件)
编译源文件:make
安装:make install
三、移植到板子上
将编译好的dbus目录复制出来,我们可以看到dbus目录下有bin、lib、var、etc、include。share、libexec目录,我们所需要移植到板子上的只要bin、etc、var目录,其余的目录都可以删除。
dbus-daemon是一个后台进程,负责消息的转发。它就像个路由器。最常见的基于dbus的程序也是符合C/S结构的。dbus-daemon进程分为两种,一个是属于system的,一个是属于session的。
在板子上通过启动dbus-daemon 。
1、session-bus
./dbus-daemon --config-file=../etc/dbus-1/session.conf –print-address
设置环境变量DBUS_SESSION_BUS_ADDRESS,将打印的内容设置成DBUS_SESSION_BUS_ADDRESS的值就可以了,这样session-bus就可以使用了。
如果要通过./dbus-daemon --session或者./dbus-launch来启动dbus-daemon的session-bus则需要第二步安装dbus的目录和移植到板子上的目录要一样,不然可能报找不到某某文件的错误。
实践中发现用session-bus比较麻烦,要连接到session-bus的程序必须知道DBUS_SESSION_BUS_ADDRESS的值,因为DBUS_SESSION_BUS_ADDRESS的值不是唯一的,每次都不一样,每次都要设置DBUS_SESSION_BUS_ADDRESS的环境变量,虽然可以通过./dbus-launch来启动dbus-daemon,并且dbus-launch自带设置DBUS_SESSION_BUS_ADDRESS的环境变量的功能,但由于dbus-launch设置的环境变量只在本进程,而且是本次执行中有效。所以一般要通过eval `dbus-launch --auto-syntax`命令来启动dbus-launch,该命令采用eval来执行两次,第一次执行dbus-lauch --auto-syntax,除了启动dbus daemon之外,还输出了下面的内容:
DBUS_SESSION_BUS_ADDRESS='unix:path=/tmp/dbus-6Z62FMmwf3,guid=5dbd92e4865a3f56880d2120000000d6';
export DBUS_SESSION_BUS_ADDRESS; DBUS_SESSION_BUS_PID=998;
第二次执行时就将环境变量DBUS_SESSION_BUS_ADDRESS暴露出去了。之后你就可以启动要连接到session-bus的程序。
2、system-bus
./dbus-daemon --config-file=../etc/dbus-1/system.conf --print-address
打印的大致内容是:unix:path=/home/yjs/Desktop/dbus/var/run/dbus/
system_bus_socket,guid=73e31e28f60060659d6ee6005422cb1d
设置环境变量DBUS_SYSTEM_BUS_ADDRESS,只需将打印前半部的内容设置成环境变量DBUS_SYSTEM_BUS_ADDRESS=unix:path=/home/yjs/Desktop/dbus
/var/run/dbus/system_bus_socket,重启设备或source配置文件一下。
其中记录一下启动system-bus可能出现的问题的解决方案
A、错误:Failed to start message bus: Could not get UID and GID for username "messagebus"
解决:将dbus目录下/etc/dbus-1/system.conf文件中的 <user>messagebus
</user>改成root或其他系统存在的用户名,也可以添加一个messagebus的用户。
B、错误:Failed to start message bus: The pid file "/home/yjs/Desktop/dbus/var/run/messagebus.pid" exists, if the message bus is not running, remove this file
解决:删除messagebus.pid文件。
C、错误:"Connection ":1.69" is not allowed to own the service "com.xxx.test" due to security policies in the configuration file"
解决:修改dbus目录下/etc/dbus-1/system.conf文件的配置下的 <deny own="*"/>改为<allow own=”*”/>
参考:
http://blog.csdn.net/easebone/article/details/7336125
http://blog.csdn.net/jack0106/article/details/5588057
来源:CSDN
作者:beyvoid
链接:https://blog.csdn.net/beyvoid/article/details/39530925