简介
OsmocomBB是一个免费软件/开源GSM基带软件实施。它打算完全取代对专有GSM基带软件的需求。
Nuttx-bb是OsmocomBB Layer1到Nuttx RTOS的更具实验性,正在进行中的端口。
简而言之:通过在兼容手机上使用OsmocomBB,您将能够仅基于自由软件拨打和接听电话,发送和接收短信等。
github项目地址:https://github.com/osmocom
osmocom-bb GSM信号控制流程
此描述仅提及GSM信号进入软件的接收路径。所述发射部分被省略了,因为是bootloader / bootstrappig部分,尤其是各种控制路径从层1到RF硬件。
首先,在天线处接收RF信号,然后将其通过Rita混频器,该混频器会将
下变频直接转换为模拟I / Q基带。依次将其发送到Iota ABB 的基带ADC中。
结果信号将传递到HardwareCalypso DBB 的BSP(基带串行端口)。
在HardwareCalypso DBB 内部,数字基带样本从BSP传递到DSP内核,
然后在使用共享内存接口传递到ARM内核之前,对其进行处理,解调,解交织,解码等操作。在ARM内核上,OsmocomBB层1处理MAC块并将其通过L1CTL发送到UART。
在PC本身上,osmocon程序在串行端口上接收L1CTL消息,该程序对多路复用的Sercomm流进行解复用,并通过Unix域套接字将L1CTL传递到您可能正在运行的任何layer23程序中(例如mobile)。
安装
libosmocore
libosmocore是一个具有各种实用程序功能的库,最初是作为OpenBSC项目的一部分开发的,但具有更通用的性质,因此(至少)对我们在自由软件/开源移动领域开发的其他程序很有用通讯。
我们只需在此库中的各个Osmocom项目之间移动所有共享代码,即可避免代码重复。
libosmcore.git存储库构建了多个库:
- libosmocore包含一些通用功能,例如选择循环抽象,消息缓冲区,计时器,链接列表
- libosmovty包含与名为VTY的交互式命令行界面相关的例程
- libosmogsm包含与GSM协议有关的定义和帮助程序代码
- libosmoctrl包含Osmocom控制界面的共享实现
- libosmogb包含带有其NS / BSSGP协议的Gb接口的实现
- libosmocodec包含GSM语音编解码器的实现
- libosmocoding包含GSM 05.03突发转码功能的实现
- libosmosim包含用于连接SIM / UICC / USIM卡的基础架构
要编译libosmocore,将需要以下工具:
sudo apt-get install build-essential libtool libtalloc-dev libsctp-dev shtool autoconf automake git-core pkg-config make gcc gnutls-dev python-minimal
和以下(可选)库:
sudo apt-get install libpcsclite-dev
获取源码和安装
git clone git://git.osmocom.org/libosmocore.git
cd libosmocore/
autoreconf -i
./configure
make
sudo make install
sudo ldconfig -i
cd ..
osmocom-bb
OsmocomBB是一个免费软件/开源GSM基带软件实施。它打算完全取代对专有GSM基带软件的需求,例如:
- GSM 模拟和数字基带驱动程序
- (集成和外部)外围设备的驱动程序
- 从第1层到第3层的GSM电话端协议栈
简而言之:通过在兼容电话上使用OsmocomBB,您将只能基于自由软件来拨打和接听电话,发送和接收SMS等。
安装
git clone git://git.osmocom.org/osmocom-bb.git
cd osmocom-bb
cd src
make -e CROSS_TOOL_PREFIX=arm-none-eabi-
烧录和环境
主机软件使用
主机软件是在主机PC上运行的软件,而不是在手机内部运行的软件。
位置(源和二进制):sr /host/layer23/*
第3层应用程序基于GSM第3层结合第2层(LAPDm)来实现各种功能。
mobile
mobile是迄今为止最复杂的OsmocomBB应用程序。
它实现了常规GSM电话的大多数行为,但是以许多方式扩展了研究人员感兴趣的功能。
- 根据TS 03.22执行小区(重新)选择
- MM过程,例如位置更新,身份验证,加密
- 建立MT和MO语音通话
- 发送和接收短信
- 执行USSD或呼叫转移之类的补充服务
- 将其挂接到PBX
前提条件
假定已经获得OsmocomBB源代码并已编译主机程序和固件
(使用交叉编译器)。
将调试消息打印到stdout
使用GSMTAP发送调试消息
cd ./src/host/layer23/src/mobile/mobile -i 127.0.0.1
内存映射
The memory is mapped as follows:
0x000000-0x00ffff: Flash page 0
0x010000-0x01ffff: Flash page 1
... more Flash pages ...
0x800000-0x83ffff: Ram
Our flash layout is:
0x000000-0x001fff: Compal loader
0x002000-0x00ffff: OSMOCOM menu
0x010000-........: OSMOCOM application and storage
Note: The Compal loader and the OSMOCOM menu will be located in the same flash page!
注意:应该启动L1上传命令后,按手机上的开始按钮:
sudo ./src/host/osmocon/osmocon -p /dev/ttyUSB0 -m c123xor -c ./src/target/firmware/board/compal_e88/layer1.highram.bin ./src/target/firmware/board/compal_e88/layer1.compalram.bin
要捕获发送和接收的数据包:
启动wireshark:
$ sudo wireshark -k -i lo -f'port 4729'
telnet localhost 4247
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Welcome to the OsmocomBB Control interface
OsmocomBB>
cell_log
cell_log应用程序扫描有效的可用载波频率,尝试与之同步并转储从BCCH收集的信息。它通常用于创建已使用的ARFCN和信息的列表,例如它们的接收级别,MNC,MCC和系统信息。
$ sudo ./src/host/layer23/src/misc/cell_log -O
执行结果如下所示:
ccch_scan
ccch_scan应用程序可以同步到运营商ARFCN,并记录功率测量和CCCH信息(寻呼请求和立即分配)。
该ccch_scan程序)是我们用于显示GSM协议层2和3(GSM TS 04.05,04.06,04.08)的工具
使用ccch_scan程序,可以:
- 连接到/ tmp / osmocom_l2插座通过创建osmocon从交换数据L1A_L23_Interface。
- 接收GSM Layer1帧。
- 转储收到的GSM Layer1帧并打印一些分析。
- 将Layer1帧作为GSMTAP数据包发送到Wireshark
- 将Layer1帧转发到ccch_scan内部的Layer2 / LAPDm实现
- 将它们从Layer2转发到ccch_scan中的Layer3代码中。
- 接收来自Layer3的传出帧
- 通过layer2处理它们
- 将它们作为上行链路帧发送到GSMTAP
- 将它们发送到电话上的Layer1
- 该ccch_scan方案是与组合使用layer1bin固件。
用法
$ sudo ./ccch_scan -i 127.0.0.1 -a ARFCN
打印结果如下所示:
在另外一个终端打开wireshark
$ sudo apt-get install wireshark
$ sudo wireshark -k -i lo -f 'port 4729'
bcch_scan
bcch_scan基本上是cell_log的前身,并且记录在BCCH(系统信息)上观察到的信息。
cbch_sniff
cbch_sniff转储小区广播信道信息,例如小区的GPS位置。
virtphy
virtphy是基于UDP组播的GSMTAP的虚拟L1实现。您可以使用它来运行第2/3层程序,例如移动程序,而无需任何实际硬件或真实的PHY / L1。