0 前言
0.1 写作起因
- 笔者做毕业设计需要搭建OAI仿真环境,由于没有通用无线电外设,因此选择了OAISIM。主要参考OAI官网Wiki上的一篇教程:HowtorunoaisimwithvirtualMMEonsamemachine 。虽然笔者严格按照教程来做,但还是遇到了不少问题,因此将自己的搭建经验分享给像我这样的初学者。
- 本篇教程写的比较详细,对搭建其他OAI仿真版本也或有一些启发作用,希望能帮助大家尽快搭建好仿真环境,将精力尽早投入到学习更加深入的理论知识中去。
0.2 学习建议
- 如果是像我这样小白从零入门,开始还对LTE技术还不了解,可以下载我上传的资源——“LTE学习资料”,先看一下我整理的笔记或是《LTE教程:原理与实现 [孙宇彤]》第一章即可。
- 如果对linux相关知识不太了解,可以去看菜鸟教程-linux教程,非常适合入门。
- 如果对git相关的知识不了解,可以去看廖雪峰的官方网站-Git教程,站主自称“史上最浅显易懂的Git教程”。
- 笔者搭建过程中很多问题的解决是受官方讨论邮件列表中的启发,如果实在有些问题不能解决不妨去邮件列表中看看有没有前人遇到过。如何订阅邮件列表可以参考“如何加入OAI邮件列表”,实际上我订阅了也很少查看,只有在遇到问题后才去官网检索查阅邮件列表。
0.3 OAI理解
0.3.1 OAI概述
- OpenAirInterface平台是由Eurocom(欧洲通信组织)开发的开源实时仿真平台,其架构严格按照3GPP协议设计,使用标准C语言基于Linux实时内核优化完成,通过提供各种不同的仿真场景和完整的通信系统功能分层,最大限度地减少计算机模拟和实际硬件实验之间的差距。
- OAI项目是用标准C语言编写的,C语言源代码要经过编译、优化、汇编和链接才能生成可执行程序。由于源文件非常多,开发者就编写了一些shell脚本(AutoBuildScripts)可以自动完成整个生成可执行程序的过程。AutoBuildScripts包括build_epc、build_hss、build_oai等,使用者只需要选择不同的选项,就可以执行不同命令,如对于build_oai,-h选项是显示所有的可选选项,-i是安装依赖软件包,–oaisim是搭建OAISIM仿真版本。
0.3.2 openair-cn
- openair-cn工程是对LTE核心网EPC的仿真,主要由 HSS(Home Subscriber Server,归属用户服务器)、MME(Mobility Management Entity,移动管理实体)、SGW(Serving Gateway,服务网关)、PGW(PDN Gateway,PDN 网关)等网元构成。
- openair-cn工程项目在v0.3.2版本及其之前,HSS网元单独搭建,MME、SGW和PGW三个网元合在一起搭建;v0.3.2版本之后HSS网元单独搭建,MME网元单独搭建,SGW和PGW两个网元合在一起搭建。
0.3.3 openairinterface5g
- openairinterface5g工程是对LTE无线系统的仿真,包括基站侧和终端侧。实际操作时,可根据需求通过变换编译选项,将项目编译成eNodeB(基站侧)或者 UE(终端侧)。openairinterface5g主要由三部分组成:
openair1:包含PHY层和相关参数的定义,主要功能是实现基带信号处理,并为MAC层提供接口;
openair2:包括OSI参考模型中的第2层(MAC、RLC、PDCP)和无线资源控制层的实现,主要功能是实现媒介访问协议;与openair1通过PHY层的接口组成了LTE无线通信系统的基本特征;
openair3:包含使用IP协议的网络模块,主要功能是为应用程序提供了接口,使整个平台更加完整和实用,这意味着该平台可以用来研究新的技术,实现更多的应用。 - openairinterface5g工程项目的OAISIM仿真在v0.6.1版本及其之前属于“old oaisim”,在v0.6.1版本之后变成了“new oaisim”,两者的搭建方法不一样,我搭建的是“old oaisim”。
0.3.4 OAI版本
- 按照时间线,随着开发人员不断地修复一些问题或更新一些功能,存在着很多分支和标签的版本。
- 按照仿真需求,OAI工程项目提供了不同的编译选项,可以搭建不同的仿真版本(或者称为“应用场景”)。主要有以下几个:
(1)主流版本:是EPC+eNB+UE最完整的仿真,需要用到通用无线电外设(如USRP B210),可与商用设备对接,也就是将EPC、eNB和UE三者任意一个换成商用的设备都是可以的,比较常见的是“仿真EPC+仿真eNB+商用终端(我们用的手机)”的部署方案;
(2)OAI系统仿真:即为被广泛熟知的OAISIM,可以提供完整物理层和无线电信道仿真,执行完整的协议,可以模拟出使用硬件外设的效果,并能虚拟出若干eNB和UE。OAISIM既可以只仿真eNB+UE(OAISIM without S1),也能仿真EPC+eNB+UE(OAISIM with S1)的完整LTE网络。应该注意,OAISIM是openairinterface5g通过相应的编译选项生成的仿真版本,只包括eNB和UE,若要搭建OAISIM with S1,还需单独下载openair-cn工程去搭建EPC,EPC和eNB之间通过S1接口连接,这也是我选择的仿真方式。
(3)L2 nFAPI仿真:该模拟器允许使用nFAPI接口测试L2及以上的层。
(4)物理层仿真:可以测试空中接口上各种物理信道的性能。
1 预备工作
1.1 安装ubuntu14.04.1
- ubuntu14.04.1默认核心是3.19.0-25-generic,可满足某些依赖软件的要求,不需要切换核心。
- 官网教程上作者好像是在VM虚拟机上搭建的,我是安装了Win10+Ubuntu14.04.01双系统。
- 本教程的OAISIM仿真,EPC+OAISIM部署在一台电脑上,不需要用到SDR射频模块,因此一台Intel i5处理器的笔记本就可以搞定。
1.2 切换软件源
- 可以使用阿里源或中科大源,下载速度比较快。
- 不熟悉命令的,可以在“设置——>软件和更新”里面选择软件源,比较方便。
1.3 安装右键终端
sudo apt-get install nautilus-open-terminal
#安装后注销再登录即可
1.4 安装搜狗拼音输入法
sudo gedit /etc/apt/sources.list.d/ubuntukylin.list
--------------------------------------------------
#添加ubuntu kylin的apt源
deb http://archive.ubuntukylin.com:10006/ubuntukylin trusty main
--------------------------------------------------
sudo apt-get update
sudo apt-get install sogoupinyin
#安装后重启即可
1.5 安装git、unrar
sudo apt-get install git unrar
1.6 一些依赖软件下载思路
- 搭建OAI仿真平台时总是需要执行“AutoBuildScripts -i”去下载和安装一些依赖的软件,有些软件是下载速度非常慢,甚至等了半个小时后就失败了。
- 因此,遇到远程下载软件包失败时,我的解决方法是:
(1)在“AutoBuildScripts”中查看软件包下载网址并将下载软件包的语句注释掉,然后在Windows上想办法下载好;
(2)在Ubuntu上将软件包放到“AutoBuildScripts”中指明的文件路径中;
(3)最后再执行“AutoBuildScripts -i”即可。
1.7 配置FQDN【必须】
FQDN(Fully Qualified Domain Name,全限定域名):
- 同时带有主机名和域名的 URL,通过符号“.”连接。通过FQDN可以看出主机在域名树中的位置,从逻辑上准确的指出主机在什么地方。
- FQDN 总是以主机名开始且以顶级域名结束,例如,www.symantec.com 是完全限定域名,其中 www 是主机,symantec 是二级域,.com 是顶级域。
- DNS(域名系统)可以将FQDN解析为IP地址。
配置过程:
#cty是我的姓名简拼,可以修改成任意其他字符串,但是后面再出现“cty”时一定要对应修改。
#1 修改主机名
sudo gedit /etc/hostname
--------------------------------------------------
cty
--------------------------------------------------
#2 修改FQDN
sudo gedit /etc/hosts
--------------------------------------------------
127.0.0.1 localhost
127.0.1.1 cty.openair4G.eur cty
--------------------------------------------------
#修改好FQDN后最好重启一下
hostname #查看主机名
hostname -f #查看FQDN
2 安装开发软件
说明:运行“OAI的自动编译脚本的安装依赖软件选项”时也可以安装以下软件,不过我建议自己先手动安装好。
2.1 mysql-server
关系梳理
- mysql-server:数据库服务器
- mysql-devel:开发用到的库以及包含文件
- mysql:客户端
安装过程:
sudo apt-get install mysql-server
#注意要设置密码(建议设为"linux"),不要设置空密码!
2.2 apache2
Apache(Apache HTTP Server的简称):
- Apache软件基金会的一个开放源码的网页服务器。
- 它可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
- 它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
安装过程:
sudo apt-get install apache2
#测试apache2:
浏览器访问 localhost(或127.0.0.1) 会出现apache2主页 (注:不可开VPN,否则不会出现)
2.3 php
PHP(PHP: Hypertext Preprocessor,超文本预处理器):
- 一种主要适用于Web开发领域的通用开源脚本语言。
- PHP混合了C、Java、Perl以及PHP自创的语法,利于学习,使用广泛。
- PHP可以更加快速地执行动态网页。它是将程序嵌入到HTML(超文本标记语言)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
安装过程:
sudo apt-get install python-software-properties
sudo apt-get update
sudo apt-get install php5
php5 -v #查看 php版本
sudo service apache2 restart
#测试php:
sudo gedit /var/www/html/info.php
--------------------------------------------------
<?php
echo "<P>Hello World!</P> "?>
--------------------------------------------------
保存退出,然后浏览器访问 localhost/info.php,浏览器会显示hello world页面(不可挂VPN!)
2.4 mysql
安装过程:
sudo apt-get install mysql-server m