國內5g走nsa還是sa,24 - srsRAN安裝部署(已支持5G NSA和SA, 原srsLTE)
國內5g走nsa還是sa,24 - srsRAN安裝部署(已支持5G NSA和SA, 原srsLTE)
24 - srsRAN安裝部署(已支持5G SA/NSA, 原srsLTE )
- 0.srsRAN概況
- 硬件需求概覽:
- 1. 僅快速體驗srsLTE with USRP B210
- 2. srsRAN源碼安裝
- 2.1 安裝依賴
- 2.2 安裝srsGUI可視化界面(可選,推薦)
- 2.3 根據您的RF硬件安裝驅動/射頻仿真
- 2.4 安裝srsRAN
- 3 部署srsRAN+射頻
- 3.1 srs的BS+srs的UE
- 3.2 special: 配置MIMO
- 3.3 special: 配置5G NSA
- 3.3.1 不帶射頻(用ZMQ)
- 3.3.2 帶射頻
- 3.3 special: 配置5G SA
- 3.3.1 不帶射頻(用ZMQ)
- 3.5 special: 用商用手機連接
- 4 部署srsRAN+仿真射頻
- 4.1 安裝ZeroMQ
- 4.2 special: 5G NSA
0.srsRAN概況
srsLTE在4G時代以其穩定、便捷部署、兼容usrp等特征,在SDR中評價優秀,尤其是其LTE UE基本是當時唯一能穩定長時間運行的軟UE。
現在srsLTE已經更名為srsRAN,截止目前2022.3.18 (2023.2)srsRAN已經支持5G NSA gNB、5G NSA UE、sidelink、LTE eNB、LTE UE、5G SA gNB、5G SA UE。由于我對srs的印象極佳,最近也對比了一下srsRAN、OpenAir*********、Seg****,的代碼,簡單記一下部署srsRAN的過程。(十分順利,沒有OpenAir******那么多需要注意的)
2023.3更新:注意,srsRAN.git的代碼最近完成了整理,已分成了https://github.com/srsran/srsRAN_Project.git
和
https://github.com/srsran/srsRAN_4G.git
兩個項目以分別進行維護5G和4G功能(之前都在一起,代碼結構確實比較亂)。下面的地址記得相應修改。回頭我重寫一遍博客。
硬件需求概覽:
- 樹莓派4:可以帶射頻跑5M帶寬,不帶射頻用zmq也可以(便宜+便攜,而且這個內存大小OAI可能都無法完成編譯)
- Intel NUC8i7beh:20MHz 2x2MIMO,單小區。(經典皮膚,注意散熱)
- 實驗室發的筆記本戴爾 Precision 3340 i7 萬兆口 + USRP X310/N310:可以跑 160 MHz、2x2MIMO、多小區、載波聚合(史詩皮膚,不過實體清單上的學校現在不太好買USRP)
1. 僅快速體驗srsLTE with USRP B210
就是以前的srsLTE啦,因為提供了package安裝,安裝命令精簡為:
sudo add-apt-repository ppa:softwareradiosystems/srsran
sudo apt-get update
sudo apt-get install srsran -y
2. srsRAN源碼安裝
詳見srs官網 https://www.srs.io/
2.1 安裝依賴
Ubuntu1804:
sudo apt-get install build-essential cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev
Fedora:
dnf install cmake fftw3-devel mbedtls-devel lksctp-tools-devel libconfig-devel boost-devel
CentOS:
dnf install cmake fftw3-devel mbedtls-devel lksctp-tools-devel libconfig boost-devel
2.2 安裝srsGUI可視化界面(可選,推薦)
用于顯示星座圖等
sudo apt-get install libboost-system-dev libboost-test-dev libboost-thread-dev libqwt-qt5-dev qtbase5-dev
git clone https://github.com/srsLTE/srsGUI.git
cd srsgui
mkdir build
cd build
cmake ../
make
可用make test測試是否安裝成功
啟用的話在srs的配置文件中,[gui]的enable即可true
2.3 根據您的RF硬件安裝驅動/射頻仿真
比較基本,我就假設各位都裝好了并且測試可用
UHD(推薦用3.15,跟OAI通用)https://github.com/EttusResearch/uhd
SoapySDR https://github.com/pothosware/SoapySDR
BladeRF https://github.com/Nuand/bladeRF
ZeroMQ替代射頻仿真,類似于OAI的rfsimulator的拓撲,需要單獨定義信道環境,區別于L2sim,詳見第4章
https://github.com/zeromq
2.4 安裝srsRAN
2023.3:注意,srsRAN.git的代碼最近完成了整理,已分成了https://github.com/srsran/srsRAN_Project.git
和
https://github.com/srsran/srsRAN_4G.git
兩個項目以分別進行維護5G和4G功能(之前都在一起,代碼結構確實比較亂)。下面的地址記得相應修改。回頭我重寫一遍博客。
下載源碼編譯:
git clone https://github.com/srsRAN/srsRAN.git
cd srsRAN
mkdir build
cd build
cmake ../
make
make test
安裝(推薦,方便)
sudo make install
srsran_install_configs.sh user
默認配置文件位置在~/.config/srsran
3 部署srsRAN+射頻
srsRAN目前集成了LTE和NR的協議棧。
srsepc: 簡單的LTE 核心網
srsenb:通過enb.conf
rr.conf
等配置文件來控制運行LTE還是NR(集成)。
srsgnb:O-RAN 7.2x架構的NR基站,CU DU分離。
srsue:UE。
3.1 srs的BS+srs的UE
依然是愉快的
#指定配置文件
sudo srsenb ~/.config/srsran/enb.conf
#不指定,用默認配置
sudo srsenb
和
#指定配置文件
sudo srsue ~/.config/srsran/ue.conf
sudo srsue #默認配置
在./srsRAN/build/lib/examples
里可以找到配置文件示例,此外還有些很方便的SIB的配置(比如我做授時需要配置SIB9)sib.conf
、空口資源配置(比如可以引入額外的AI算法)rr.conf
、DRB承載的配置 drb.conf
。至于連接核心網的一些配置、UE的SIM的配置、核心網的配置等,可以看我之前的博客。
- 如果性能不足可以考慮禁用睿頻、使用低延遲內核,可看之前的博客
for f in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_governor ; doecho performance > $f
done
3.2 special: 配置MIMO
目前支持模式tm=2、3、4 (參TS38.213),在配置文件中:
[enb]
...
tm = 3 #傳輸模式
nof_ports = 2 #天線端口數
基站在tm=3和4時候配置UE上報Rank Indicator的周期可以在rr.conf
的m_ri
處配置,整數,是CQI報告周期的倍數。
3.3 special: 配置5G NSA
3.3.1 不帶射頻(用ZMQ)
ZMQ配置見第4章
- 修改基站的配置文件
enb.conf
中,配置[rf]中的device_name和device_args,如
device_name = zmq
device_args = fail_on_disconnect=true,tx_port0=tcp://*:2000,rx_port0=tcp://localhost:2001,tx_port1=tcp://*:2100,rx_port1=tcp://localhost:2101,id=enb,base_srate=23.04e6
再配置RRC, rr.conf
的末尾添加一個NR小區(不需要LTE的話記得注釋掉LTE的cell_list
)
nr_cell_list =
({rf_port = 1;cell_id = 0x02;tac = 0x0007;pci = 500;root_seq_idx = 204;// TDD://dl_arfcn = 634240;//band = 78;// FDD:dl_arfcn = 368500;band = 3;}
);
-
運行BS
跟之前一樣sudo srsue或者指定上配置文件,會根據配置文件啟動BS。可以同時啟動eNB和gNB。
log里cc_idx 0 是LTE cell,1是NR cell。 -
修改UE的配置文件
[rf]里修改device_name和device_args,如
device_name = zmq
device_args = tx_port0=tcp://*:2001,rx_port0=tcp://localhost:2000,tx_port1=tcp://*:2101,rx_port1=tcp://localhost:2100,id=ue,base_srate=23.04e6
添加網絡
[gw]
netns = ue1
配置搜索的頻段、載波數,TDD FDD都支持
[rat.nr]
bands = 3,78
nof_carriers = 1
聲明標準支持(默認是聲明支持R8,NSA至少R15)
[rrc]
release = 15
-
運行UE
跟之前一樣。log中出現RRC NR reconfiguration successful
表示成功連上NSA。 -
測試
ping或者iperf,隨意。
上行注意需要指定接口ue1(按前幾步[gw]中配置):
sudo ip netns exec ue1 iperf3 -c 172.16.0.1 -b 10M -i 1 -t 60
同樣,按t可以trace,打log的速度可以在配置文件metrics_period_secs
處修改。
3.3.2 帶射頻
配置文件修改類似3.3.1節,如
[rf]
device_args=type=x300,clock=external,sampling_rate=11.52e6,lo_freq_offset_hz=11.52e6
nr_cell_list =
({rf_port = 1;cell_id = 0x02;tac = 0x0007;pci = 500;root_seq_idx = 204;// TDD://dl_arfcn = 634240;//band = 78;// FDD:dl_arfcn = 368500;band = 3;}
);
3.3 special: 配置5G SA
3.3.1 不帶射頻(用ZMQ)
ue.conf
中添加ZMQ配置
[rf]
freq_offset = 0
tx_gain = 80
srate = 11.52e6device_name = zmq
device_args = tx_port=tcp://*:2001,rx_port=tcp://localhost:2000,id=ue,base_srate=11.52e6
添加網絡
[gw]
netns = ue1
關閉LTE的頻段
[rat.eutra]
dl_earfcn = 2850
nof_carriers = 0
開啟NR的頻段
[rat.nr]
bands = 3,78
nof_carriers = 1
聲明標準支持(SA至少R15)
[rrc]
release = 15
啟用APN
[nas]
apn = srsapn
apn_protocol = ipv4
剩下的USIM那些跟之前的配置方法一樣。
enb.conf
中MME的地址處寫AMF的地址
[enb]
enb_id = 0x19B
mcc = 901
mnc = 70
mme_addr = 192.168.8.10 #OpenXG核心網物理機地址,記得添加到docker的路由
gtp_bind_addr = 127.0.1.1 #Local Address
s1c_bind_addr = 127.0.1.1
s1c_bind_port = 0
n_prb = 50
配置BS這里的ZMQ,可以修改端口但注意匹配
[rf]
rx_gain = 40
tx_gain = 80# Example for ZMQ-based operation with TCP transport for I/Q samples
device_name = zmq
device_args = fail_on_disconnect=true,tx_port=tcp://*:2000,rx_port=tcp://localhost:2001,id=enb,base_srate=11.52e6
在rr.conf
中移除LTE的cell_list
并添加NR_cell_list
(不移除LTE小區的話會是NSA模式)
nr_cell_list =
({rf_port = 0;cell_id = 1;root_seq_idx = 1;tac = 7;pci = 500;dl_arfcn = 368500;coreset0_idx = 6;band = 3;}
);
3.5 special: 用商用手機連接
目前有點淦的是srsRAN只支持15KHz SCS,等更新吧。
目前OnePlus 5G Nord可以接入,問題不少有興趣可參這里。
4 部署srsRAN+仿真射頻
4.1 安裝ZeroMQ
srsRAN沒有自己的rfsim,用的ZMQ做轉發假裝是經過了一個信道,目前只支持單UE單BS。
!注意4.1這一步對應2.3節,是應該在編譯srsRAN之前就安裝的,如果已經編譯了srsRAN需要在裝完ZMQ之后重新make一下srsRAN
- package安裝:
sudo apt-get install libzmq3-dev
或者用源碼編譯:
git clone https://github.com/zeromq/libzmq.git
cd libzmq
./autogen.sh
./configure
make
sudo make install
sudo ldconfig
git clone https://github.com/zeromq/czmq.git
cd czmq
./autogen.sh
./configure
make
sudo make install
sudo ldconfig
- 對應2.4節
在2.4節執行一下命令編譯過程時↓
git clone https://github.com/srsRAN/srsRAN.git
cd srsRAN
mkdir build
cd build
cmake ../
make
注意要有以下log才是正確安裝了ZMQ并且被srsRAN識別到了
...
-- FINDING ZEROMQ.
-- Checking for module 'ZeroMQ'
-- No package 'ZeroMQ' found
-- Found libZEROMQ: /usr/local/include, /usr/local/lib/libzmq.so
...
- 設置ue的仿真網絡:
sudo ip netns add ue1
sudo ip netns list
- 啟動核心網
略,可以用srs的迷你epc,也可以用OAI的,可參考我以前的博客等。
srsepc大概就:
sudo ./srsepc/src/srsepc
OAI的epc:https://blog.csdn.net/BUPTOctopus/article/details/81560514
OAI的5GC:見3.3.1
- 運行BS
以eNB為例
./srsenb/src/srsenb --rf.device_name=zmq --rf.device_args="fail_on_disconnect=true,tx_port=tcp://*:2000,rx_port=tcp://localhost:2001,id=enb,base_srate=23.04e6"
- 運行UE
sudo ./srsue/src/srsue --rf.device_name=zmq --rf.device_args="tx_port=tcp://*:2001,rx_port=tcp://localhost:2000,id=ue,base_srate=23.04e6" --gw.netns=ue1
- 測試(下行)
ping或者iperf,沒什么特殊的 - 測試(上行)
從UE發包的話需要制定ue的接口,(4G的話)ping SPGW用172.16.0.1(按照您UEIPpool的設置)
sudo ip netns exec ue1 ping 172.16.0.1
關閉時候要先關UE再關BS最后記得sudo ip netns delete ue1
,不然會出bug。
- GNU-Radio
支持,運行時先分別啟動核心網、BS、UE,最后再開GRC Flowgraph
4.2 special: 5G NSA
in fact nothing special……
一些其他的工具:
①ubuntu下的讀卡器工具 https://pcsclite.apdu.fr/
②win下的讀卡器工具(我之前博客發過)
③libdw-dev和libdw:使用backward-cpp進行實際信息的回溯
一些srsRAN的用例:
①樹莓派4用例
②載波聚合
③eMBMS
④NB-IoT
⑤C-V2X