OAI 5G-NR源码架构
创始人
2025-01-08 05:34:07
0

OAI 5G-NR源码架构

1 特性范围

目前gNB5G-NRUE支持如下的配置:

  • 工作模式:TDD
  • CP长度:Normal CP
  • 子载波间隔: 30kHz
  • 信道带宽:40MHz(106PRB)、80MHz(217PRB)、100MHz(237PRB)
  • 天线端口:单波束
  • 时隙格式:14 OFDM符号
  • 编码方式:LDPC、polar

2 gNB源码解析

2.1 代码框架时序图

gNB源码主框架图如下图所示:

在这里插入图片描述

**Main:**主进程,主要功能包括:

1) 命令行参数解析

2) 系统配置文件解析

3) 各子层初始化工作,包括重要数据结构、接口初始化工作

4) 线程初始化,gNB管理线程、包括RRC层处理线程、rx/tx处理线程、传输网接口线程、x2口交互线程

5) 射频phy层及RU单元初始化及配置工作

6) 物理层算法模块数据初始化

7) 用户面数据业务缓存开辟

gNB_app_task:gNB管理线程,主要功能包括:

1) gNB主要数据结构初始化 RCconfig

2) MAC层与PHY层的P5&P7接口初始化,回调函数注册

3) 调用P5接口向RRC发送承载配置命令

4) 处理核心网下发的一些消息

5) 处理各种超时处理消息等

rrc_gnb_taskRRC处理线程,主要功能包括:

1) RRC配置消息处理,如果支持NSA方式,还需要处理MN设备发送的RRC重配置消息。

2) 双连接副站添加相关处理

3) 随机接入消息处理(Msg3,Msg4)

4) 测量相关处理

5) 系统消息处理

sctp_eNB_task:传输网接口线程,主要功能包括:

1) NG口连接建立相关的消息处理

2) 与F1AP 控制面的消息处理(包括CU和DU两部分)

ru_threadrx/tx处理线程,主要功能包括:

1) RU设备库加载

2) 上行流程处理,包括PHY、MAC、RLC、PDCP

3) 下行流程处理, 包括PHY、MAC、RLC、PDCP

2.2 重要函数及过程

2.2.1 主进程

Main() [nr-softmodem.c]

  1. get_options()

通过解析命令行参数来对系统做配置。

重要的数据结构:RAN_CONTEXT_t, 存储gNb实例、macrlc实例、L1实例,RU实例信息。

  1. netlink_init()

  2. init_pdcp()

  3. create_gNB_tasks(1)

起来几个主要线程

a.itti_create_task(TASK_GNB_APP, gNB_app_task,NULL):

1) L1配置信息初始化

2) 完成对phy层、rlc子层、PDCP子层的初始配置工作,若支持noS1模式,还要读取rrc子层的配置信息。

3) 初始化MAC与PHY之间的接口,回调函数注册:

Nr_ul_indication:层2上行接收接口函数,当物理层从空口接收到上行数据,经过物理层过程后将会触发该函数将解码后的数据pdu上送至MAC层

**nr_phy_config_request:**系统参数配置入口处理函数。在SA模式下,系统读取初始化配置文件,然后将其传送给RRC层,RRC层根据配置文件信息形成RRC message(如:SI系统消息),在5G NR NSA模式下,其接收的配置消息基本上就是MIB以及服务小区从X2接口传来的重配置消息。

nr_schedul_response:MAC与PHY的下行接口处理函数。该函数可对MAC层下行pdu进行调度,包括MIB、PRACH消息、rrc消息业务数据pdu以及一些半动态配置消息,并根据调度结果生成DCI。

4)configure_nr_rrc:初始化RRC实体,生成rrc配置消息,包括物理层及射频单元配置。通知RRC处理线程。

b.itti_create_task(TASK_SCTP, sctp_eNB_task,NULL):

​ gNB NG-C的接口线程,也可作为F1-C的接口。

c.itti_create_task(TASK_X2AP, x2ap_task,NULL):

X2接口线程

d.itti_create_task(TASK_RRC_GNB, rrc_gnb_task,NULL)

​ RRC子层的处理线程,主要应包括系统消息、随机接入的Msg3、Msg4相关处理、一些测量相关消息处理

  1. init_gNB()

注册MAC层与PHY层接口回调函数:Nr_ul_indication、nr_phy_config_request、nr_schedul_response(详细描述见4)。

  1. wait_gNBs()

此处采用了停等的模式。至此,系统参数配置以及生效,phy及mac层以上子层均完成初始配置工作。

  1. init_NR_RU()

1) 射频单元参数初始化。主要参数包括:uhd driver地址、类型、同步时钟源,接收增益,参考信号能量等。

2) 回调函数注册,主要回调有:

ru->fh_south_in:RU与phy的上行接口处理函数

ru->fh_south_out:RU与phy的下行接口处理函数

ru->feptx_ofdm:射频前端处理函数

ru->feprx :射频前端处理函数

3) init_RU_proc():空口线程管理,此处起了gNB上下行处理的主线程ru_thread

  1. wait_RUs()

此处采用线程同步方式(pthread_cond_signal(&RC.ru_cond),RC.ru_mask)。至此,包括射频单元在内的所有模块初始配置工作完成。

  1. init_eNB_afterRU()

1) 初始化物理层算法模块使用的数据表格、配置物理层处理过程的一些关键参数

2) 回调函数注册:gNB_top, gNB上/下行数据处理入口函数。

3) 为ULSCH/DLSCH开辟存储buffer

  1. 至此,所有RU单元及gNB实体ok,发送同步信号(pthread_cond_broadcast(&sync_cond))通知所有处理线程可以开始上/下行数据处理。

2.2.2 ru_thread线程

  1. nr_init_frame_parms()

这里计算了空口帧的许多重要参数信息,包括每帧的时隙数、每子帧的时隙数、每个时隙的符号数、每帧的采样点数、每个时隙的点数、接收/发送天线数、频率范围、帧类型、子载波间隔等信息。

  1. fill_rf_config()

根据numerology及PRB配置信息得到系统的信道带宽及采用率等信息上下行频点,天线tx_gain,rx_gain等信息

  1. nr_phy_init_RU()

初始化与phy层的接口buffer

  1. openair0_device_load()

加载RF设备库

  1. 线程同步,启动RF设备,开始正常的接收发送

  2. 上行处理流程

  3. 下行处理流程

2.2.3 rrc_gnb_task线程

RRC子层处理线程

  1. RRC配置/重配置

接收gNB管理线程的rrc配置消息NRRRC_CONFIGURATION_REQ,调用init_NR_SI,该函数最终会调用P5接口对底层设备进行配置。如下图所示:
在这里插入图片描述

  1. 副站添加

接收X2接口发送的副站添加消息X2AP_ENDC_SGNB_ADDITION_REQ

2.2.4 随机接入过程

  1. preamble接收

调用函数L1_nr_prach_procedures()在上行PRACH信道上接收preamble,最多能检测到64个preamble。获取preamble序列,找到当前root序列下的preamble循环偏移位置,计算输出检测到的pramble的TA(时间调整值)和能量。

选取能量最大的preamble

gNB->UL_INFO.rach_ind.number_of_pdus = 1, 发起随机接入流程

  1. 初始化发起随机接入

handle_nr_rach()

调用nr_initiate_ra_proc()

将状态改为 ra->state = Msg2

初始化随机接入过程

  1. 发送RAR

nr_schedule_RA()

nr_generate_Msg2()生成Msg2,分别处理DCI,PDCCH,PDSCH设置,

赋值tx_req

在发送时隙,调用phy_procedures_gNB_TX()

生成DCI

执行PDCCH、PDSCH过程

将状态改为 ra->state = WAIT_Msg3

  1. Msg3接收

调用nr_schedule_reception_msg3()存储msg3主要信息(ul_req):包大小,包地址,当前帧号和时隙。

ifi->NR_Schedule_response[回调函数:nr_schedule_response]

调用函数handle_nfapi_nr_ul_dci_pdu 解出ul dci

调用函数nr_fill_ulsch()根据dci找到ulsch位置

在物理层接收主函数phy_procedures_gNB_uespec_RX 中调用函数nr_ulsch_procedures()

调用函数nr_ulsch_decoding()得到解码后的mac_pdu

rx_ind.number_of_pdus++ , crc_ind.number_crcs++

mac上行接收主函数中调用nr_rx_sdu()

3 接口

3.1 nFAPI(P5 &P7)

3.1.1 架构

FAPI提供了MAC层与PHY层之间的接口,实现了phy层与mac层的分离,其接口架构如下图所示,其中P5口主要用于传送静态配置信息,P7口主要用来传送数据和半动态配置信息。

在这里插入图片描述

3.1.2 过程

如上图所示,MAC层从命令行或配置文件获取系统配置参数,然后将其传送至RRC层,RRC层会通过P5接口触发nr_phy_config_req()对PHY及RU进行配置。在5G NR NSA方式下,RRC子层接收从X2接口来的主校区rrc重配置消息。

对于半动态配置消息以及用户面数据信息的传送,MAC层与PHY层之间使用P7接口,对于上行数据,触发nr_ul_indication();对于下行数据,触发nr_schedule_response()

NR_UL_INDICATION

NR_SCHEDULE_RESPONNSE

TX_REQ

携带从MAC层到 PHY 层的 PDU.

RX_IND

携带从PHY层到MAC层的 PDU

相关内容

热门资讯

为了进一步!微信小程序免费黑科... 为了进一步!微信小程序免费黑科技透视,新道游app辅助器教材教程(有挂规律)1、玩家可以在微信小程序...
如何分辨真伪!新超凡软件辅助,... 【福星临门,好运相随】;如何分辨真伪!新超凡软件辅助,微乐陕西小程序脚本,新版2025教程(原来有开...
实测发现!微乐贵阳捉鸡麻将挂软... 您好:微乐贵阳捉鸡麻将挂软件这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用...
带你了解!牛总管一定要牛辅助,... 带你了解!牛总管一定要牛辅助,雀友会潮汕图片辅助器,wepoke教程(原来有开挂辅助神器)是一款可以...
推荐十款!爱玩联盟辅助下载,悟... 推荐十款!爱玩联盟辅助下载,悟空大厅微信辅助,解说技巧(原来有开挂辅助黑科技);推荐十款!爱玩联盟辅...
最新技巧!雀友会辅助潮汕麻将脚... 最新技巧!雀友会辅助潮汕麻将脚本,微信小程序微乐怎么才能发好牌,2025版教程(原来有开挂辅助助手)...
玩家亲测!欢乐达人脚本,wep... 玩家亲测!欢乐达人脚本,wepoker插件下载,科技教程(原来有开挂辅助app);作为系统规律正版授...
推荐攻略!悟空大厅辅助助手下载... 推荐攻略!悟空大厅辅助助手下载安装,hhpoker是正规的吗,揭秘教程(原来有开挂辅助器);是一种具...
玩家必看!花花生活圈私人局辅助... 玩家必看!花花生活圈私人局辅助器,新青鸟辅助,高科技教程(原来有开挂辅助器);AI辅助机器人普及解说...
技术分享!兴动平台辅助下载,财... 技术分享!兴动平台辅助下载,财神十三张脚本辅助,wepoke教程(原来有开挂辅助挂);最新版2026...