OAI-5G学习笔记2(搭建gnb和ue)
上行秩 1,单流传输(如果是2则表示双流传输),TPMI是UE 上行使用的预编码矩阵(天线权重),告诉 gNB 如何解码信号,0表示默认的单天线模式。步骤解释:(注:由于openairinterface5g同时包含了gnb/ue的所有文件,以下环境搭建步骤可以在gnb端和ue端同时进行)设备:ubuntu24.04(注:gnb和核心网搭建在同一台机子上,ue在另一台机子上),两个USRP B210
设备:ubuntu24.04(注:gnb和核心网搭建在同一台机子上,ue在另一台机子上),两个USRP B210。
软件版本:
(1)openairinterface5g的tag: 2025.w36
(2)UHD的tag:v4.8
gnb和ue搭建步骤地址:https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/develop/doc/NR_SA_Tutorial_OAI_nrUE.md
步骤解释:(注:由于openairinterface5g同时包含了gnb/ue的所有文件,以下环境搭建步骤可以在gnb端和ue端同时进行)
1.安装UHD依赖:
sudo apt install -y autoconf automake build-essential ccache cmake cpufrequtils doxygen ethtool g++ git inetutils-tools \
libboost-all-dev libncurses-dev libusb-1.0-0 libusb-1.0-0-dev libusb-dev \
python3-dev python3-mako python3-numpy python3-requests python3-scipy python3-setuptools python3-ruamel.yaml
这些是编译 UHD 需要的工具链和库:
-
autoconf/automake/cmake/make
→ 构建工具 -
libboost-all-dev
→ UHD 用到的 Boost 库 -
libusb-1.0-0-dev
→ USB 接口支持(B200 系列必需) -
python3-*
→ UHD 的 Python 工具(如uhd_usrp_probe
)需要 -
doxygen
→ 文档生成(可选)
2.下载源码:
git clone https://github.com/EttusResearch/uhd.git ~/uhd
cd ~/uhd
git checkout v4.8.0.0
-
克隆 UHD 官方仓库到
~/uhd
。 -
切换到
v4.8.0.0
标签(一个稳定发布版本,与之前用的 OAI 兼容)。
3.编译:
cd host
mkdir build
cd build
cmake ../
make -j $(nproc)
-
host
目录 → UHD 的主机端驱动 -
cmake ../
→ 配置构建 -
make -j $(nproc)
→ 编译源码,$(nproc)
自动用 CPU 所有核心并行编译
4.测试(可选):
make test
运行内置单元测试,验证 UHD 库功能是否正常。
5.安装:
sudo make install
sudo ldconfig
-
make install
→ 把编译好的库、工具装到系统路径(通常是/usr/local/lib/
和/usr/local/bin/
) -
ldconfig
→ 刷新动态链接库缓存,让系统识别新装的 UHD 库
6.下载固件/镜像:
sudo uhd_images_downloader
-
UHD 工具会自动下载对应 USRP 硬件的 FPGA bitstream 和固件。
-
当你插入 B200/B210/X310 等设备时,会自动加载合适的 FPGA 镜像。
7.获取最新版源码:
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g
cd ~/openairinterface5g
git checkout develop
-
克隆 OAI 5G 源码到
~/openairinterface5g
。 -
切换到
develop
分支(这是 OAI 最新的开发分支,包含 gNB/UE 的更新)。
8.安装依赖:
cd ~/openairinterface5g/cmake_targets
./build_oai -I
-
./build_oai -I
→ 自动安装 OAI 编译和运行所需的软件包(比如 FFTW3、libboost、libuhd、libconfig 等)。 -
这一步确保编译环境干净。
这一步如果挂了梯子,可能会出现网络问题:
原因是我们常用的代理不支持 apt 导致的
解决办法:可以临时禁用apt的代理,让apt不走代理:
sudo -E env "http_proxy=" "https_proxy=" apt update
然后重新执行。
9.安装 nrscope 依赖:
sudo apt install -y libforms-dev libforms-bin
-
nrscope
是 OAI 自带的一个可视化工具,用来画 PHY 层信号(时域/频域波形)。 -
这个包安装
XForms
库,是nrscope
的 GUI 依赖。
10.编译 OAI gNB + UE:
cd ~/openairinterface5g/cmake_targets
./build_oai -w USRP --ninja --nrUE --gNB --build-lib "nrscope" -C
-
-w USRP
→ 指定目标硬件是 USRP(会启用 UHD 支持)。 -
--ninja
→ 使用ninja
构建,比make
更快。 -
--nrUE
→ 编译 NR-UE(5G UE) 可执行程序。 -
--gNB
→ 编译 NR-gNB(5G 基站) 可执行程序。 -
--build-lib "nrscope"
→ 同时编译 nrscope 工具。 -
-C
→ 先清理旧的构建,再重新编译。
完成环境搭建后,可以连接USRP进行验证和测试了,这里采用官方所给的示例进行验证。
1.将两块USRP分别连接到gnb和ue(USB连接)
2.在核心网和gnb端:
(1)新建终端,运行核心网:
cd ~/oai-cn5g
docker compose up -d
(2)新建终端,启动gnb:
cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 -E --continuous-tx
-
./nr-softmodem
→ OAI 的 gNB (NR 基站) 可执行程序。 -
-O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
→ 指定 gNB 的配置文件(官方自带了很多配置文件)。 -
--gNBs.[0].min_rxtxtime 6
→ 设置 最小收发切换时间(单位符号数),适配 B210 这种 USB3 接口的设备,避免上行/下行切换过快导致丢包。 -
-E
→ 启用 TDD 模式(Time Division Duplex),因为 band78 (FR1 n78, 3.5GHz) 是 TDD 频段。 -
--continuous-tx
→ 让 gNB 持续发射信号(主要是 SSB/同步信号),方便 UE 搜网和接入。如果不用这个参数,gNB 可能只在特定周期发射,导致 UE 不容易同步上来。
运行后等待初始化完成,随后出现:
表示gnb启动成功。
3.在ue端:
(1)新建终端,运行nr_ue:
cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --ue-fo-compensation -E --uicc0.imsi 001010000000001
-
./nr-softmodem
→ OAI 的 NR UE(终端)可执行程序。 -
-r 106
→ PRB 数 = 106 (20 MHz 带宽),必须和 gNB 配置文件一致。 -
--numerology 1
→ Subcarrier Spacing = 30 kHz (μ=1),必须和 gNB 配置文件一致。 -
--band 78
→ NR Band = n78 (3.5 GHz TDD 频段),和 gNB 一致。 -
-C 3619200000
→ 中心频率 = 3.6192 GHz,对应 gNB 配置文件里的downlink_frequency
。 -
--ue-fo-compensation
→ 启用 UE 的频偏补偿功能,修正 USRP B210 等硬件的晶振误差,避免因频偏导致不同步。 -
-E
→ 启用 TDD 模式(band 78 是 TDD)。 -
--uicc0.imsi 001010000000001
→ 指定 UE 使用的 IMSI(必须和核心网 HSS/UDM 里预先配置的订阅一致)。这里 IMSI001010000000001
是 OAI 默认提供的测试 SIM 卡参数。如果用户将核心网里IMSI变更,那这里也要改。
运行后等待初始化完成:
随后ue端出现:
gnb端出现:
表示连接成功。注意此时只是进行了连接,并没有任何用户层面数据的传输。
接下来使用ping命令进行测试:
在ue端新建终端输入:
ping 192.168.70.135 -I oaitun_ue1
注:192.168.70.135
对应容器:oai-ext-dn(
即外部数据网络 DN),
ping 这个容器的 IP,实际上就是在验证 UE→UPF→DN 的数据路径。
ping通说明连接成功。
此时gnb端会发生变化:
注意到LCID 4的值随着ping的同时在发生变化。
gnb端总体参数解读:
-
Frame.Slot 512.0
/640.0
:时间位置(方便对时序定位)。 -
UE RNTI c9c5 CU-UE-ID 1 in-sync
:UE 已同步并被识别,RNTI(gnb对ue分配的临时标识)是c9c5
。 -
PH 30 dB
:Power Headroom ≈ 30 dB(UE 发射功率有很大余量)。 -
PCMAX 20 dBm
:UE 配置的最大发射功率。 -
average RSRP -105 (16 meas)
:下行 RSRP(下行信号强度)平均 -105 dBm(偏弱,但可用)。 -
UL-RI 1, TPMI 0
:上行秩 1,单流传输(如果是2则表示双流传输),TPMI是UE 上行使用的预编码矩阵(天线权重),告诉 gNB 如何解码信号,0表示默认的单天线模式。 -
下行统计:
dlsch_rounds 124/0/0/0 ... dlsch_errors 0 ... BLER 0.00000
→ 下行首传成功、无错误、BLER ≈ 0。 -
上行统计:
ulsch_rounds 2107/0/0/0 ... ulsch_errors 0 ... BLER 0.00000
→ 上行也非常干净、无重传。 -
MCS (0) 0
→ MCS(调制方式和编码率)被固定为最低档(QPSK),决定传输速率。 -
NPRB 5
→ 每次调度只分配 5 个 PRB(资源非常少)。 -
SNR 34.5 dB
→ 上行 SNR 很好,无线质量非常好,理论上应该能跑 256QAM。 -
CCE fail
→ PDCCH 解码(或调度)失败次数。 -
MAC:这是 MAC 层统计,显示从 UE 侧收发的总字节数。
-
LCID 1:SRB1,用来传输 RRC/NAS 信令,体现控制面信息交换。
-
LCID 2:在 OAI 中可能对应 SRB2(备用的信令承载),没用到,所以是 0。
-
LCID 4:DRB(Data Radio Bearer),用来传输用户面数据(IP 流量),比如 ping 包、少量上层业务等。
到此,整体核心网以及gnb/ue就初步搭建完成。
接下来可以在 UE(或 oaitun_ue1 对应的主机)上运行 iperf3 客户端,远端启动 iperf3 server,进一步测试大流量传输,还能考虑对gnb.sa.band78.fr1.106PRB.usrpb210.conf进行适当调整,同时
UE 端也可以将命令参数写为 my-ue.conf 配置文件进行启动。
更多推荐
所有评论(0)