dbus的Embedded移植

亡梦爱人 提交于 2019-12-06 07:57:32

一、所需下载安装安装包:

  1dbus-1.8.0.tar.gz

http://www.freedesktop.org/wiki/Software/dbus

  2expat-2.1.0.tar.gz

    http://sourceforge.net/projects/expat/

二、安装步骤

1expat安装

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.

  2dbus安装

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目录下有binlibvaretcincludesharelibexec目录,我们所需要移植到板子上的只要binetcvar目录,其余的目录都可以删除。

dbus-daemon是一个后台进程,负责消息的转发。它就像个路由器。最常见的基于dbus的程序也是符合C/S结构的。dbus-daemon进程分为两种,一个是属于system的,一个是属于session的。

在板子上通过启动dbus-daemon 。

1session-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-daemonsession-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

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!