OAI rfsimulator搭建教程

OAI 搭建教程

本文说明了在ubuntu18.04虚拟机中,使用rfsimulator代替usrp进行仿真,搭建OAI的具体过程

一、安装Ubuntu

1、 使用VMware安装虚拟机,选择ubuntu18.04

2、 安装完系统之后先调整屏幕大小(安装vmware tools)

  • 在VMware软件中,右键单击虚拟机(Ubuntu 64位),安装VMware Tools。
  • 在ubuntu桌面上打开VMware Tools,将里面的压缩包文件解压
  • 进入解压后的文件夹,打开vmware-install.pl进行安装(在终端输入命令./vmware-install.pl执行),一直Enter下去(选择默认,或者yes),直到显示成功即可。
  • 可以参考https://www.cnblogs.com/aidenzdly/p/10321034.html中的第1-5步

3、 安装完成后,在Linux系统中打开终端,输入命令

apt-get update
apt-get upgrade

4、 安装git并配置git

sudo apt install git
git config --global user.name "Laurent"
git config --global user.email "[email protected]"

5、将OAI存储库添加为授权的远程系统

echo -n | openssl s_client -showcerts -connect gitlab.eurecom.fr:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt

在不换源的情况下,使用apt下载包或者依赖时可能会失败,因为原来的软件源的服务器在国外,换成国内的之后使用apt-get install会畅通无阻:

  • 换源操作可以参考https://www.cnblogs.com/aidenzdly/p/10321034.html中的第6-11步(注意在第10步点击关闭之前,应该先将源代码那一栏也勾上)
  • 除了上述这种图形化界面操作的方法,网上大多数方法是使用命令行,修改系统文件,也是可行的。参考:https://blog.csdn.net/XC_LMH/article/details/86506770

二、安装USRP驱动程序

sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils python-requests python3-pip cmake build-essential
pip3 install mako numpy
git clone git://github.com/EttusResearch/uhd.git
(若出错可往下翻)
cd uhd; mkdir host/build; cd host/build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make -j4
(若出错可往下翻)
sudo make install
sudo ldconfig
sudo /usr/lib/uhd/utils/uhd_images_downloader.py
(若出错可往下翻)

上述安装过程中遇到的问题:

  1. git clone下载失败,由于是要在github上下载项目,有时候会遇到下载速度太慢或者下载失败的情况。
  • 无法的情况下,选择多试几次,或者在多个不同的时间段试几次
  • 如果可以,可以在github网站上将所需下载的东西下载并解压到所需文件夹中
  • 在可以的前提下,也可以选择对git clone设置http代理(推荐):
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

其中1080是端口号,根据自己配置的端口号设置(我是1088)

取消http代理:

git config --global --unset http.proxy
git config --global --unset https.proxy
  1. 执行make -j4时报错
  • 错误信息:g++ internal compiler error:Killed(program cc1plus),同时系统会很卡

  • 原因:内存分配不够,在虚拟机里我给ubuntu分配的2g内存,还是太卡了,改成分配3g内存(有条件的可以分配的更多一些)之后就可以正常make

  1. 执行sudo /usr/lib/uhd/utils/uhd_images_downloader.py出错
  • 在这个python文件中,程序写的是去一个网站下载一些压缩包并解压
  • 但是安装过程比较艰难,不知道是因为网络的问题还是什么原因,下了很多次,最后还是有一些压缩包下载失败

OAI rfsimulator搭建教程_第1张图片

  • 根据[ERROR]找出没有成功下载的zip文件,登录错误提示后面的网站,手动下载压缩包(需要)并将其解压文件全部都复制到 /usr/share/uhd/images 文件夹中

三、下载修改的补丁

cd ~
wget https://open-cells.com/opencells-mods-20190923.tgz
tar xf opencells-mods-20190923.tgz

四、下载并对EPC打补丁

git clone https://gitlab.eurecom.fr/oai/openair-cn.git

执行这一步的时候,由于需要在gitlab上下载项目,且需要登录账户;

但gitlab目前只允许中科大学生注册,只能用之前注册过的账号

cd openair-cn
git checkout develop
  • 在完成git checkout develop之后,查看递交版本号:

终端输入git log之后可以看到:

OAI rfsimulator搭建教程_第2张图片

第一个版本号的(应该是哈希值)和期望值是一样的,说明epc安装无误。

按q退出日志

git apply ~/opencells-mods/EPC.patch

本行语句只运行一遍即可,没有成功的显示,如果运行两次或以上,则会显示打补丁失败

五、为EPC安装第三方软件

cd openair-cn; source oaienv; cd scripts

./build_hss -i

Answer yes to install: freeDiameter 1.2.0;

在运行完成之后显示未编译完成(暂时先不用管):

OAI rfsimulator搭建教程_第3张图片

sudo mysql -u root << END
USE mysql;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
END

sudo systemctl restart mysql.service

sudo mysql_secure_installation

从官网教程中摘录的安装时的注意事项:

The last command will ask a few questions(最后一个命令):

  • VALIDATE PASSWORD PLUGIN: no
  • password: set your password (linux is set in our default config files)
  • Remove anonymous users: yes
  • Disallow root login remotely: yes
  • Remove test database and access to it: yes
  • Reload privilege tables now: yes
./build_mme -i
  • Do you want to install freeDiameter 1.2.0: no
  • Do you want to install asn1c rev 1516 patched? : yes
  • Do you want to install libgtpnl ? : yes
  • wireshark permissions: as you prefer

同样,在运行完成之后显示未编译完成(暂时先不用管)

./build_spgw -i

Do you want to install libgtpnl ? : no

同样,在运行完成之后显示未编译完成(暂时先不用管)

六、编译EPC节点

cd openair-cn; source oaienv; cd scripts
./build_hss
./build_mme
./build_spgw

之前编译未完成的在此处全部编译完成

七、下载并编译eNB

git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
cd openairinterface5g
git checkout develop

We tested with commit edb74831dabf79686eb5a92fbf8fc06e6b267d35:

此时执行

git log

会发现此时所处的递交版本和官方测试过的版本不一样,所以此处需要执行:

git checkout edb74831dabf79686eb5a92fbf8fc06e6b267d35

再进行 git log 就可以看到该哈希值完全一样

source oaienv  
./cmake_targets/build_oai -I

执行该命令时,可能遇到 build have failed 的错误,一般来说是因为访问外网比较困难,会出现下载失败。

若是在Installing ASN1时出现 build 错误,可以多尝试几次,或者换个时间段(网上有说法是 找到 /cmake target/tools/build helper 文件,将里面涉及gist.github 的这一行代码注释掉):

如图选中的两行,用#注释

OAI rfsimulator搭建教程_第4张图片

我用的就是这种方法,注释之后可以继续编译,暂时也没问题。

若是在 Installing google Protobuf from sources时出现build错误:

  • 在openairinterface5g/cmake_targets/tools路径中,打开build_helper文件
  sudo gedit build_helper
  • 在打开的程序中搜索google,找到wget 这一行(注意程序中有两段,第一段写的是 2.6.1 版本的,那几行已经被注释掉了,在下面还有几行没被注释的是 3.3.0 版本的)
  • 如下图将选中的两行用#注释掉并保存

解决2

  • 若可以直接,则在浏览器访问wget后面的网址,下载 protobuf-3.3.0.tar.gz 这个文件,把下载好的 protobuf-3.3.0.tar.gz 拷到安装ENB的主机的/tmp文件夹中
  • 重新执行命令即可完成
./cmake_targets/build_oai -w USRP --eNB --UE
(此条命令编译的是4G的基站和终端)
./cmake_targets/build_oai -w USRP --gNB --nrUE
(此条命令编译的是5G的基站和终端)
  • 若出现以下报错:

OAI rfsimulator搭建教程_第5张图片

重新执行:

sudo git checkout develop

若出现:

报错6

是因为之前修改了build_helper文件,执行:

sudo git reset --hard

用远程代码库的文件完全覆盖本地的版本

sudo git checkout develop
./cmake_targets/build_oai -w USRP --gNB --nrUE

此时重新执行就可以编译gNB

八、eNB配置文件

打开enb配置文件:

sudo gedit ~/opencells-mods/enb.10MHz.b200

查看配置文件是否为:

////////// MME parameters:
 mme_ip_address = ( { ipv4 = "127.0.0.20";
 ipv6 = "192:168:30::17";
 active = "yes";
 preference = "ipv4";
 }
 );

NETWORK_INTERFACES : 
 {
 ENB_INTERFACE_NAME_FOR_S1_MME = "lo";
 ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.10/8";

 ENB_INTERFACE_NAME_FOR_S1U = "lo";
 ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.10/8";
 ENB_PORT_FOR_S1U = 2152; # Spec 2152
 };

另外,还需要设置:

tracking_area_code = “1”;
mobile_country_code = “208”;
mobile_network_code = “92”;

九、EPC配置文件

sudo mkdir -p /usr/local/etc/oai

sudo cp -rp ~/opencells-mods/config_epc/ /usr/local/etc/oai
cd openair-cn; source oaienv; cd scripts

./check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter hss.OpenAir5G.Alliance

./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter mme.OpenAir5G.Alliance

查看网卡名字和IP地址

ifconfig

OAI rfsimulator搭建教程_第6张图片

图中网卡名是“ens33”

sudo gedit /usr/local/etc/oai/spgw.conf

打开spgw配置文件,查看修改参数,改成如下所示(ens33改成自己网卡名):

 PGW_INTERFACE_NAME_FOR_SGI = "ens33"; 
 PGW_MASQUERADE_SGI = "yes";
sudo gedit /usr/local/etc/oai/mme.conf

打开mme配置文件,查看修改参数,改成如下所示:

GUMMEI_LIST = ( MCC="208" ; MNC="92"; MME_GID="4" ; MME_CODE="1"; } );
TAI_LIST = ({MCC="208" ; MNC="92"; TAC = "1"; } );
sudo gedit /usr/local/etc/oai/hss.conf

打开hss配置文件,查看修改参数

OAI rfsimulator搭建教程_第7张图片

根据之前设置的mysql的密码,将标黄该行右边的密码换成自己的密码(我的是123456)

~/opencells-mods/hss_import 127.0.0.1 root 123456 oai_db ~/opencells-mods/opencells_db.sql

执行这一步的时候注意把root后面的123456换成自己的密码

十、测试和验证

1. 4g LTE

开四个终端,分别执行:

  1. 运行hss
cd openair-cn; source oaienv; cd scripts; ./run_hss
  1. 运行mme
cd openair-cn; source oaienv; cd scripts; ./run_mme
  1. 运行spgw
cd openair-cn; source oaienv; cd scripts; sudo -E ./run_spgw
  1. 运行eNB
sudo bash
cd ~/openairinterface5g; source oaienv
cd cmake_targets/lte_build_oai/build
sudo RFSIMULATOR=enb ./lte-softmodem -O ~/opencells-mods/enb.10MHz.b200 --rfsim

由于我没有usrp,使用的是rfsimulator代替usrp,最后一步执行时和官网教程有所不同

  1. 运行UE
    UE无法直接再同一台机器上直接运行,一种解决方案是在虚拟机中运行UE;另一种更简单的方法是仅为UE创建一个网络名称空间,但在此之前,还需要生成一个虚拟SIM卡:
../../nas_sim_tools/build/conf2uedata -c ~/opencells-mods/sim.conf -o .
  • 创建一个网络名称空间

如果曾经创建过,先删除之前的网络名称空间,再重新创建:

ip netns delete ueNameSpace
ip link delete v-eth1
ip netns add ueNameSpace
ip link add v-eth1 type veth peer name v-ue1

创建一个虚拟网卡对:v-eth1和v-ue1

ip link list

此时可以看到这一虚拟网卡对,如图

OAI rfsimulator搭建教程_第8张图片

ip link set v-ue1 netns ueNameSpace

把v-ue1转移到ueNameSpace空间中去,再执行:

ip link list

发现没用v-ue1这个网卡了,执行

ip link set veth1 netns ueNameSpace

v-ue1已经再ueNameSpace空间中,如图

OAI rfsimulator搭建教程_第9张图片

ip addr add 10.200.1.1/24 dev v-eth1 

给v-eth1分配IP地址

ip link set v-eth1 up

启动v-eth1网卡

iptables -t nat -A POSTROUTING -s 10.200.1.0/255.255.255.0 -o ens33 -j MASQUERADE  

启动IP伪装,添加了一条规则到NAT表的POSTROUTING链中,对于源IP地址为10.200.1.0网段的数据包,用ens33网口的IP地址替换并发送

iptables -A FORWARD -i ens33 -o v-eth1 -j ACCEPT  
iptables -A FORWARD -o ens33 -i v-eth1 -j ACCEPT

iptables -A FORWARD这两条语句使能物理网口ens33和v-eth1之间的数据转发

ip netns exec ueNameSpace ip link set dev lo up   
ip netns exec ueNameSpace ip addr add 10.200.1.2/24 dev v-ue1  
ip netns exec ueNameSpace ip link set v-ue1 up 

给v-ue1设置IP地址,并启动v-ue1

将窗口(终端)设置到新的网络名称空间中

ip netns exec ueNameSpace bash

在该终端中运行UE,注意在运行UE之前必须先运行上一个命令

./lte-uesoftmodem -C 2685000000 -r 50 --rfsim --rfsimulator.serveraddr 10.200.1.1

可以看到该UE可以连接到 eNB 以及 EPC ,在MME中可以看到连接以及附着的UE由0增加到1

OAI rfsimulator搭建教程_第10张图片

  • 若是在运行UE时出现这样的报错:

[RRC] Synched with a cell, but PLMN doesn’t match our SIM, the message PHY_FIND_NEXT_CELL_REQ is sent but lost in current UE implementation!

说明生成的virtual SIM匹配失败,此时,先检查virtual SIM卡生成的MCC和MNC是否和eNB config 文件中所配置的相同,MCC=288,MNC=92:

OAI rfsimulator搭建教程_第11张图片

在询问项目作者之后,发现在生成virtual SIM时所处的文件夹错误,在运行UE时没有用之前生成的SIM卡,应该在lte-uesoftmodem所在文件目录下执行生成SIM的命令,重新生成之后就可以成功运行。

2. 5g NR

若使用rfsimulator代替USRP,由于该项目使用的是develop分支,在5g方面只开发了nrUE和gNB的功能,还不能连接核心网

  1. 运行gNB
sudo bash

cd ~/openairinterface5g

source oaienv

cd cmake_targets/ran_build/build

sudo RFSIMULATOR=server ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --parallel-config PARALLEL_SINGLE_THREAD --rfsim --phy-test
  1. 运行nrUE
sudo bash

cd ~/openairinterface5g

source oaienv

cd cmake_targets/ran_build/build

sudo RFSIMULATOR=127.0.0.1 ./nr-uesoftmodem --rfsim --phy-test -d

下图为5G版运行结果:

OAI rfsimulator搭建教程_第12张图片

你可能感兴趣的:(OAI rfsimulator搭建教程)