环境:
Name | Version |
---|---|
Raspberry Pi System | Ubuntu Server 18.04 |
PC System | Ubuntu 18.04 |
uhd | 3.15 LTS |
srsLTE | 20.04.1 |
物理环境:电脑和树莓派连接同一个路由器,电脑ip为192.168.2.100
运行srsenb,树莓派ip为192.168.2.101
运行srsepc,USRP B210接在电脑上的USB3.0端口。
经测试,树莓派4B同样适用所有步骤无需特殊更改。
首先请确保在安装srsLTE后运行了:
sudo srslte_install_configs.sh user
该命令将拷贝srsLTE的配置文件到~/.config/srslte
,以下介绍的文件路径都基于此。
SIM卡的信息如下:
修改~/.config/srslte/user_db.csv
文件:
格式为(ue_name),(imsi),(K),(OP/OPc_type),(OP/OPc_value),(AMF),(SQN),(QCI)
,仿照原文件中的例子进行修改,最后两持不变。倒数第三项被红色画笔涂亮的部分一开始我设置的是1234,后来在运行过程中被程序自动修改。
sudo vim ~/.config/srslte/enb.conf
其中mcc
和mnc
与手机的接入点(APN)设置相同,mme_addr
设置为树莓派的IP地址,gtp_bind_addr
和s1c_bind_addr
改为电脑的IP地址,dl_earfcn
需要根据具体情况设置不同的频点号(不同的频段),我这里设置为1500。
sudo vim ~/.config/srslte/epc.conf
其中mcc
和mnc
与手机的接入点(APN)设置相同,mme_addr
设置为树莓派的IP地址,gtpu_bind_addr
改为树莓派上可以上网的IP地址。这里我通过sudo ifconfig eth0:gtp 192.168.2.111/24 up
开启了一个虚拟网口,gtpu_bind_addr
也可以直接改为与mme_bind_addr
相同的IP地址。
此处以小米手机为例,进入设置->双卡和移动网络->选择对应的SIM卡->接入点名称(APN)->新建APN,名称
和APN
都改为srsapn
,MCC
改为460
, MNC
改为 11
,修改完成后返回保存即可。
enb和epc可以在同一台设备的两个窗口分别运行,也可以在两个不同的设备上分别运行,这里我在树莓派上运行epc,在电脑上运行enb,USRP B210连接在电脑上。手机使用的是Redmi 4。
1.树莓派上的操作:
ifconfig # 查看网络接口
sudo srsepc_if_masq.sh eth0 # 配置网络接口,选择能上网的接口,每次系统重启后都需要运行一次
sudo srsepc
2.在电脑上的操作:
sudo srsenb
3.在手机上的操作:
epc和enb都运行并建立连接后,打开手机的数据连接,或者先切换到飞行模式再解除飞行模式。
然后手机就能通过树莓派的网络上网了,使用“网络信号大师”APP查看:
在测速网测速如下,网速比较慢是由于实验室限速,这个速度已经是满速了:
将srsLTE由18.12升级到20.04.1:
cd ~/.config
sudo rm -r srslte #删除srslte的配置文件
cd /home/Downloads/srsLTE/build
sudo make uninstall #卸载srsLTE
git branch -a #查看当前分支版本
git tag -l #查看所有分支版本
git checkout -f release_20_04_1 #-f丢弃当前分支的本地修改强制切换到新的分支
cmake ../
make -j3
make test -j3 #树莓派3b性能有限,这一步需要数个小时,可以选择跳过
sudo make install
sudo ldconfig
# 拷贝srsLTE的配置文件到`~/.config/srslte`, 这一步最好执行,因为不是master版本
sudo srslte_install_configs.sh user
由于树莓派系统为18.04,按以上步骤即可将srsLTE成功升级到20.04,而电脑上系统为16.04,按照上面步骤升级会在make时出错,需要安装高版本的libboost,参考:在Ubuntu 16.04上安装多版本 Boost
sudo apt --purge remove libboost-dev
sudo apt --purge remove libboost-all-dev
sudo apt --purge autoremove libboost-all-dev
sudo rm -rf /usr/lib/libboost_*
sudo rm -rf /usr/include/boost
可以手动去官网下对应版本,也可以使用wget
命令:
# 1.65.0 是对应的版本号
wget https://dl.bintray.com/boostorg/release/1.65.0/source/boost_1_65_0.tar.gz
可以用 ./bootstrap.sh --help
./b2 --help
查看编译选项
./bootstrap.sh --prefix=/usr/local/boost_1_65
sudo ./b2 install --build-type=complete threading=multi --layout=tagged
创建软连接:
sudo ln -s /usr/local/boost_1_65 /usr/local/boost
添加以下内容到$HOME/.bashrc
:
#export BOOST_INCLUDE_PATH=/usr/local/boost/include
#export BOOST_LIB=/usr/local/boost/lib
export BOOST_ROOT=/usr/local/boost
添加以下内容到/etc/ld.so.conf.d/libc.conf
:
/usr/local/boost/lib
编译时指定boost版本:
cmake -DBOOST_ROOT=/usr/local/boost
使环境变量生效,并重新链接动态库:
source ~/.bashrc
sudo ldconfig
srsepc
均出错:Error reading user database file user_db.csv
Error initializing HSS
解决方法:在~/.config/srslte/user_db.csv
文件中,我们添加的信息可能与原有的信息冲突,我们将原文件中的两条信息注释掉,只保留我们添加的那一条,问题解决。
srsenb
,树莓派运行srsepc
无法建立连接Disconnecting rnti=0x47.
Disconnecting rnti=0x46.
Failed to connect to MME - retrying in 10 seconds
Error getting PUCCH
解决方法:修改~/.config/srslte/enb.conf
,mcc
改为460,mnc
改为11,mme_addr
改为树莓派地址,gtp_bind_addr
和s1c_bind_addr
改为本机地址,dl_earfcn
改为1500
修改~/.config/srslte/epc.conf
,mcc
改为460,mnc
改为11,mme_bind_addr
改为树莓派地址,gtpu_bind_addr
改为与mme_bind_addr
相同的地址。
在手机上用LTE Discovery查看,左图为srsenb和srsepc运行前,右图为运行后,可以看出运行后手机成功连接了LTE信号,但是无法上网,没有下行流量也没有上行流量。
手机调到飞行模式,再解除飞行模式,运行窗口有反应,其中用户名maplesky为电脑运行srsenb,用户名ubuntu为树莓派运行srsepc:
解决方法:将srsLTE的版本切换到20_04_1,卸载已安装的版本,重新编译安装。Ubuntu16.04安装srsLTE 20_04_1需要安装高版本的libboost,直接通过sudo apt-get install
的版本太低安装不上,请参考:在Ubuntu 16.04上安装多版本 Boost
cd /home/Downloads/srsLTE/build/
sudo make uninstall
git tag -l
git checkout release_20_04_1
git branch
cmake ../
make -j3
make test -j3
sudo make install
sudo ldconfig
# 拷贝srsLTE的配置文件到`~/.config/srslte`,拷贝前最好删除该文件夹里原有的文件,不同版本的配置信息不一样
sudo srslte_install_configs.sh user
切换到srsLTE 20.04,make通过,make test时报错如下:
The following tests FAILED:
340 - pucch_test (SEGFAULT)
702 - pucch_ca_test (SEGFAULT)
734 - enb_phy_test_tm1_ca_pucch3 (SEGFAULT)
735 - enb_phy_test_tm4_ca_pucch3 (SEGFAULT)
查询得知pucch与上行控制物理信道有关,由于没有找到解决方法,我直接进行sudo make install
,可以正常使用,暂未遇到问题。
解决方法:在epc设备(此处为树莓派)上配置可以上网的网络接口:
ifconfig # 查看网络接口
sudo srsepc_if_masq.sh eth0 # 配置网络接口,选择能上网的接口,每次系统重启后都需要运行一次
sudo srsepc #重新运行epc
同一张SIM卡,经测试能上网的手机有Redmi 4(4G)、Mi Note 3(4G),而Redmi K30(5G)不能上网。
Mi Note 3和Redmi K30连接时在运行srsepc的设备上都有显示错误:
Unhandled NAS integrity protected message LIBLTE_MME_MSG_TYPE_PDN_CONNECTIVITY_REQUEST
但是Mi Note 3可是正常上网,而Redmi K30不行。
暂未解决…