20210319 update:最新版已不支持ubuntu 16.04,需要至少18.04

只为记录,备忘,后人少走弯路,不为装b
(以下为安装完后写的记录,实际操作未必一模一样)
srsLTE代码主要分为三个模块,即srsUE、srseNB、srsEPC,另外还包括一些底层的库函数:
  • srsUE:实现了物理层到IP层的LTE SDR平台;
  • srseNB:全协议栈的LTE eNodeB SDR平台;
  • srsEPC:轻量级的LTE核心网实现平台,包括HSS、MME以及S/P-GW;
  • lib:一套模块化的通用库,包括PHY、MAC、RLC、NAS、S1AP以及GW各层。
系统:ubuntu 16.04(最新版已不支持16.04,需要至少18.04),使用实体机,USB3.0,千万不要用虚拟机,一些指令优化,时序。。。需要非常精准,比如双向验证鉴权的时候,差一点都不行。
软件无线电:bladeRF x40,LimeSDR mini,USRP B200
写卡:买白卡和写卡器,不要问我,自己关键字搜吧,taobao不让卖了
安装顺序:UHD,SoapySDR,SoapyUHD,LimeSuite,bladeRF,srsGUI,srsLTE

前期准备

sudo apt-get update
sudo apt-get -y install git swig cmake doxygen build-essential libboost-all-dev libtool libusb-1.0-0 libusb-1.0-0-dev libudev-dev libncurses5-dev libfftw3-bin libfftw3-dev libfftw3-doc libcppunit-1.13-0v5 libcppunit-dev libcppunit-doc ncurses-bin cpufrequtils python-numpy python-numpy-doc python-numpy-dbg python-scipy python-docutils qt4-bin-dbg qt4-default qt4-doc libqt4-dev libqt4-dev-bin python-qt4 python-qt4-dbg python-qt4-dev python-qt4-doc python-qt4-doc libqwt6abi1 libfftw3-bin libfftw3-dev libfftw3-doc ncurses-bin libncurses5 libncurses5-dev libncurses5-dbg libfontconfig1-dev libxrender-dev libpulse-dev swig g++ automake autoconf libtool python-dev libfftw3-dev libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77 libsdl1.2-dev python-wxgtk3.0 git-core libqt4-dev python-numpy ccache python-opengl libgsl-dev python-cheetah python-mako python-lxml doxygen qt4-default qt4-dev-tools libusb-1.0-0-dev libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4 cmake git-core wget libxi-dev gtk2-engines-pixbuf r-base-dev python-tk liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq-dev libzmq1 python-requests python-sphinx libcomedi-dev python-zmq python-setuptools

uhd
sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-cheetah doxygen python-docutils g++ cmake python-setuptools python-mako
git clone https://github.com/EttusResearch/uhd
cd uhd/host/
mkdir build
cd build
cmake ../
make -j4
make test
sudo make install
sudo ldconfig

下载安装固件镜像
sudo uhd_images_downloader

测试uhd安装是否有问题(插上USB3.0接口后首次执行程序会加载固件和fpga)
$ sudo uhd_find_devices 
[INFO] [UHD] linux; GNU C++ version 5.4.0 20160609; Boost_105800; UHD_3.15.0.git-19-g7e1b567d
[INFO] [B200] Loading firmware image: /usr/local/share/uhd/images/usrp_b200_fw.hex
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
    serial:        
    name: MyB200
    product: B200
    type: b200
$ sudo uhd_usrp_probe
[INFO] [UHD] linux; GNU C++ version 5.4.0 20160609; Boost_105800; UHD_3.15.0.git-19-g7e1b567d
[INFO] [B200] Detected Device: B200
[INFO] [B200] Loading FPGA image: /usr/local/share/uhd/images/usrp_b200_fpga.bin
[INFO] [B200] Operating over USB 3.
[INFO] [B200] Detecting internal GPSDO
[INFO] [GPS] No GPSDO found
[INFO] [B200] Initialize CODEC control
[INFO] [B200] Initialize Radio control
[INFO] [B200] Performing register loopback test 
[INFO] [B200] Register loopback test passed
[INFO] [B200] Setting master clock rate selection to 'automatic'.
[INFO] [B200] Asking for clock rate 16.000000 MHz 
[INFO] [B200] Actually got clock rate 16.000000 MHz.
  _____________________________________________________
 /
|       Device: B-Series Device
|     _____________________________________________________
|    /
|   |       Mboard: B200
|   |   serial:        
|   |   name: MyB200
|   |   product: 1
|   |   revision: 5
|   |   FW Version: 8.0
|   |   FPGA Version: 16.0
|   |   
|   |   Time sources:  none, internal, external, gpsdo
|   |   Clock sources: internal, external, gpsdo
|   |   Sensors: ref_locked
|   |     _____________________________________________________
|   |    /
|   |   |       RX DSP: 0
|   |   |   
|   |   |   Freq range: -8.000 to 8.000 MHz
|   |     _____________________________________________________
|   |    /
|   |   |       RX Dboard: A
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       RX Frontend: A
|   |   |   |   Name: FE-RX1
|   |   |   |   Antennas: TX/RX, RX2
|   |   |   |   Sensors: temp, rssi, lo_locked
|   |   |   |   Freq range: 50.000 to 6000.000 MHz
|   |   |   |   Gain range PGA: 0.0 to 76.0 step 1.0 dB
|   |   |   |   Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz
|   |   |   |   Connection Type: IQ
|   |   |   |   Uses LO offset: No
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       RX Codec: A
|   |   |   |   Name: B200 RX dual ADC
|   |   |   |   Gain Elements: None
|   |     _____________________________________________________
|   |    /
|   |   |       TX DSP: 0
|   |   |   
|   |   |   Freq range: -8.000 to 8.000 MHz
|   |     _____________________________________________________
|   |    /
|   |   |       TX Dboard: A
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       TX Frontend: A
|   |   |   |   Name: FE-TX1
|   |   |   |   Antennas: TX/RX
|   |   |   |   Sensors: temp, lo_locked
|   |   |   |   Freq range: 50.000 to 6000.000 MHz
|   |   |   |   Gain range PGA: 0.0 to 89.8 step 0.2 dB
|   |   |   |   Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz
|   |   |   |   Connection Type: IQ
|   |   |   |   Uses LO offset: No
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       TX Codec: A
|   |   |   |   Name: B200 TX dual DAC
|   |   |   |   Gain Elements: None

通过设置ROOT权限直接执行UHD命令
cd /usr/local/lib/uhd/utils 
sudo cp uhd-usrp.rules /etc/udev/rules.d/ 
sudo udevadm control --reload-rules 
sudo udevadm trigger

SoapySDR
sudo apt-get install cmake g++ libpython-dev python-numpy swig git libsqlite3-dev libi2c-dev libusb-1.0-0-dev libwxgtk3.0-dev freeglut3-dev
git clone https://github.com/pothosware/SoapySDR.git
cd SoapySDR
mkdir build && cd build
cmake ..
make -j4
sudo make install
sudo ldconfig

LimeSuite
git clone https://github.com/myriadrf/LimeSuite.git
cd LimeSuite
mkdir build
cd build
cmake ..
make -j4
sudo make install
sudo ldconfig
cd ../udev-rules/
sudo ./install.sh
sudo LimeUtil --update

bladeRF
git clone https://github.com/Nuand/bladeRF
cd bladeRF/host
mkdir build
cd build
cmake ..
make -j4
sudo make install 
sudo ldconfig

依赖
sudo apt-get install libboost-system-dev libboost-test-dev libboost-thread-dev libqwt-dev libqt4-dev
sudo apt-get install boost
sudo apt-get install libboost-all-dev
sudo apt-get install libpolarssl-dev 

srsGUI
这个是srsLTE的时候开启gui界面星座图用的,可在eu和enb配置文件中设置,但是会增加CPU负担
git clone https://github.com/srsLTE/srsGUI.git
cd srsGUI
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

srsLTE
sudo apt-get install git cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libboost-thread-dev libconfig++-dev libsctp-dev
git clone https://github.com/srsLTE/srsLTE.git
cd srsLTE
mkdir build
cd build
cmake ../
make
make test
sudo make install
sudo ldconfig
//配置文件生成,user生成到用户路径~/.config/srsLTE/,service生成到/etc/srsLTE路径
sh ./srslte_install_configs.sh user
//配置网络接口,我的是wlp3s0
sh ../srsepc/srsepc_if_masq.sh wlp3s0
好像有个zeromq的什么错误忘了,下载编译安装zeromq-4.1.5.tar.gz就好了。

我印象当中没有设置转发规则啥的就可以了,如果需要,参考如下:
// 配置如下转发规则,配置信息参考openair-cn的SPGW中的代码
sudo sysctl -w net.ipv4.ip_forward=1
sudo sync
sudo iptables -t mangle -F FORWARD
sudo iptables -t nat -F POSTROUTING
export LANG=C
// 如果没有修改过配置文件,则默认使用如下配置即可,
// 如果修改过sgi_if_addr的地址(默认sgi_if_addr=172.16.0.1),需要更改这个字段
export FORDING_IPs=172.16.0.0/12
// 有线网卡一般以"en"开头,比如"enp3s0",此处需要根据自身机器上的网卡进行设置,修改
export NIC_NAME=`ls /sys/class/net | grep en`
export NIC_IP=`ifconfig $NIC_NAME | grep 'inet addr:' | awk '{print $2}' | cut -c 6-`
sudo iptables -t nat -I POSTROUTING -s $FORDING_IPs -o  $NIC_NAME ! --protocol sctp -j SNAT --to-source $NIC_IP

写卡

修改配置文件user.db.csv,添加你写入的白卡信息
ue2,mil,001010123456780,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,8000,000000001234,7,dynamic
ue1,xor,001010123456789,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,9001,000000001234,7,dynamic
ue3,mil,          ,                                        ,opc,                                        ,8000,000000001234,7,dynamic

手机端
插入写好的白卡,设置apn,默认为epc配置文件中: apn = srsapn

使用usrp接上USB3.0,分别执行epc和enb
$ sudo srsepc

Built in Release mode using commit 5343b33 on branch master.


---  Software Radio Systems EPC  ---

Reading configuration file /home/   /.config/srslte/epc.conf
HSS Initialized.
MME S11 Initialized
MME GTP-C Initialized
MME Initialized. MCC: 0xf001, MNC: 0xff01
SPGW GTP-U Initialized.
SPGW S11 Initialized.
SP-GW Initialized.
Received S1 Setup Request.
S1 Setup Request - eNB Name: srsenb01, eNB id: 0x19b
S1 Setup Request - MCC:001, MNC:01, PLMN: 61712
S1 Setup Request - TAC 7, B-PLMN 0
S1 Setup Request - Paging DRX 2
Sending S1 Setup Response
Initial UE message: NAS Message Type Unknown
Received Initial UE message -- Service Request
Service request -- S-TMSI           
Service request -- eNB UE S1AP Id 1
Could not find IMSI from M-TMSI. M-TMSI           
Initial UE message: LIBLTE_MME_MSG_TYPE_ATTACH_REQUEST
Received Initial UE message -- Attach Request
Attach request -- GUTI Style Attach request
Attach request -- M-TMSI:           
Attach request -- eNB-UE S1AP Id: 2
Attach request -- Attach type: 2
Attach Request -- UE Network Capabilities EEA: 11110000
Attach Request -- UE Network Capabilities EIA: 01110000
Attach Request -- MS Network Capabilities Present: true
PDN Connectivity Request -- EPS Bearer Identity requested: 0
PDN Connectivity Request -- Procedure Transaction Id: 6
PDN Connectivity Request -- ESM Information Transfer requested: true
UL NAS: Received Identity Response
ID Response -- IMSI:                
Downlink NAS: Sent Authentication Request
UL NAS: Received Authentication Response
Authentication Response -- IMSI                
UE Authentication Accepted.
Generating KeNB with UL NAS COUNT: 0
Downlink NAS: Sending NAS Security Mode Command.
UL NAS: Received Security Mode Complete
Security Mode Command Complete -- IMSI:                
Sending ESM information request
UL NAS: Received ESM Information Response
ESM Info: APN srsapn
Getting subscription information -- QCI 7
Sending Create Session Request.
Creating Session Response -- IMSI:                
Creating Session Response -- MME control TEID: 1
Received GTP-C PDU. Message type: GTPC_MSG_TYPE_CREATE_SESSION_REQUEST
SPGW: Allocated Ctrl TEID 1
SPGW: Allocated User TEID 1
SPGW: Allocate UE IP 172.16.0.2
Received Create Session Response
Create Session Response -- SPGW control TEID 1
Create Session Response -- SPGW S1-U Address: 127.0.1.100
SPGW Allocated IP 172.16.0.2 to IMSI                
Adding attach accept to Initial Context Setup Request
Initial Context Setup Request -- eNB UE S1AP Id 2, MME UE S1AP Id 2
Initial Context Setup Request -- E-RAB id 5
Initial Context Setup Request -- S1-U TEID 0x1. IP 127.0.1.100 
Initial Context Setup Request -- S1-U TEID 0x1. IP 127.0.1.100 
Initial Context Setup Request -- QCI 7 
Received Initial Context Setup Response
E-RAB Context Setup. E-RAB id 5
E-RAB Context -- eNB TEID 0x470003; eNB GTP-U Address 127.0.1.1
UL NAS: Received Attach Complete
Unpacked Attached Complete Message. IMSI                
Unpacked Activate Default EPS Bearer message. EPS Bearer id 5
Received GTP-C PDU. Message type: GTPC_MSG_TYPE_MODIFY_BEARER_REQUEST
Sending EMM Information
Received UE Context Release Request. MME-UE S1AP Id 1
No UE context to release found. MME-UE S1AP Id: 1
$ sudo srsenb

Built in Release mode using commit 5343b33 on branch master.

---  Software Radio Systems LTE eNodeB  ---

Reading configuration file /home/zsh/.config/srslte/enb.conf
[INFO] [UHD] linux; GNU C++ version 5.4.0 20160609; Boost_105800; UHD_3.15.0.git-19-g7e1b567d
[INFO] [LOGGING] Fastpath logging disabled at runtime.
Opening USRP with args: type=b200,master_clock_rate=30.72e6
[INFO] [B200] Detected Device: B200
[INFO] [B200] Operating over USB 3.
[INFO] [B200] Initialize CODEC control
[INFO] [B200] Initialize Radio control
[INFO] [B200] Performing register loopback test 
[INFO] [B200] Register loopback test passed
[INFO] [B200] Asking for clock rate 30.720000 MHz 
[INFO] [B200] Actually got clock rate 30.720000 MHz.
Setting frequency: DL=2685.0 Mhz, UL=2565.0 MHz
[INFO] [B200] Asking for clock rate 11.520000 MHz 
[INFO] [B200] Actually got clock rate 11.520000 MHz.
Setting Sampling frequency 11.52 MHz

==== eNodeB started ===
Type <t> to view trace
RACH:  tti=8321, preamble=11, offset=1, temp_crnti=0x46
RACH:  tti=8301, preamble=35, offset=1, temp_crnti=0x47
User 0x47 connected
Disconnecting rnti=0x46.

使用LimeSDR mini的时候
$ sudo srsenb

Built in Release mode using commit 5343b33 on branch master.

---  Software Radio Systems LTE eNodeB  ---

Reading configuration file /home/   /.config/srslte/enb.conf
[INFO] [UHD] linux; GNU C++ version 5.4.0 20160609; Boost_105800; UHD_3.15.0.git-19-g7e1b567d
[INFO] [LOGGING] Fastpath logging disabled at runtime.
Opening USRP with args: 
[INFO] [UHDSoapyDevice] Make connection: 'LimeSDR Mini [USB 3.0]               '
[INFO] [UHDSoapyDevice] Reference clock 40.00 MHz
[INFO] [UHDSoapyDevice] Device name: LimeSDR-Mini
[INFO] [UHDSoapyDevice] Reference: 40 MHz
[INFO] [UHDSoapyDevice] LMS7002M register cache: Disabled
[INFO] [UHDSoapyDevice] RX LPF configured
[INFO] [UHDSoapyDevice] Filter calibrated. Filter order-4th, filter bandwidth set to 5 MHz.Real pole 1st order filter set to 2.5 MHz. Preemphasis filter not active
[INFO] [UHDSoapyDevice] TX LPF configured
Setting frequency: DL=2685.0 Mhz, UL=2565.0 MHz
[INFO] [UHDSoapyDevice] Tx calibration finished
[INFO] [UHDSoapyDevice] Rx calibration finished
Setting Sampling frequency 11.52 MHz
[INFO] [UHDSoapyDevice] RX LPF configured
[INFO] [UHDSoapyDevice] Filter calibrated. Filter order-4th, filter bandwidth set to 11.52 MHz.Real pole 1st order filter set to 2.5 MHz. Preemphasis filter not active
[INFO] [UHDSoapyDevice] TX LPF configured

Warning TX/RX time offset has not been calibrated for device uhd_unknown. Set a value manually


==== eNodeB started ===
Type <t> to view trace
RACH:  tti=9271, preamble=17, offset=15, temp_crnti=0x46
RACH:  tti=9261, preamble=50, offset=15, temp_crnti=0x47
RACH:  tti=3551, preamble=1, offset=15, temp_crnti=0x48
User 0x48 connected
Disconnecting rnti=0x46.
相对USRP来说稍差,会掉线。

使用bladeRF,目前没搞定,有点问题
$ sudo srsenb

Built in Release mode using commit 5343b33f on branch master.

---  Software Radio Systems LTE eNodeB  ---

Reading configuration file /home/   /.config/srslte/enb.conf
Device bladerf not found. Switching to auto mode
[INFO] [UHD] linux; GNU C++ version 8.3.0; Boost_106700; UHD_3.15.0.git-1-gf83faf28
[INFO] [LOGGING] Fastpath logging disabled at runtime.
Opening USRP with args: 
Error opening UHD: code 11
Opening bladeRF
Set RX sampling rate 1.92 Mhz, filter BW: 2.50 Mhz
Setting frequency: DL=2685.0 Mhz, UL=2565.0 MHz
set TX frequency to 2684999936
set RX frequency to 2564999936
Setting Sampling frequency 11.52 MHz
Set RX sampling rate 11.52 Mhz, filter BW: 10.00 Mhz

==== eNodeB started ===
Type <t> to view trace

我用的usrp,用hackrf查看2685MHz的波形是这样的

用手机会搜到TEST-01(具体名称记不太清了),鉴权成功后会变成Software Radio Systems LTE