oFono安装和启动

安装和启动oFono

1. git clone git://git.kernel.org/pub/scm/network/ofono/ofono.git

2. cd ofono

3. ./bootstrap-configure 或者./configure. configure过程中你可以需要装一些依赖包, 如:

sudo apt-get install libudev-dev libdbus-1-dev libcap-ng-dev libtool

4. make; sudo make install

5. sudo src/ofonod –nd ‘*’ 就可以启动oFono了

安装和启动phonesim

如果手上没有3G modem的话,可以装phonesim电话模拟器。

1. git clone git://git.kernel.org/pub/scm/network/ofono/phonesim.git

2. cd phonesim

3. ./bootstrap-configure; 中间你可以需要装Qt开发包,如

sudo apt-get install libqt4-dev

4. make; sudo make install

5. src/phonesim –gui src/default.xml  这一步用来启动phonesim

启动phonesim后你会发现什么都没发生,但实际上phonesim已经在port 12345建立了一个sock连接。你需要做的是修改/usr/local/etc/ofono/modem.conf (或/etc/ofono/modem.conf)。

[phonesim]

Driver=phonesim

Address=127.0.0.1

Port=12345

修改保存后再启动oFono。

ofonod[2460]: src/gprs.c:ofono_gprs_context_driver_register() driver: 0x810a588, name: hsomodem
ofonod[2460]: src/radio-settings.c:ofono_radio_settings_driver_register() driver: 0x810a5a4, name: hsomodem
ofonod[2460]: src/gprs.c:ofono_gprs_context_driver_register() driver: 0x810a538, name: mbmmodem
ofonod[2460]: src/stk.c:ofono_stk_driver_register() driver: 0x810a554, name: mbmmodem
ofonod[2460]: src/voicecall.c:ofono_voicecall_driver_register() driver: 0x810a440, name: hfpmodem
ofonod[2460]: src/network.c:ofono_netreg_driver_register() driver: 0x810a4c0, name: hfpmodem
ofonod[2460]: src/call-volume.c:ofono_call_volume_driver_register() driver: 0x810a4f8, name: hfpmodem
ofonod[2460]: src/voicecall.c:ofono_voicecall_driver_register() driver: 0x810a3a0, name: calypsomodem
ofonod[2460]: src/stk.c:ofono_stk_driver_register() driver: 0x810a3f0, name: calypsomodem
ofonod[2460]: src/gprs.c:ofono_gprs_context_driver_register() driver: 0x810a36c, name: huaweimodem
ofonod[2460]: src/radio-settings.c:ofono_radio_settings_driver_register() driver: 0x810a338, name: nwmodem
ofonod[2460]: src/voicecall.c:ofono_voicecall_driver_register() driver: 0x810a200, name: atmodem
ofonod[2460]: src/modem.c:ofono_devinfo_driver_register() driver: 0x810a29c, name: atmodem
ofonod[2460]: src/call-barring.c:ofono_call_barring_driver_register() driver: 0x810a250, name: atmodem
ofonod[2460]: src/call-forwarding.c:ofono_call_forwarding_driver_register() driver: 0x810a020, name: atmodem
ofonod[2460]: src/call-meter.c:ofono_call_meter_driver_register() driver: 0x810a060, name: atmodem
ofonod[2460]: src/call-settings.c:ofono_call_settings_driver_register() driver: 0x8109f20, name: atmodem
ofonod[2460]: src/phonebook.c:ofono_phonebook_driver_register() driver: 0x810a280, name: atmodem
ofonod[2460]: src/ssn.c:ofono_ssn_driver_register() driver: 0x810a290, name: atmodem
ofonod[2460]: src/ussd.c:ofono_ussd_driver_register() driver: 0x810a1b0, name: atmodem
ofonod[2460]: src/sms.c:ofono_sms_driver_register() driver: 0x8109fc0, name: atmodem
ofonod[2460]: src/sim.c:ofono_sim_driver_register() driver: 0x810a140, name: atmodem
ofonod[2460]: src/stk.c:ofono_stk_driver_register() driver: 0x810a18c, name: atmodem
ofonod[2460]: src/network.c:ofono_netreg_driver_register() driver: 0x810a0e0, name: atmodem
ofonod[2460]: src/cbs.c:ofono_cbs_driver_register() driver: 0x8109fe8, name: atmodem
ofonod[2460]: src/call-volume.c:ofono_call_volume_driver_register() driver: 0x810a2c8, name: atmodem
ofonod[2460]: src/gprs.c:ofono_gprs_driver_register() driver: 0x810a2f0, name: atmodem
ofonod[2460]: src/gprs.c:ofono_gprs_context_driver_register() driver: 0x810a304, name: atmodem
ofonod[2460]: src/modem.c:ofono_devinfo_driver_register() driver: 0x81097ac, name: isimodem
ofonod[2460]: src/phonebook.c:ofono_phonebook_driver_register() driver: 0x810979c, name: isimodem
ofonod[2460]: src/network.c:ofono_netreg_driver_register() driver: 0x81097e0, name: isimodem
ofonod[2460]: src/voicecall.c:ofono_voicecall_driver_register() driver: 0x8109820, name: isimodem
ofonod[2460]: src/sms.c:ofono_sms_driver_register() driver: 0x8109880, name: isimodem
ofonod[2460]: src/cbs.c:ofono_cbs_driver_register() driver: 0x81098a0, name: isimodem
ofonod[2460]: src/sim.c:ofono_sim_driver_register() driver: 0x81098c0, name: isimodem
ofonod[2460]: src/ssn.c:ofono_ssn_driver_register() driver: 0x8109904, name: isimodem
ofonod[2460]: src/ussd.c:ofono_ussd_driver_register() driver: 0x8109910, name: isimodem
ofonod[2460]: src/call-forwarding.c:ofono_call_forwarding_driver_register() driver: 0x8109940, name: isimodem
ofonod[2460]: src/call-settings.c:ofono_call_settings_driver_register() driver: 0x8109960, name: isimodem
ofonod[2460]: src/call-barring.c:ofono_call_barring_driver_register() driver: 0x8109988, name: isimodem
ofonod[2460]: src/call-meter.c:ofono_call_meter_driver_register() driver: 0x81099a0, name: isimodem
ofonod[2460]: src/radio-settings.c:ofono_radio_settings_driver_register() driver: 0x81099c8, name: isimodem
ofonod[2460]: src/gprs.c:ofono_gprs_driver_register() driver: 0x81099dc, name: isimodem
ofonod[2460]: src/gprs.c:ofono_gprs_context_driver_register() driver: 0x81099f0, name: isimodem
ofonod[2460]: src/modem.c:ofono_modem_driver_register() driver: 0x8109760, name: isimodem
ofonod[2460]: src/modem.c:ofono_modem_create() name: phonesim, type: phonesim
ofonod[2460]: src/modem.c:set_modem_property() modem 0x84ea770 property Address
ofonod[2460]: src/modem.c:set_modem_property() modem 0x84ea770 property Port
ofonod[2460]: plugins/phonesim.c:phonesim_probe() 0x84ea770
ofonod[2460]: plugins/bluetooth.c:manager_properties_cb()
ofonod[2460]: plugins/bluetooth.c:parse_adapters()
ofonod[2460]: plugins/bluetooth.c:parse_adapters() Calling GetProperties on /org/bluez/1398/hci0
ofonod[2460]: plugins/bluetooth.c:parse_devices()
ofonod[2460]: plugins/bluetooth.c:adapter_properties_cb() Adapter Address: 00:22:69:C6:0F:4D, Path: /org/bluez/1398/hci0
ofonod[2460]: Using device: /org/bluez/1398/hci0/dev_00_BD_3A_69_60_AB, devaddr: 00:BD:3A:69:60:AB, adapter: 00:22:69:C6:0F:4D
ofonod[2460]: src/modem.c:ofono_modem_create() name: hfp/002269C60F4D_00BD3A6960AB, type: hfp
ofonod[2460]: plugins/hfp.c:hfp_register_ofono_handsfree() Registering oFono Agent to bluetooth daemon

上面的log中包含以下这一行,说明oFono能够正确检测到phonesim。

ofonod[2460]: plugins/phonesim.c:phonesim_probe() 0x84ea770

Power on phonesim

1. cd ofono/test

2. ./list-modem

xxx@xxx:~/ofono/test$ ./list-modems
[ /hfp/002269C60F4D_00BD3A6960AB ]
    Interfaces =
    Powered = 0
    Name = Nokia N900
    Features =
    Online = 0

[ /phonesim ]
    Interfaces =
    Powered = 0
    Features =
    Online = 0

上面的log中说明有两个modem存在,一个是和蓝牙连接的HFP modem,另一个是phonesim。

3. ./enable-modem

xxx@xxx:~/ofono/test$ ./enable-modem /phonesim
Connecting modem /phonesim...

enable-modem用来power on modem,启动后的modem处于offline离线状态,例如飞行模式就是处于offline。enable-modem后phonesim就会显示一个界面了,以后你可以通过它做很多事情。:-)

phonesim

4. ./online-modem

xxx@xxx:~/ofono/test$ ./online-modem /phonesim
Setting modem /phonesim online...

online-modem会开启modem的所有功能,如GPRS,SMS等等。

5. 让我们打一个电话吧。

xxx@xxx:~/ofono/test$ ./test-voicecall /phonesim 10086
Using modem /phonesim
Dialing 10086...
Dialing in progress, got obj: /phonesim/voicecall01
State: dialing, Number: 10086
    Voice Call [ /phonesim/voicecall01 ] Added
        State = dialing
        LineIdentification = 10086
        Multiparty = 0

Voicecall property: 'State' changed to 'alerting'
Voicecall property: 'State' changed to 'active'
Voicecall property: 'StartTime' changed to '2010-09-17T09:27:54+0800'

恭喜,你的第一个电话打通了! ;-)

### ofono 系统概述 ofono 是一个用于管理手机调制解器(modem)的系统,主要用于 Linux 平台上的移动设备。它提供了一个抽象层,使得应用程序可以与不同的调制解器进行交互,而无需关心具体的硬件实现[^3]。 ofono 的设计目标是支持多种类型的调制解器,并且能够处理各种无线通信技术,例如 GSM、UMTS LTE。 #### 主要功能 ofono 提供了以下核心功能: - **网络注册**:ofono 能够管理监控设备在网络中的注册状态[^4]。 - **呼叫管理**:支持语音呼叫的发起、接收挂断操作[^5]。 - **短信服务**:允许发送接收短消息[^6]。 - **数据连接**:管理数据连接的建立断开,支持 GPRS、EDGE、HSPA 等技术[^7]。 - **SIM 卡管理**:提供对 SIM 卡的操作支持,包括 PIN 验证信息读取[^8]。 #### 架构设计 ofono 的架构基于客户端-服务器模型。服务器端运行在后台,负责与调制解器直接通信;客户端通过 D-Bus 接口与服务器端交互。这种设计使得 ofono 具有良好的可扩展性灵活性[^9]。 以下是 ofono 的基本架构图示例: ```plaintext +-------------------+ | Applications | +-------------------+ | v +-------------------+ | D-Bus API | +-------------------+ | v +-------------------+ | ofono Core | +-------------------+ | v +-------------------+ | Modem Drivers (e.g., Ericsson, Qualcomm) | +-------------------+ ``` #### 技术特点 - **模块化设计**:ofono 的核心部分与具体的调制解器驱动程序分离,便于支持新的硬件[^10]。 - **D-Bus 支持**:通过 D-Bus 提供标准化的接口,方便其他软件与其集成[^11]。 - **跨平台兼容性**:虽然最初为 MeeGo 开发,但 ofono 已经被移植到多个 Linux 发行版中,包括 Tizen Ubuntu Touch[^12]。 #### 使用场景 ofono 广泛应用于嵌入式 Linux 系统中,特别是在需要支持蜂窝网络功能的设备上。例如: - 智能手机平板电脑 - 物联网设备 - 车载信息系统 ### 示例代码 以下是一个简单的 Python 示例,展示如何通过 D-Bus 与 ofono 进行交互: ```python import dbus # 连接到系统总线 bus = dbus.SystemBus() # 获取 ofono 对象 manager = dbus.Interface(bus.get_object('org.ofono', '/'), 'org.ofono.Manager') # 列出所有调制解器 modems = manager.GetModems() for path, properties in modems: print(f"Modem Path: {path}, Online: {properties['Online']}") ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值