OsmocomBB源码分析

GSM协议栈

在这里插入图片描述
基于接口,GSM信令协议组装成三个通用层:

  1. 第1层:物理层。 它使用空中接口上的通道结构。
  2. 第2层:数据链路层。 在Um接口上,数据链路层是用于ISDN中的D信道(LAPD)协议的链路访问协议的修改版本,在Dm信道上称为链路访问协议(LAPDm)。 在A接口上,使用消息传输部分(MTP),SS7的第2层。
  3. 第3层:GSM信令协议的第三层分为三个子层:
    - 无线电资源管理(RR Radio Resouce)
    - 流动性管理(MM Mobile Management)
    - 连接管理(CM Connection Management)

业务逻辑和接口

NAS层分为CC(Call Control) SS (Supplementary Service) SMS (Short Message Service) REG (register service)

各层逻辑框图和接口
在这里插入图片描述

osmocon代码分析

osmocon 是一种控制台工具,用于将手机上的基带固件与主机PC中的应用程序接口。
它还可用于通过串行线路将固件或引导程序下载到电话中,当前已针对CompalE88(C118/C120/C121/C123),CompalE99(C155)实现了该程序。
目前支持的Bootloader是CompalRamloader和CalypsoRomloader。
上载固件后,它将变成HDLC多路复用器/多路解复用器,从而允许与设备进行多通道通信。
电话控制台位于一个这样的通道上,并将被重定向到运行osmocom的终端(stdout)。
可以通过以下unix域套接字访问其他几个HDLC通道:

  • / tmp / osmocom_l2为L1A_L23_Interface 13759 移动,ccch_scan和其它主机程序
  • / tmp / osmocon_loader用于引导程序
    在这里插入图片描述

一般用法
使用HardwareSerialCable(2.5mm耳机插孔上的3.3V RS232)将电话 UART 连接到PC的串行端口。
选择要加载的固件,具体取决于要运行的主机程序。
将固件加载到手机,如下所示运行osmocon。用您的值填写电话类型和固件名称。

$ ./osmocon -p / dev / ttyUSB0 -m c123xor ../../target/firmware/board/PHONE_TYPE/FIRMWARE.compalram.bin

确保手机关机。 短暂按一下手机的开机按钮(短按,不像普通的手机开机!)。避免在使用osmocon时为手机充电,否则可能会限制加载程序。
观察类似于以下内容的输出:

got 2 bytes from modem, data looks like: 2f c8 
got 5 bytes from modem, data looks like: 1b f6 02 00 41 
got 1 bytes from modem, data looks like: 01 
got 1 bytes from modem, data looks like: 40 
Received PROMPT1 from phone, responding with CMD
read_file(../../target/firmware/board/compal_e88/loader.compalram.bin): file_size=13404, hdr_len=4, dnload_len=13411
got 1 bytes from modem, data looks like: 1b 
got 1 bytes from modem, data looks like: f6 
got 1 bytes from modem, data looks like: 02 
got 1 bytes from modem, data looks like: 00 
got 1 bytes from modem, data looks like: 41 
got 1 bytes from modem, data looks like: 02 
got 1 bytes from modem, data looks like: 43 
Received PROMPT2 from phone, starting download
handle_write(): 1023 bytes (1023/13411)
handle_write(): 768 bytes (1791/13411)
handle_write(): 768 bytes (2559/13411)
handle_write(): 768 bytes (3327/13411)
handle_write(): 768 bytes (4095/13411)
handle_write(): 768 bytes (4863/13411)
handle_write(): 768 bytes (5631/13411)
handle_write(): 768 bytes (6399/13411)
handle_write(): 768 bytes (7167/13411)
handle_write(): 768 bytes (7935/13411)
handle_write(): 768 bytes (8703/13411)
handle_write(): 768 bytes (9471/13411)
handle_write(): 768 bytes (10239/13411)
handle_write(): 768 bytes (11007/13411)
handle_write(): 768 bytes (11775/13411)
handle_write(): 768 bytes (12543/13411)
handle_write(): 768 bytes (13311/13411)
handle_write(): 100 bytes (13411/13411)
handle_write(): finished
got 1 bytes from modem, data looks like: 1b 
got 1 bytes from modem, data looks like: f6 
got 1 bytes from modem, data looks like: 02 
got 1 bytes from modem, data looks like: 00 
got 1 bytes from modem, data looks like: 41 
got 1 bytes from modem, data looks like: 03 
got 1 bytes from modem, data looks like: 42 
Received DOWNLOAD ACK from phone, your code is running now!
OSMOCOM Calypso loader (revision f45c5ee-modified)
======================================================================
Running on compal_e88 in environment ramload

现在,您可以通过应用程序(例如mobile,ccch_scan,osmoload等)与手机进行交互,具体取决于所加载的固件。

NAS层代码分析

在这里插入图片描述
UE和NW之间的呼叫处理过程
在这里插入图片描述

CC Call Control(GSM 04.08)

主叫和被叫 call control状态转换图
在这里插入图片描述
呼叫控制部分代码由全局变量datastatelist的函数列表来维护。
datastatelist的不同状态对应的处理函数

statesprotocoltypecallback
/* mobile originating call establishment*/
SBIT(GSM_CSTATE_INITIATED)/5.2.1.3/GSM48_MT_CC_CALL_PROCgsm48_cc_rx_call_proceeding
SBIT(GSM_CSTATE_INITIATED), SBIT(GSM_CSTATE_MO_CALL_PROC), SBIT(GSM_CSTATE_CALL_DELIVERED)/*5.2.1.4.1*/GSM48_MT_CC_PROGRESSgsm48_cc_rx_progress
SBIT(GSM_CSTATE_INITIATED), SBIT(GSM_CSTATE_MO_CALL_PROC)/*5.2.1.5*/GSM48_MT_CC_ALERTINGgsm48_cc_rx_alerting
SBIT(GSM_CSTATE_INITIATED), SBIT(GSM_CSTATE_MO_CALL_PROC), SBIT(GSM_CSTATE_CALL_DELIVERED)/*5.2.1.6*/GSM48_MT_CC_CONNECTgsm48_cc_rx_connect
/*mobile terminating call establishment*/
SBIT(GSM_CSTATE_NULL)/*5.2.2.1*/GSM48_MT_CC_SETUPgsm48_cc_rx_setup
SBIT(GSM_CSTATE_CONNECT_REQUEST)/*5.2.2.6*/GSM48_MT_CC_CONNECT_ACKgsm48_cc_rx_connect_ack
/*signalling during call*/
SBIT(GSM_CSTATE_ACTIVE)/*5.3.1*/GSM48_MT_CC_NOTIFYgsm48_cc_rx_notify
ALL_STATES/8.4/GSM48_MT_CC_STATUS_ENQgsm48_cc_rx_status_enq
ALL_STATES/8.4/GSM48_MT_CC_STATUSgsm48_cc_rx_status
ALL_STATES/*5.5.7.2*/GSM48_MT_CC_START_DTMF_ACKgsm48_cc_rx_start_dtmf_ack
ALL_STATES/*5.5.7.2*/GSM48_MT_CC_START_DTMF_REJgsm48_cc_rx_start_dtmf_rej
ALL_STATES/*5.5.7.4*/GSM48_MT_CC_STOP_DTMF_ACKgsm48_cc_rx_stop_dtmf_ack
SBIT(GSM_CSTATE_ACTIVE)GSM48_MT_CC_HOLD_ACKgsm48_cc_rx_hold_ack
SBIT(GSM_CSTATE_ACTIVE)GSM48_MT_CC_HOLD_REJgsm48_cc_rx_hold_rej
SBIT(GSM_CSTATE_ACTIVE)GSM48_MT_CC_RETR_ACKgsm48_cc_rx_retrieve_ack
SBIT(GSM_CSTATE_ACTIVE)GSM48_MT_CC_RETR_REJgsm48_cc_rx_retrieve_rej
ALL_STATES-SBIT(GSM_CSTATE_NULL)GSM48_MT_CC_FACILITYgsm48_cc_rx_facility
SBIT(GSM_CSTATE_ACTIVE)GSM48_MT_CC_USER_INFOgsm48_cc_rx_userinfo
/*clearing*/
ALL_STATES-SBIT(GSM_CSTATE_NULL)-SBIT(GSM_CSTATE_RELEASE_REQ)-SBIT(GSM_CSTATE_DISCONNECT_IND)/*5.4.4.1.1*/GSM48_MT_CC_DISCONNECTgsm48_cc_rx_disconnect
ALL_STATES/*5.4.3.3&5.4.5!!!*/GSM48_MT_CC_RELEASEgsm48_cc_rx_release
ALL_STATES/*5.4.4.1.3*/GSM48_MT_CC_RELEASE_COMPLgsm48_cc_rx_release_compl
/*modify*/
SBIT(GSM_CSTATE_ACTIVE)GSM48_MT_CC_MODIFYgsm48_cc_rx_modify
SBIT(GSM_CSTATE_MO_TERM_MODIFY)GSM48_MT_CC_MODIFY_COMPLgsm48_cc_rx_modify_complete
SBIT(GSM_CSTATE_MO_TERM_MODIFY)GSM48_MT_CC_MODIFY_REJECTgsm48_cc_rx_modify_reject

SS Supplementary Service(GSM 04.80)

在这里插入图片描述

SMS Short Message Service(GSM 04.11)

SMS Call Flow
在这里插入图片描述
在这里插入图片描述

PHY层代码

trx数据接收和发送过程

不同信道的接收发送由trx_lchan_desc全局变量的函数列表来维护,接收处理函数rx_data_fn,接收处理函数tx_data_fn。
在这里插入图片描述

GSM 05.03 Channel Coding

encode & decode
Y:\code\libosmocore\src\coding\gsm0503_coding.c
在这里插入图片描述

GSM 05.03 Interleaving

interleave & deinterleave
Y:\code\libosmocore\src\coding\gsm0503_interleaving.c
在这里插入图片描述

GSM 05.03 mapping

mapping & unmapping
Y:\code\libosmocore\src\coding\gsm0503_mapping.c
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sundaygeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值