写在前面:eNB的安装过程费劲一些。中文社区的指南都是只介绍了流程,并没有提及怎么解决问题,自己google又得花一些时间,这也是我写这一系列文章的目的。老样子,这篇教程写的比较详细,还是适用于将会各种碰壁的初学者。我的搭建是EPC和eNB分开的,用的是USRP B210,这也是官方强烈推荐的初始配置。另外,请注意带有All in one的指南都是eNB和EPC装在一起的。
0、须知
我的实际搭建模型是通过交换机相连的,如下文:
https://blog.csdn.net/qq_42030961/article/details/82751991
如何加入邮件列表:
https://blog.csdn.net/qq_42030961/article/details/82983264
接下来是eNB安装正文。
1、硬件准备
eNB对电脑配置的要求比EPC高一些,简单来说就是3代以上的i5/i7。以下是官网晒的通过测试的配置:
https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/OpenAirSystemRequirements
系统方面,请务必使用Ubuntu 14.04.3 ,原因在于可以一键更换内核,当然14.04 LTS也可以通过synapic或者更改grub来更换,接下来也会提。毕竟没有一键方便。
2、更换内核
执行如下两条,更换3.19.0-61低延迟内核
sudo apt-get update
sudo apt-get install linux-image-3.19.0-61-lowlatency linux-headers-3.19.0-61-lowlatency
更换完成后输入
sudo reboot
电脑就会立刻重启了。重启后输入 uname -a可以查看内核信息。如下
Linux wty 3.19.0-61-lowlatency #69~14.04.1-Ubuntu SMP PREEMPT Thu Jun 9 10:15:00 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
wty是hostname,更换成功后 lowlatency 应该很显眼了。但是,如果失败了,可以用更改grub的方式更换,请参考我的另一篇讲如何更换内核的文章。
https://blog.csdn.net/qq_42030961/article/details/82740315
3、电源管理
(1)
sudo gedit /etc/default/grub
在GRUB_CMDLINE_LINUX_DEFAULT="quiet splash”这行的下面添加两行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=disable"
GRUB_CMDLINE_LINUX_DEFAULT="processor.max_cstate=1 intel_idle.max_cstate=0 idle=poll”
预告:如果没有关掉c-state,这两行会需要修改,先往下走。
(2)
sudo gedit /etc/modprobe.d/blacklist.conf
在文件最后添加
blacklist intel_powerclam
(3)
依次执行
sudo apt-get install cpufrequtils
sudo gedit /etc/default/cpufrequtils
这个cpufrequtils 大概率为空文件,在里面加上一句:
GOVERNOR=“performance”
(4)
sudo update-rc.d ondemand disable
(5)
sudo apt-get install i7z
安装i7z,后面可以查看CPU频率。
(6)
重启,进入bios关闭与节能或者影响CPU次能性能的设置,一般在Advanced设置里面。关闭超线程(Hyper-threading),C-state(有的电脑在bios里面找不到c-state,比如我的就没有,没有需要强行在grub里关),方法见(8):
(7) 用i7z查看是否完成操作
sudo i7z
看到所有频率都在C0就大工告成了,如果没有,请转8。
(8)仅没有成功关闭c-state的同学需要执行
sudo gedit /etc/default/grub
注释掉原来的三行(有两行是在(1)中添加的)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash”
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=disable"
GRUB_CMDLINE_LINUX_DEFAULT="processor.max_cstate=1 intel_idle.max_cstate=0 idle=poll”
把它们都写到一行去,用空格隔开:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash quiet intel_pstate=disable processor.max_cstate=1 intel_idle.max_cstate=0 idle=poll"
然后更新并重启即可。
sudo update-grub
sudo reboot
这个方法来源参考地址:
https://askubuntu.com/questions/749349/how-to-set-intel-idle-max-cstate-1
另附:OAI官网关闭 Power management 的教程
https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/OpenAirKernelMainSetup
4、克隆源码
sudo apt-get install git
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
如果外网访问速度太差,可能会遇到 :fatal:过早的文件结束符(EOF)
遇到这种情况可以尝试我的另一篇搭建EPC时无法克隆的操作:
https://blog.csdn.net/qq_42030961/article/details/82695682
5、配置eNB
sudo gedit ~/openairinterface5g/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
需要更改和确认的部分如下:前三行在MME中可以查到,之后就是把IP对应换成自己的EPC和eNB所在IP。
tracking_area_code = "1";
mobile_country_code = "208";
mobile_network_code = "92";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.12.62";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
6、编译eNB
cd openairinterface5g
source oaienv
cd cmake_targets
sudo ./build_oai -I -w USRP
(1)如果出现如下错误:
fatal: unable to access https://gist.github.com/2190472.git : Failed to connect to gist.github.comport 443: Connection timed out
执行:
sudo gedit openairinterface5g/cmake_targets/tools/build_helper
打开后 Ctrl+F 搜索找到这2行
$SUDO rm -fr /opt/ssh
$SUDO git clone https://gist.github.com/2190472.git /opt/ssh
改成如下(来自大佬的镜像克隆)
$SUDO rm -fr /opt/ssh
$SUDO git clone https://github.com/JackPaul/ssh.git /opt/ssh
(2)不要使用下面这条命令编译(这是给all in one准备的):
./build_oai -I --eNB -x --install-system-files -w USRP
(3)如果出现freeDiameter没注册什么的,可以注册一个,减少黄色报错,我是注册了,但是不知道到是不是必须的(确认了,不是必须的):
# 1、安装依赖的软件包
sudo apt-get -y install mercurial cmake make gcc bison flex libsctp-dev libgnutls-dev libgcrypt-dev libpq-dev libmysqlclient-dev ssl-cert debhelper fakeroot
# 2、下载最新版freeDiameter(注:这里安装在了主目录之下)
cd
hg clone http://www.freediameter.net/hg/freeDiameter
cd freeDiameter
# 3、新建一个编译文件夹
cd ..
mkdir fDbuild
cd fDbuild
# 4、配置产生cmakefiles
cmake ../freeDiameter
make edit_cache
# 5、编译安装
make
sudu make install
7、运行eNB
cd ~/openairinterface5g
source oaienv
cd cmake_targets
./build_oai --eNB -c -w USRP (这条运行一次就行了 确认安装)
cd lte_build_oai/build
sudo -E ./lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -d
就能看到scope的观察窗口了。我这里没有接UE。因此只有接收信号。
(2019-06-11更新, 最后一条不要加-d 似乎-d已经挂掉了 )
注:命令中的$OPENAIR_DIR并不需要更换成对应路径,当然换了也没问题。
上图是刚刚编译完成时,接入COTS UE后,会加入一些数据:
如何接入UE(SIM卡)有很多大坑,以后有时间再补。
(2018-11-14更新, 终于把SIM卡如何搭建补上了 )
https://blog.csdn.net/qq_42030961/article/details/84039098
注:
(1)如果报错:
[ERROR] Downloader raised an unhandled exception:
HTTPConnectionPool(host='files.ettus.com', port=80): Max retries exceeded with url: /binaries/cache//usrp2/fpga-6bea23d/usrp2_n200_fpga_default-g6bea23d.zip (Caused by : [Errno 110] Connection timed out)
You can run this again with the '--verbose' flag to see more information
If the problem persists, please email the output to: [email protected]
build have failed
这是因为没有装好USRP驱动。解决方案,依次执行:
sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils python-requests cmake build-essential
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
(2)如果报错:
[WARNING] [B200] The recv_frame_size must be a multiple of 8 bytes and not a multiple of 1024 bytes. Requested recv_frame_size of 15360 coerced to 15368.
解决方案:
①使用3.10版本的 uhd,不过我不是用的这种解决方式;②
sudo gedit ~/openairinterface5g/target/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
找到recv_frame_size=15360,把它改为 15368即可。
到这里eNB就编译完成了。如果有什么问题我遗漏了,欢迎在评论区和我讨论。