LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

oFono/dbus-python环境搭建以及简单认识

关键词:D-Bus、oFono、dbus-python、ofonod、connmand等等。

1. oFono环境搭建(Buildroot+QEMU)和启动

1.1 Buildroot配置ofonod+dbus-python

配置oFono:

Target packages -> Networking application -> connman -> enable ofono support

使能Python3:

Target packages -> Interpreter languages and scripting -> python3

使能dbus-python:

Target packages -> Hardware handling -> dbus-python

初始化随机数脚本:

Target packages -> Security

编译结束后,可以看出oFono对其他模块依赖关系如下:

mobile-broadband-provider-info:移动宽带提供商数据库。

libell:Embedded Linux Library。

libdbus:D-Bus消息总线系统库文件。

libexpat:Expat xml解析器。

libglib2:libglib的2.x版本。

libcap-ng:相比于libcap更容易进行POSIX兼容编程。

libxml2:XML C解析器。

libpcre:Perl Compatible Regular Expression。

1.2 ofonod守护进程

oFono作为守护进程在系统启动时开始执行,它的运行依赖于dbus、connman、random number,所以按照顺序启动了如下相关进程:

  • S20urandom:初始化随机数发生器,ofonod启动需要随机数。
  • S30dbus:启动dbus-daemon服务。
  • S45connman:启动connmand服务。
  • S46ofono:启动ofonod服务。

启动后系统oFono相关进程进程:

  148     1 root     S     5336   1%   0% /usr/sbin/ofonod -n
  144     1 root     S     4364   0%   0% /usr/sbin/connmand -n
  104     1 dbus     S     2956   0%   0% dbus-daemon --system

ofonod的依赖库文件:

76bab000-76bbd000 r-xp 00000000 b3:00 193        /lib/libpthread-2.33.so
76bd0000-76c0a000 r-xp 00000000 b3:00 850        /usr/lib/libpcre.so.1.2.13
76c1b000-76cfd000 r-xp 00000000 b3:00 174        /lib/libc-2.33.so
76d17000-76d19000 r-xp 00000000 b3:00 178        /lib/libdl-2.33.so
76d2a000-76d68000 r-xp 00000000 b3:00 723        /usr/lib/libdbus-1.so.3.19.14
76d7a000-76e7e000 r-xp 00000000 b3:00 798        /usr/lib/libglib-2.0.so.0.7200.3
76e90000-76ee4000 r-xp 00000000 b3:00 765        /usr/lib/libell.so.0.0.2

1.3 ofono使用

修改/etc/ofono/phonesim.con文件,去掉#注释;然后重启ofonod服务。

[phonesim]
Address=127.0.0.1
Port=12345

执行./enable-modem /phonesim:

相关进程大致关系如下:

2 DBUS

DBUS是一个进程间通信解决方案,包含:

  • 一个libdbus库,不同进程调用用于进程间连接和交换消息。
  • 一个守护进程dbus-daemon,其他应用可以连接,dbus-damon路由消息其他进程。
  • 基于特定应用框架的dbus库文件,比如libdbus-glib、libdbus-qt、以及基于python、C++的封装文件。

libdbus仅支持一对一连接,libdbus一般作为其他高层封装的底层后台。dbus-daemon一般作为消息中转,调用libdbus的进程通过dbus-daemon收发消息。

更多参考: 《D-Bus Tutorial (dbus.freedesktop.org)》、《dbus (www.freedesktop.org)》。

2.1 dbus-python

更多参考:《dbus-python tutorial — dbus-python 1.3.2 documentation》。

3 oFono

oFono是由Intel和Nokia联合发布的开源电话通讯框架。代码维护在kernel.org的《ofono/ofono.git - Open Source Telephony》。

ofonod是一个提供访问移动电信设备接口的oFono栈守护进程。应用通过D-Bus控制oFono,比如一个应用可以调用org.ofono.at.Manager.Create通知oFono发送AT命令到电信设备。

3.1 oFono架构

来源:《oFono - Open-source telephony (remlab.net)》。

 4 Connman

Connmad是Connection Manager的意思,connmand是Linux下管理网络连接的守护进程。

更多参考:《Managing Internet Connections on Linux Devices with ConnMan》、《ConnMan - ArchWiki》。

posted on 2023-08-09 23:59  ArnoldLu  阅读(469)  评论(0编辑  收藏  举报

导航