[O-RAN] OAI 5G + OpenXG核心网 部署

本文详细描述了如何在Ubuntu22.04服务器上部署O-RAN核心网、基站及UE,包括配置中科大源、切换低延迟内核、安装必要的依赖、部署gNB和nrUE,以及OpenXG精简核心网的配置。过程中列举了可能遇到的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[O-RAN] OAI 5G + OpenXG核心网 部署

本文档基于OAI官方部署文档并结合实际遇到的问题进行编写,实现在一台服务器上同时运行核心网、基站、UE。本次部署基于PowerEdge R740服务器并使用Ubuntu22.04 LST版本进行搭建。

前置工作

Ubuntu22.04 LST版本下载地址:https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-desktop-amd64.iso

换源(中科大源)

# 备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑
sudo vim /etc/apt/sources.list

# 中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

# 更新
sudo apt-get update

配置git代理

由于代码中需要克隆很多GitHub仓库,配置代理速度较快

# 设置代理
git config --global http.proxy http://proxy.example.com:8080
git config --global https.proxy https://proxy.example.com:8080

# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

# 查看代理
git config --get --global http.proxy
git config --get --global https.proxy

切换低延迟内核

依据OAI官方软件配置教程,部署O-RAN平台需要低延迟Linux内核,参考网络上内核切换文档将Ubuntu内核切换为5.15.0-91-lowlatency低延迟内核。修改grub文件,使得系统启动时自动切换为低延迟内核。grub中对应的修改位置如下:

# 注释掉默认启动配置
# GRUB_DEFAULT=0
# 添加新的启动配置,默认启动低延迟内核,具体查询指令参考内核切换文档
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-91-lowlatency"

切换高性能模型

由于部分基站对性能要求较高,且运行对处理器主频较为敏感,因此需要切换到高性能模式并关闭睿频。

修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"后添加两行

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=disable"
GRUB_CMDLINE_LINUX_DEFAULT="processor.max_cstate=1 intel_idle.max_cstate=0 idle=poll"

在文件/etc/modprobe.d/blacklist.conf最后添加blacklist intel_powerclam

依次执行

sudo apt-get install cpufrequtils
sudo cpufreq-set -c $core_number -g performance
sudo apt install linux-tools-common linux-tools-lowlatency linux-tools-${version}-lowlatency
sudo vim /etc/default/cpufrequtils
# 在打开的文件中添加
GOVERNOR=“performance”
# 安装i7z
sudo apt-get install i7z

最后BIOS中关闭超线程(Hyper-threading)和C-State。

查看CPU主频,如果所有内核超过99%处在C0模式下则成功。

image-20240116174154914

如果没有成功再运行如下命令,然后在通过i7z检查:

sudo cpupower idle-set -D 2

部署5G基站(gNB)

本文档基于OAIC仓库Commit: 2b717d49200d05c9e14a297d6375b3a4eacaff65进行部署。

安装UHD

# https://files.ettus.com/manual/page_build_guide.html
sudo apt install -y autoconf automake build-essential ccache cmake cpufrequtils doxygen ethtool g++ git inetutils-tools libboost-all-dev libncurses5 libncurses5-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

git clone https://github.com/EttusResearch/uhd.git ~/uhd
cd ~/uhd
git checkout v4.6.0.0
cd host
mkdir build
cd build
cmake ../
make -j $(nproc)
make test # This step is optional
sudo make install
sudo ldconfig
sudo uhd_images_downloader

编译OAI gNB和OAI nrUE

# Get openairinterface5g source code
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g
cd ~/openairinterface5g
git checkout 2b717d49200d05c9e14a297d6375b3a4eacaff65

# Install OAI dependencies
cd ~/openairinterface5g/cmake_targets
sudo ./build_oai -I -w SIMU

# nrscope dependencies
sudo apt install -y libforms-dev libforms-bin

# Build OAI gNB
cd ~/openairinterface5g
source oaienv
cd cmake_targets
sudo ./build_oai -w SIMU --nrUE --gNB -C  # -w参数选择运行设备类型,本处所有设备都使用一台服务器模拟,因此选择SIMU模式

测试gNB

cd ~/openairinterface5g
source oaienv
cd cmake_targets/ran_build/build
sudo -E ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --noS1 --nokrnmod 1 --gNBs.[0].min_rxtxtime 6 --rfsim --sa

运行后没有停止或报错,最后等待UE接入,即gNB运行成功,截图如下

image-20240117185451408

核心网部署(OpenXG)

本项目使用OpenXG精简核心网进行部署,该核心网基于Docker进行开发管理。项目基于OpenXG仓库Commit:1c31be682d222e6ed4e508c9c52044606c85b1b8进行部署开发。并参考官方文档进行部署。

克隆源码并安装相关依赖(不必按照文档单独配置网桥)

git clone http://git.opensource5g.org/openxg/openxg-5gcs-release.git ~/openxg-5gcs-release
cd ~/openxg-5gcs-release/scripts
./install.sh -I

注释掉openxg-5gcs-release/docker-compose/docker-3-network-element.yml文件中的端口配置信息(一共有两处,AMF 16、17和SPGWU 56、57)避免基站启动时报GTPU的错误。

系统运行

启动数据库

cd ~/openxg-5gcs-release/docker-compose
docker-compose -f docker-mysql.yml up -d

以上命令部署了phpmyadmin,通过访问http://本机ip:8080 可以打开。
用户名为:root,密码为:123456 用户sim卡信息在 Witcomm-DB数据库 users表中。添加新的用户需要提前在数据库中添加用户的信息(复制原来的用户变更imsi即可)。

配置基站

依据核心网配置文件(openxg-5gcs-release/etc目录下)AMF配置信息,将基站的运行配置参数修改为MCC = "466"; MNC = "92"; TAC = 100;

以RFsimulator运行模式下使用的配置文件gnb.sa.band78.fr1.106PRB.usrpb210.conf为例,共需要修改三处配置。

一、将基站的plmn配置修改为与核心网相同

# 第13行修改TAC
tracking_area_code  =  100;
# 第14行修改MCC、MNC
plmn_list = ({ mcc = 466; mnc = 92; mnc_length = 2; snssaiList = ({ sst = 1; }) });

二、修改基站的AMF配置参数,162行的amf_ip_address中的ipv4地址修改为docker-3-network-element.yml文件中AMF配置的IP地址

amf_ip_address      = ( { ipv4       = "172.11.200.14"; # 修改这行
                          ipv6       = "192:168:30::17";
                          active     = "yes";
                          preference = "ipv4";
                        }
                      );

三、修改基站的网卡配置,用于连接核心网服务。核心网网桥运行起来后会在本地创建一个名为docker-openxg的虚拟网卡,将170行中网卡配置信息修改为该网卡对应的名称和网络地址。

NETWORK_INTERFACES :
{
    GNB_INTERFACE_NAME_FOR_NG_AMF    = "docker-openxg"; # 修改
    GNB_IPV4_ADDRESS_FOR_NG_AMF      = "172.11.200.1/24"; # 修改
    GNB_INTERFACE_NAME_FOR_NGU       = "docker-openxg"; # 修改
    GNB_IPV4_ADDRESS_FOR_NGU         = "172.11.200.1/24"; # 修改
    GNB_PORT_FOR_S1U                 = 2152; # Spec 2152
};

启动核心网

cd ~/openxg-5gcs-release/docker-compose
docker-compose -f docker-3-network-element.yml up -d  #构建并启动容器

启动基站(RFsimulator模式)

cd ~/openairinterface5g
source oaienv
cd cmake_targets/ran_build/build
sudo -E ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --rfsim --sa

检查运行状态

观察AMF网元日志

docker logs -f amf  #查看amf日志

在AMF日志中基站接入,且基站运行中没有报错(基站报DJP error属于一个Bug,并不影响基站运行)终止则基站接入成功,AMF日志信息如下图所示。

image-20240119150934619

启动UE(RFsimulator模式)

按照openxg-5gcs-release/ci-scripts/etc/ue.yaml文件中UE的参数修改openairinterface5g/openair3/UICC/usim_interface.c文件中UICC的配置信息,主要需要修改imsi、key、opc、amf、dnn、imeisv参数。

cd ~/openairinterface5g
source oaienv
cd cmake_targets/ran_build/build
sudo -E ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa --rfsimulator.serveraddr 127.0.0.1

检查运行状态

观察运行状态,如果AMF日志中的基站接入信息、UE接入信息正常,基站运行正常,UE不闪退,则运行成功。运行情况如图所示。

image-20240119160528521

可能遇到的问题

部署运行gNB时可能碰到的问题

问题:执行sudo ./build_oai -I -w SIMU时无法克隆SIMDE(注:后续遇到的克隆相关的问题都可以通过这个方法解决)

修改openairinterface5g/cmake_targets/tools/build_helper文件

# 注释掉以下两行
$SUDO rm -rf /tmp/simde
git clone https://github.com/simd-everywhere/simde-no-tests.git /tmp/simde

# 在终端中运行克隆指令直到成功
git clone https://github.com/simd-everywhere/simde-no-tests.git /tmp/simde
问题:在最后运行的文件夹里面,找不到usrp。

解决:运行export UHD_IMAGES_DIR=/usr/share/uhd/images/,说明usrp镜像放置的位置不是oai默认位置,所以需要设置。

问题:子进程已安装pre-removal脚本 返回错误号1或2

解决:sudo gedit /var/lib/dpkg/status,然后找到Package:…,仅删除提示的包,不要多删,多删了按照提示补足

问题:子进程已安装post-installation脚本 返回错误号1或2

解决:sudo rm /var/lib/dpkg/info/vsftpd.*,存档后在进行操作就好

问题:未能找到images文件,请设置UHD_IMAGES_DIR环境变量,或者运行/usr/local/lib/uhd/tests/uhd_images_downloader.py

解决:这个问题首先检查下你的/usr/share/uhd/images/文件夹下有没有文件,或者说有没有images文件夹。没有的话在终端运行

sudo uhd_images_downloader

如果有images文件的话,只要设置环境变量即可,

运行export $UHD_IMAGES_DIR=/usr/share/uhd/images

之后打开主文件夹下的 .bashrc 文件,并把上面的命令添加到文件最后,保存后,重启电脑。(.bsahrc是个隐藏文件)

问题:unknown sample rate 61440000

解决:这个问题的原因还没找到,但是通过在运行gNB的命令中的配置文件后面添加 -E参数 即可解决,命令如下

sudo -E ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpb210.conf -E --noS1 --nokrnmod 1

问题:如果在运行gNB的时候总是会报[SCTP]或者[NGAP]的错误,这时候gNB还是会正常运行,并等待PDUCCH信号,但其实核心网并没有与gNB建立连接。一般情况下都是核心网的PLMN参数和TAC参数还有nssai参数与gNB的不匹配,所以链接不上。

解决:在docker-compose文件夹下,打开核心网的yaml文件(用不同的yaml文件,选择你运行的yaml文件),里面的MCC,MNC,SST,SD还有TAC(在enb中为tracking_area_code)这些参数,保持与基站的配置文件一致即可。

运行核心网链接gnb时可能出现的问题

问题:连接时GTPU显示地址已占用

解决:前面提到的核心网的yml文件中的端口没有删掉,为核心网的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值