? 嵌入式linux中文站向廣大嵌入式linux愛(ài)好者介紹一下MeeGo的DBus調(diào)試工具。
DBus是MeeGo進(jìn)程通信的核心。我們簡(jiǎn)要的看一下MeeGo系統(tǒng)的哪些地方都使用了DBus.
1.從一個(gè)應(yīng)用中啟動(dòng)另一個(gè)應(yīng)用時(shí)。比如在聯(lián)系人應(yīng)用中想要撥打聯(lián)系人的電話時(shí),MeeGo系統(tǒng)中是通過(guò)DBus做進(jìn)程通信的.
2.Service Framework是基于DBus的。比如你看到一個(gè)多媒體文件,點(diǎn)擊提交一個(gè)"播放文件"的請(qǐng)求,該請(qǐng)求搜索合適的應(yīng)用來(lái)播放該文件.
3.發(fā)布和訂閱者系統(tǒng)。比如一個(gè)屏幕上的顯示訂閱了電池的電量消息,則在電量變化時(shí)通過(guò)DBus通知訂閱者.
4.Notification Manager也是基于DBus的。如有短信到達(dá),Notification Manger會(huì)進(jìn)行提示.
5.系統(tǒng)的配置文件如果想在變動(dòng)的時(shí)候通知MeeGo中感興趣的應(yīng)用,也需要用到DBus,比如主題的變化等.
6. 藍(lán)牙中間件bluez和電話管理系統(tǒng)ofono的進(jìn)程通信系統(tǒng)也是基于DBus的。
鑒于DBus的這種重要性,可以說(shuō)"沒(méi)有DBus就沒(méi)有MeeGo"。那么我們也有必要了解一下MeeGo中有哪些DBus工具可以使用,方便在開(kāi)發(fā)過(guò)程中遇到問(wèn)題時(shí)更快的定位和解決問(wèn)題。
準(zhǔn)備DBUS_SESSION_BUS_ADDRESS
兩個(gè)基于DBus的應(yīng)用要能進(jìn)行通信,他們需要有同樣的DBUS_SESSION_BUS_ADDRESS.MeeGo在啟動(dòng)它的 uxlaunch時(shí),會(huì)啟動(dòng)一個(gè)DBus的服務(wù)進(jìn)程,可以從這個(gè)進(jìn)程里得到DBUS_SESSION_BUS_ADDRESS的值,而且通過(guò) uxlaunch加載的應(yīng)用會(huì)繼承該環(huán)境變量,如果是自己從命令行啟動(dòng)的話,那么需要在運(yùn)行你的應(yīng)用前設(shè)置好該環(huán)境變量,才能正常的和MeeGo系統(tǒng)里的已有應(yīng)用進(jìn)行通信。可以通過(guò)如下方法設(shè)置該值.
export `tr '' '\n' < /proc/$(pidof duihome)/environ|grep DBUS_SESSION_BUS_ADDRESS`
工具1:dbus-send/dbus-monitor
這個(gè)是隨dbus軟件包一起發(fā)布的工具,封裝比較底層,這里不做介紹了。可以在控制臺(tái)命令行里輸入man dbus-send查詢(xún)?cè)敿?xì)用法。
工具2:qdbus
該工具是基于Qt的一個(gè)命令行工具。用法如下
qdbus [--system] [--literal] [servicename] [path] [method] [args]
servicename the service to connect to (e.g., org.freedesktop.DBus)
path the path to the object (e.g., /)
method the method to call, with or without the interface
args arguments to pass to the call
有兩個(gè)參數(shù)
--system 連接到system-bus(dbus有兩種bus,一種是session-bus,一種是system-bus,不加參數(shù)默認(rèn)連接到session-bus.)
--literal 打印原始返回信息
* 如果qdbus命令不帶任何參數(shù),將會(huì)列出在dbus上所有的service.
* 假如參數(shù)里只有service的名字,那么qdbus會(huì)列出所有的對(duì)象路徑.
* 如果qdbus命令給出了service的名字和對(duì)應(yīng)的對(duì)象路徑,則該路徑上的方法,信號(hào)和可用的屬性都會(huì)被列出來(lái).
列出session bus的所有service
$ qdbus
列出system bus的所有service
$ qdbus --system
列出com.nokia.meego-im-uiserver service上所有路徑
$ qdbus com.nokia.meego-im-uiserver
列出com.nokia.meego-im-uiserver service上某一路徑里可用的方法
$ qdbus com.nokia.meego-im-uiserver /org/maemo/duiinputmethodserver1
調(diào)用指定service,指定路徑上的某個(gè)方法。
$ qdbus com.nokia.meego-im-uiserver /org/maemo/duiinputmethodserver1 org.maemo.duiinputmethodserver1.showInputMethod
工具3:d-feet
d-feet是一個(gè)用python寫(xiě)的應(yīng)用,在MeeGo中可以用如下命令安裝
#zypper install d-feet
要查看系統(tǒng)里有哪些已經(jīng)注冊(cè)的dbus service, 運(yùn)行d-feet命令
#d-feet
如要調(diào)用指定的method,在對(duì)應(yīng)的method上雙擊就可以了.
如要如果該method需要參數(shù),則會(huì)彈出參數(shù)選項(xiàng)框
工具4:qdbusviewer
qdbusviewer則是Qt軟件包中的一個(gè)開(kāi)發(fā)工具,在MeeGo中可以用如下命令安裝
#zypper install qt-devel-tools
要查看系統(tǒng)里有哪些已經(jīng)注冊(cè)的dbus service, 運(yùn)行qdbusviewer命令
#qdbusviewer
如果想調(diào)用對(duì)應(yīng)的method,在該方法上點(diǎn)擊鼠標(biāo)右鍵,可以看到"Call"字樣,選擇即可
結(jié)語(yǔ)
有了這些工具,你不僅可以很方便的知道系統(tǒng)里的服務(wù)是不是正常被注冊(cè)運(yùn)行了。還可以無(wú)中生有的產(chǎn)生一些事件,比如模擬短信收到,或者電話撥入等。這樣你在模擬器上也可以調(diào)試一些本啦需要硬件支持的功能了。DBus是MeeGo進(jìn)程通信的核心。我們簡(jiǎn)要的看一下MeeGo系統(tǒng)的哪些地方都使用了DBus.
?
評(píng)論
查看更多