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》。