1. 环境准备与基础概念
在开始搭建5G端到端仿真平台之前,我们需要先理解几个关键组件的作用。free5GC是一个开源的5G核心网实现,相当于5G网络的大脑;OAI gNB是基站(类似4G时代的eNodeB);OAI nrUE则是用户设备模拟器。这三个组件组合起来,就能模拟真实的5G网络环境。
我推荐使用Ubuntu 20.04 LTS版本,这个版本经过社区验证兼容性最好。硬件配置建议至少4核CPU、8GB内存和50GB硬盘空间,如果条件允许,使用物理机比虚拟机性能更好。我曾经在虚拟机里测试时遇到过时钟同步问题,后来改用双物理机部署才解决。
安装前需要准备的依赖项包括:
- 基础工具链:
build-essential、cmake、git - 开发库:
libsctp-dev、libyaml-dev - 网络工具:
net-tools、iproute2
用以下命令一键安装:
sudo apt update && sudo apt install -y build-essential cmake git libsctp-dev libyaml-dev net-tools iproute22. free5GC核心网部署
free5GC的安装分为控制面和用户面两部分。控制面负责信令处理,用户面(UPF)负责数据转发。我遇到过UPF无法启动的问题,后来发现是内核模块加载问题,需要特别注意。
首先克隆代码库:
git clone --recursive -b v3.2.0 https://github.com/free5gc/free5gc.git cd free5gc编译前需要安装Golang环境。建议使用Go 1.18+版本:
wget https://go.dev/dl/go1.18.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc关键一步是安装gtp5g内核模块,这是UPF正常工作所必需的:
git clone -b v0.6.1 https://github.com/free5gc/gtp5g.git cd gtp5g make sudo make install编译完成后,启动核心网服务:
cd ~/free5gc make ./run.sh验证核心网是否正常运行:
curl http://localhost:8000/api/nf-instances应该能看到返回的JSON数据。如果遇到端口冲突,可以修改config/目录下的配置文件。
3. OAI gNB基站编译与配置
OAI的编译选项很多,新手容易混淆。我建议首次尝试时使用RF模拟器模式(SIMU),这样不需要额外硬件。
获取源码并切换稳定分支:
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git cd openairinterface5g git checkout 2023.w36安装依赖时有个小技巧:使用参数-I会自动安装所需依赖,但国内用户可能需要更换apt源:
./build_oai -I -w SIMU --gNB --ninja编译gNB和nrUE:
./build_oai --gNB --nrUE -w SIMU --ninja配置文件位于targets/PROJECTS/GENERIC-NR-5GC/CONF/目录。重点修改:
- plmn_list中的MCC/MNC(需与free5GC一致)
- amf_ip_address设为free5GC服务器IP
- 接口名称和IP地址
示例配置片段:
plmn_list = ({ mcc = 466; mnc = 92; mnc_length = 2; }); amf_ip_address = ( { ipv4 = "192.168.1.100"; preference = "ipv4"; });4. OAI nrUE用户设备配置
nrUE的配置需要与核心网中的用户数据匹配。在free5GC的Web界面(通常为http://localhost:5000)添加用户时,要确保以下信息一致:
- IMSI:466920000000001
- 密钥(K):8baf473f2f8fd09487cccbd7097c6862
- OPC:8e27b6af0e692e750f32667a3b14605d
nrUE的启动参数很关键,特别是频段和频率设置。对于Band78的仿真:
cd cmake_targets/ran_build/build sudo RFSIMULATOR=127.0.0.1 ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa常见问题排查:
- 如果出现"PBCH解码失败",检查gNB和nrUE的频段配置是否一致
- "RRC连接超时"通常意味着AMF地址配置错误
- 使用
--phy-test模式可以快速验证射频链路
5. 端到端联调测试
当所有组件都启动后,可以通过以下步骤验证:
- 在free5GC控制台查看AMF日志,确认UE注册成功
- 在gNB终端查看调度信息,应有类似输出:
[PHY] DL Scheduling: frame 100, slot 2, UE 0, MCS 16, PRB 50- 在nrUE端执行ping测试:
ping -I oaitun_ue1 8.8.8.8性能优化技巧:
- 调整
min_rxtxtime参数改善时延 - 使用
--parallel-config PARALLEL_SINGLE_THREAD减少上下文切换 - 在物理机上禁用CPU节能模式
6. 常见问题解决方案
问题1:UPF无法创建GTP隧道解决方法:
sudo modprobe gtp5g lsmod | grep gtp5g # 确认模块加载问题2:AMF拒绝UE注册检查点:
- 确认UE的IMSI已在free5GC注册
- 核对gNB配置中的PLMN与核心网一致
- 检查时间同步(NTP服务)
问题3:射频链路不稳定尝试调整发射功率:
sudo ./nr-softmodem ... --txgain 75 --rxgain 120问题4:Docker环境冲突如果使用Docker版free5GC,需要配置网络:
docker network create --subnet=192.168.100.0/24 oai-net7. 进阶配置与监控
对于想深入研究的开发者,可以:
- 使用Wireshark抓包分析NGAP协议
sudo apt install wireshark sudo wireshark -k -i any -f 'port 38412'- 启用详细日志
./nr-softmodem ... --log_config.global_level debug- 性能监控指标
- gNB侧:
cat /proc/net/dev | grep oaitun - 核心网侧:
curl http://localhost:9090/metrics
- Kubernetes部署(生产环境推荐)
kubectl apply -f https://raw.githubusercontent.com/free5gc/free5gc-k8s/master/deployments/base.yaml这套平台虽然复杂,但通过分步实施和充分测试,完全可以搭建出可用的5G实验环境。我在实际项目中用它验证过网络切片和边缘计算方案,效果很好。关键是要有耐心,遇到问题时多查社区讨论和issue记录。