今天给大家介绍的内容是:如何使用 Osmocom 软件以及 UmTRX 来创建一个 GMS 移动手机网络。其实这并不是一种全新的技术,而且好多年前就已经有人实现过了。但我认为使用开源软件来创建一个 GSM 网络实在是太酷了。
除此之外,现在也有很多开源硬件支持这种软件无线电解决方案了。在这篇文章中,我们将选用 UmTRX(一种专为 GSM 移动网络设计的双信道收发器)和 Parallella(并行计算平台)。
在开始之前,我需要跟大家声明的是,即使你搭建的是一个小范围的测试网络,但在绝大多数国家你仍然需要向有关部门申请许可证。
搭建GSM基站
硬件配置
硬件的配置相对来说还是比较简单的:两块主板用连接到千兆级以太网络;UmTRX接三根天线,前两根分别接GSM TX和RX,第三根接GPS,GPS天线一般都是板载GPS规范所要求的,用来保证GSM的频率精确度和稳定性。
如果你没有GSM牌照的话,最简单的解决方案就是将UmTRX TX和RX端口连接到一个双工器,然后将其通过衰减器连接到手机上。
软件架构
对于那些刚刚接触GSM网络的人来说,估计看到这些首字母缩写的专业名词就头晕,而且软件栈的整体架构看起来也可能会太过复杂了。但是,Osmocom GSM技术最好的一点就是它是基于常见代码库和模块实现的,并且具有高度可配置的特性。libosmocore代码库负责提供该技术的核心功能,例如计时器、日志记录以及GMS协议处理等等。GMS网络中基站接收器(BTS)和基站处理器(BSC)元素之间的通信是通过A-bis接口进行的,而这种协议又是通过libosmo-abis代码库实现的。
一般来说,一个BSC所能执行的功能非常有限,并且还需要依赖于其他组件,例如归属位置寄存器(HLR)和认证中心(AuC)等等。但是经过配置,OpenBSC软件是可以在NITB模式下运行,这样就可以一次性整合大量的功能了。
我们可以使用OsmoBTS配合OsmoTRX来创建一个软件定义的无线电BTS,它可以通过A-bis与OpenBSC NITB进行通信,而这些组件一起就能够组成一个单独的网络了。
这个代码库【Fairwaves versionof UHD】提供了接收器软件的驱动程序,并且实现了air接口、OsmoTRX、UmTRX和无线电硬件。我们回顾一下整个过程:UmTRX (无线电硬件) → UHD (驱动器) → OsmoTRX (SDR BTS 接收器) → OsmoBTS (BTS 层1-3) → OpenBSC (BSC/MSC/HLR 等等,“network-in-the-box”)。
实际上,我们还需要另外一个组件,即Linux Call Router(LCR),它整合了OpenBSC NITB,并且可以简化我们的测试过程。
注:在真实场景中,你需要让OsmoTRX、OsmoBTS和OpenBSC分别运行在不同的主机上,但现在它们全部都运行在Parallella之上。
软件安装
我们使用的是官方Parallella Linux发行版-Linaro Ubuntu Nano 14.01,主要的操作指令可以参考UmTRX官方网站以及Osmocom的维基百科。
关于UmTRX和Osmocom的构建信息我在这里就不赘述了,具体可以参考相关的网站,我这里只给大家提供一些额外的帮助信息。
缺失的构建工具和依赖组件可以使用下列命令一次性完成安装:
$ sudo apt-get install build-cmake libtoolautotools-dev autoconf pkg-config python-cheetah libboost-all-devlibopencore-amrnb-dev libsofia-sip-ua-dev libortp-dev sqlite3 libdbi-devlibdbd-sqlite3 libncurses5-dev libusb-1.0-0-dev
关于构建UHD-Fairwaves以及Osmocom软件的相关信息,可以参考umtrx.org给出的内容。
我们可以使用“./configure –with-neon”来对OsmoTRX进行配置(针对ParallellaARM主机)。
构建时间大致如下(不包括“./configure”和“make install”):
Fairwaves-UHD: 1 小时40 分钟
libosmocore: 5分钟
libosmo-abis: 分钟
OpenBSC: 4分钟
OsmoBTS: 1.5分钟
OsmoTRX: 9分钟
LCR: 3分钟
网络配置
上面提供的配置样本适用于OsmoBTS、OpenBSC和LCR,其中open-bsc.cfg中最重要的参数是ARFCN(TX/RX频率)、电力等级以及“auth policy”设置。
启动网络
OsmoTRX需要使用特定的内核参数,但是我们可以使用sysctl在软件的运行过程中进行参数修改。除此之外,OsmoTRX还需要以root权限运行,这样才可以设置线程的优先级。我们建议分别在不同的shell中运行OpenBSC NITB、OsmoBTS、OsmoTRX和LCR,这样可以简化我们解析调试输出的难度。
启动了上述所有软件组件之后,我们需要使用频谱分析仪来检测基站载波是否稳定。幸运的是,结果一切正常:下行链路ARFCN 540 = 1810.8MHz。
测试
首先,我使用了手机SIM卡来与没有经过配置的网络进行连接,按理来说连接请求应该会被拒绝。但连接尝试会在HLR数据库中创建一个条目,然后我们就可以通过OpenBSC VTY(命令行)来完成新用户的认证授权了。接下来,我们要尝试注册网络(位置更新请求),结果已成功。
关于这个过程的详细内容,大家可以参考umtrx.org给出的资料。
获取到了网络服务之后,我们就可以尝试拨打号码995(LCR播放铃声),结果如下图所示:
在上图的终端窗口中,顺时针方向分别为OpenBSC、OsmoBTS、OsmoTRX、LCR和OpenBSC VTY。
下图显示的是LCR窗口中的详细数据,当有来电时,通话会被路由到音乐文件:
大家可以从下图中看到,SDR接收器和OsmoTRX做的完全是计算密集型任务:
总结
如果只是用ARM内核的话,我还不清楚Parallella能够同时支持多少通话,而且UmTRX还提供有第二条无线信道来增加网络容量。其实我还有一个奇思妙想,那就是我们的远程无线电基站是不是可以依赖于太阳能等清洁能源呢?大家可以自行脑补一下…
本文所介绍的内容可以帮助大家搭建一个简易的GSM基站,但是请大家不要将其用于恶意目的。