设备: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 里预先配置的订阅一致)。这里 IMSI 001010000000001 是 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 配置文件进行启动。


之前5G核心网的搭建笔记:https://blog.csdn.net/zwj202101/article/details/151082150?fromshare=blogdetail&sharetype=blogdetail&sharerId=151082150&sharerefer=PC&sharesource=zwj202101&sharefrom=from_link

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐