OpenLTE开源代码结构解析(二)

2023-05-16

对eNodeB的一些配置以及代码结构进行说明,如下:

一,eNodeB配置结构

|| 控制进程(传递eNB配置命令)|| ---》  || eNB按照配置进程的配置命令工作 ||

1,  在一个Tab窗口运行LTE_fdd_eNodeB进程(启动eNodeB工作进程)

2,  在另一个Tab窗口运行控制进程,可使用连接工具(Telent,nc等)连接LTE_fdd_eNodeB进程(端口固定为30000,以Telnet连接本机示例,使用命令为Telnet 127.0.0.1 30000)来完成配置操作,包括启动,终止LTE_fdd_eNodeB进程中的基站操作,读取,设置基站操作中需要的参数;


 二,代码重要实体层说明

2.1 Interface层

eNB提供的接口,处理来自外部的配置命令;

2.2 MsgQ实体

提供统一的消息管理实体,对于各个协议层的消息进行处理,接收,存储,发送;

2.3 Radio层

1,  Radio的Start函数创建线程(radio_thread)来处理数据帧收发;在线程函数中会调用Phy层实体的radio_interface接口来处理上,下行数据,在radio_interface中会进一步地包含上,下行处理,在处理上下行数据中,当对user data进行处理时,会用到dl_sched_mutx锁:

Dl_sched_mutex_lock()

Dl_sched_mutex_unlock()

2.4 Phy层

Start函数中会定义对于Mac数据处理的接口,在进而处理下行调度类型数据时,会应用线程锁:

boost::mutex::scoped_lock lock(dl_sched_mutex)

2.5 Rb协议实体

1,Msg会包含Rb的指针,指向特定的Rb

1,  一个UE只会定义一定数据的RB实体(最多3个SRB,8个DRB),每个RB中会为每个协子层定义一个消息队列(如,RRC,PDCP,RLC,MAC);

Rb_Id的填写在gw协议实体中完成,目前代码中作了简化处理,在gw层只会填写id=1:gw将rb_id会被填写进消息中,并一直在包含在后续pdb流中各个的协议实体间传递:

Gw->pdcp->rlc->mac

2,  当前处理协议子层m从传递的消息中查询到RB后,从RB中取出对应当前处理协议子层m队列中的消息数据,按照当前处理协议子层m的处理机制进行处理,然后再次处理完成后的消息数据单元(下一相邻子层的SDU)存储到RB定义的对应到下一协议子层n的消息数据队列中;并构造消息头传递到协议子层定义的与下一相邻子层n通信的m_n_olmq中下一相邻协议子层n接收到来m的消息后,会触发hand_m_msg的操作,也是处理消息头,取SDU,处理完后再构造下一层的SDU,再向下一协议层发送消息触发下一层的处理,例如,rlc处理完本协议层的操作后向mac层发送消息操作:

LTE_fdd_enb_msg::send(rlc_mac_olmq, **)

3,  直到消息到了mac层,处理方式有不同:

1,  rb_id需要转换为mac_id,处理方式有不同:

sdb_ready->rb->get_rb_id()

2,  上层发下来的SDB数据处理后,只是会存储在scheduler队列中,如下:

Add_to_dl_sched_queue

         不会主动向phy层发送消息,phy层会基于phy层的机制来触发mac层的调度机制,进而从调度队列中依次取出PDU进行发送;

2.6 User实体

管理用户的参数属性;例如标识,能力,承载等;

2.7  安全机制

Eia算法

33220中KDF算法如下:

         Derivedkey = HAMC-SHA-256(Key,S)

在Security中使用sha2_hmac实现:

在代码中好像没有对up面生成的key使用,而且只是保存在Hss中,有些疑问:

用户面的key使用终点是基站,应该保存基站侧才合适;



 三,实体之间交互

3.1 Radio与Phy实体之间交互

Radio_thread->radio_thread_func->radio_interface(此函数是由Phy层提供,并且此处是通过while(循环一直调用))->process_dl/process_ul

其中,UL发送到MAC的帧;DL调用radio中的send(调用uhd的tx-stream)进行发送

Phy类中定义的成员boost::interprocess:message_queue*phy_mac_olmq用来承载Phy给MAC层传递的消息(包括各种类型物理信道(PRACH,PUSCH,PUCCH)的解码后的内容以及一种全称为read_to_send的消息),此处重点说明一下ready_to_send消息,即Phy层处理完了上行或者下行子帧的发送,需要告知MAC层其已经等待好处理下一子帧;MAC层通过读取phy_mac_olmq进行获取发送的消息;当获取到消息类型为read_to_send时,则会执行调度操作,主要为配置子帧资源;

3.2 MessageQueue举例

上层通过send函数向该queue中发送message,主要操作过程如下:

a)      Phy层实例化对象:mac_comm_msgq=newLTE_fdd_end_msgq(“mac_phy_olmq”,cb);

b)      Mac层定义了boost对象mac_phy_olmq,再向该对象队列中发送消息:

1)  mac_phy_olmq->send(&msg_sizeof(msg),0)

2)  LTE_fdd_enb_msg::send(mac_phy_olmq;

 

Phy层在实例化mac_comm_msgq对象时,会调用回调函数:

Messageq->receive_thread->callback(即handle_mac_message,并且callback直到接收到Interface发送的Stop参数的消息才终止处理)->handle_dl_schedulehandle_ul_schedule 其中:

Handle_dl_schedule处理下行调度相关操作,主要是将MAC中Scheduler函数中已经组装好的帧拷贝到具体的位置;并提供给后续process_dl函数中封装user_data时使用,有以下代码操作:

memcpy(&pdcch.alloc[pdcch.N_alloc],&dl_schedule[subfn].ul_allocations.alloc[i],

handle_ul_schedule的目的是为了封装phich。因为phich的封装需要基于MAC层的调度信息。有以下Comment:

           for(i=0; i<ul_schedule[ul_subframe.num].decodes.N_alloc; i++)

           {

                // Determine PHICH indecies

 3.3 LTE_fdd_enb_msgq对象Msgq与boost对象olmq

层m为与相邻n层交互,需要定义一个m_n_olmq,并向m_n_olmq发送消息数据;n层会定义一个相应的m_comm_mesq(实例化的时候,其string名称即为m_n_olmq),这样n层在m_comm_mesq中即可获取来自m层的消息数据:

具体操作如下实例:

在协议层mac层中实例化boost对象:

Mac_phy_olmq = newboost::interprocess::message_queue(boost::interprocess:open_only *

 

在Phy层中msgq定义如下:

         Mac_comm_msgq= new LTE_fdd_enb_msgq(“mac_phy_olmq”,cb);

在后续msgq(专用类)的处理操作receive_thread中,通过msgq的string name对应到”mac_phy_olmq”这个boost:

Boost::interprocess::message_queue mq(boost::interprocess::open_only,msgq->msgq_name.c_str());

 


未完待续。。。欢迎各位也在关注这个项目的朋友指点交流~

 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenLTE开源代码结构解析(二) 的相关文章

  • 使用乐鑫 Web IDE 助力物联网开发

    乐鑫 Web IDE 是基于 Eclipse Theia 的框架 xff0c 支持 ESP IDF VS Code 插件同时具备多项辅助工具 您可以观看我们在 Espressif DevCon22 上的演示视频 xff0c 了解它的实际应用
  • Rust + 嵌入式:强力开发组合

    Rust 的由来 Rust 编程语言的灵感诞生于一次意外 2006年 xff0c 当 Graydon Hoare 回到位于温哥华的公寓时 xff0c 发现电梯又因为软件崩溃出了故障 住在 21 楼的他无奈爬楼时 xff0c 不禁心想 xff
  • ESP32 应用实践:ethernet 转 WiFi 实现

    一 xff1a 简介 Ethernet 转 WiFi 用于实现以太网口的设备通过 WiFi 进行无线互联 将从设备 发出的 802 3 帧数据转化为 802 11 帧数据发送出去 xff0c 接收到的 802 11 帧数据转换为 802 3
  • ESP8266/ESP32 相关问题初步排查方法

    一 更多开发细节请访问 ESP 开发参考链接 二 故障排查 三 当前已发布文章 外设 Peripherals ESP32 ESP32 ULP 协处理器简介和汇编编译环境设置 ESP32 ULP 协处理器在低功耗模式下操作 RTC GPIO
  • ESP32 低功耗方案设计

    ESP32 低功耗方案概述 ESP32 在内置 Deep sleep 低功耗模式 RTC 外设和 ULP 协处理器的支持下 xff0c 可以满足多种应用场景下的低功耗需求 当 ESP32 进入 Deep sleep 模式时 xff0c 所有
  • 树莓派开机自动连接WiFi 及树莓派设置固定IP地址

    树莓派实现自动驾驶小车第二步 树莓派开机自动连接WiFi 树莓派设置固定IP地址 xff08 内有树莓派连不上WiFi的奇怪bug及解决方案 树莓派开机自动连接WiFi 第一步我们已经通过有线ip ssh连接到树莓派了 xff0c 开启VN
  • 关于51单片机不显示串口号的问题

    项目场景 xff1a 普中科技烧录软件查询不到串口号问题 问题描述 本人设备型号是普中科技的HC6800 xff0c 在安装好烧录软件 xff0c 电脑与单片机连接完成时 xff0c 发现烧录软件查询不到串口号 原因分析 xff1a 1 烧
  • Linux:git报错 - git-lfs filter-process: git-lfs: command not found

    在pull远程主分支代码时 xff0c 出现了如下错误 xff1a git span class token operator span lfs span class token builtin filter span span class
  • WIN10Linux子系统WSL2.Ubuntu18.04环境下ROS-Melodic安装与测试

    WIN10Linux子系统WSL2 Ubuntu18 04环境下ROS Melodic安装与测试 xff0c 待完善 一 首先是WSL2 Ubuntu18 04的安装二 通过xfce4 VcXsrv实现图形化界面1 WIN10安装VcXsr
  • TX 下常用的查询指令

    查看Jetson TX2 L4T版本 head n 1 etc nv tegra release 查看系统版本 cat etc lsb release 查看系统l内核 uname a 查看内存 free m 查看CPU详情 lscpu 查看
  • ubuntu远程桌面控制另一台电脑:teamviewer或VNC.附带远程rviz打不开解决方法

    远程控制方案 xff1a 1 xff1a teamviewer xff1b 2 xff1a VNC 43 vnc viewer xff1b 3 xff1a VNC 43 系统自带桌面共享 1 xff0c 搜索ubunutu安装teamvie
  • 《控制论导论》读书:基本概念

    前言 本系列读书笔记主要来自W R Ashby的 控制论导论 一书 该书最先成于上个世纪60年代 xff0c 如今已绝版且未再版 Ashby本人对控制论在生物医学领域的应用有深入的研究 xff0c 该书也进行了一定阐释 作为一个对复杂系统理
  • 每周五条-002

    2020 4月第4周 职场 假如开发人员 耍大牌 xff0c 十有八九是井底之蛙 xff0c 盲目自大 产品 产品不能一直靠人手动维护它正常运作 xff0c 一定要让客户自己有功能来解决实际问题 有些一时找不到原因的异常问题习惯了软件公司自
  • visual svn修改新url地址方法(linux,windows,centos)

    在工作环境调整时 有的时候SVN服务器的地址需要修改 xff0c 此时我们如何修改本地库的地址 xff0c 而不用重新下载呢 xff1f SVN中有一个简单的解决办法 xff1a 1 环境为windows7 在工作复本的根目录上右键 gt
  • 小公司项目经理的一天,记录我普通的一天

    团队5人 xff0c 电子商务Web项目 xff0c 前段时间离职2人 xff0c 尚未补充 xff0c 手下现有一个开发组长 一个程序员 一个美术设计 一个运营专员 xff0c 还算一个完整的战斗单位 直接汇报对象 xff0c 几乎是老总
  • 关于ASP.NET木马ASPXSPY的初步处理研究

    前段时间服务器中了木马了 xff0c 经过排查 xff0c 截获了ASPXSPY木马 该木马是用ASP NET写的 xff0c 为了知己知彼 xff0c 就将木马拷到本地运行研究 xff0c 发现功能真的很强大 xff0c 自认为服务器设置
  • 身于“乱世”,我们程序员应该如何打算?

    不仅要低头拉车 xff0c 还要抬头看路 在周末夜深人静的时候就要思考一下人生 此 乱世 虽非战火纷飞 民不聊生的彼乱世 xff0c 但是整个社会的观感确实让人不得不焦虑 xff1a 不断飞涨的物价 xff0c 让买猪肉鸡蛋都觉得有压力 x
  • 开发人员流失之痛和团队重建之困

    最近笔者正在经历人员流失和团队重建的难题 xff0c 趁周末整理一下思路 xff0c 准备重整旗鼓 今年也算是多事之秋 xff0c 作为公司一员 xff0c 于公于私都有些坐不住了 面对开发人员 xff08 当然其他部门也有辞职 一个一个的
  • 从电影《三傻大闹宝莱坞》看IT新手应如何学习?

    三傻大闹宝莱坞 电视上又在放 xff0c 又看了一遍 xff0c 觉得很赞 很喜剧 很有意义 很励志 追求卓越 xff0c 成功将不穿裤子追着你跑 代替富翁主人儿子去读大学的兰乔在学校干了很多离经叛道的事情 xff0c 由此也产生了许多爆笑
  • 程序员,2012,不再生活在别处

    2011走到了尽头 xff0c 这一年有太多事情值得去书写和记忆 xff1a 浪漫的自行车户外婚礼 xff0c 历尽艰辛迎来了小宝宝 xff0c 整个部门业绩比去年增长了几倍 阳春三月 xff0c 黄道吉日 xff0c 在一群年轻朝气的自行

随机推荐

  • RTX, uCOS-II, FreeRTOS embOS, uCOS-III的综合性能PK

    这5款OS的PK主要分为以下四个方面 1 FLASH和RAM的需求对比 2 功能对比 3 实时性对比 4 安全性对比 1 FLASH和RAM的需求对比 RTX uCOS II FreeRTOS embOS uCOS III FLASH lt
  • 当段子手已经hi起来的时候,产品经理也来瞎逼逼一下faceid

    苹果发布会后 xff0c 各种段子满天飞 xff0c 着实热闹了一把 比较经典的包袱是 xff1a 老婆被老公刷脸 xff1b 被打成熊猫后没法报警 xff1b 韩国人没法用 xff1b 比较正式的疑问是 xff1a 双胞胎怎么办 xff1
  • SQL 2005安装时报已经安装了同名实例的问题解决。(无法正确卸载干净时最管用)

    最近重装SQL2005 xff0c 卸载后报 SQL 2005此计算机上已经安装了同名实例 说明原来的安装没有卸载干净 需要按照如下办法 1 停止服务 停止所有与SQL Server相关的服务 2 清楚残留的安装 使用windows ins
  • .NET Reflector 7.6.1.824安装及破解(刚试了,绝对能用)

    首先下载在这里http download csdn net detail gattaca2011 4578752 xff0c 不要到官网去了 xff0c 因为官网已经是8 0了 然后就是安装 xff0c 运行注册机 xff08 注意断网 x
  • 稍微冷门一点的经验,phpnow不能打开默认页的问题处理

    因为本地调试项目需要 xff0c 需要使用 phpnow 下载安装都很简单 xff0c 可是安装后127 0 0 1显示不出默认页 xff0c 而且一直处于加载状态 尝试 开始以后是一个网卡绑定了多个IP的问题 xff0c 于是移除多个IP
  • 每周五条-001

    2019 第2周 忙碌而焦虑 1 微信 微信支付服务商帐号是不能收款的 xff0c 如果同一个公司已经是服务商 xff0c 也不能在该服务商下创建本身的普通商户号 解决办法直接申请普通商户号 2 微信 听了两天的公开课 xff0c 最大的感
  • OpenWrt 学习笔记【1】LEDE17 安装huawei E8372

    写在前面的话 xff1a 路由器本身刷了LEDE后只是作为千兆交换机和手机wifi共享器 家中光线猫位置尴尬 xff0c 被关在入户的接线盒里 xff0c 信号差的一塌糊涂 xff0c 本来只是在luci界面直接尝试路由器自身2 4Gwif
  • Python3.6.2 pip install 报 【Fatal error in launcher: Unable to create process using ' " ' 】

    win10pro 原来的同事装了3 6 x xff0c 但是啥库都没安 xff0c 另一台自己的电脑原先安过需要的库 xff08 如h5py xff0c tf xff0c mkl等等 xff09 直接一波操作打压缩包拷过去解压覆盖 xff0
  • Keras2.2.2离线安装依赖包依赖Keras2.1.6解决方法。

    离线使用pip install 本地的whl包 xff0c 结果发现keras2 2 2安装失败 xff0c 照着提示依赖找到了Keras Applications 1 0 4与Keras Preprocessing 1 0 2 xff0c
  • 系统时间【linux基础】

    基础tip 备忘 who命令 1 xff09 who b 查看最后一次系统启动的时间 xxxxx 64 XXXXX who b system boot 2019 02 10 20 15 2 xff09 who r 查看当前系统运行时间 xx
  • TF踩坑笔记

    遇到领导要求出demo xff0c 尬 xff0c 好久没撸ML了 xff0c 工作两年信息流打杂 xff0c 以前也就叶公好龙毕业前VS编译了一波caffe跑了几个demo xff0c 尬出天际 xff0c 这两天踩坑不少 xff0c 留
  • MDK Trace功能

    RealView MDK可以轻松实现TRACE功能 针对ARM Cortex M3内核的芯片 xff0c 只需要要RealView MDK软件和ULINK2仿真器就可以直接实现TRACE功能 xff0c 不需要额外的TRACE硬件仿真器支持
  • 史上最快速的安装Tensorflow方法

    pip install i https pypi tuna tsinghua edu cn simple tensorflow 这里修改成自己需要安装的框架
  • 软件工程师面试经典问题

    大部分内容来自 高质量C 43 43 C 编程指南 和 嵌入式程序员应知道的0x10个问题 的补充整理 1 如何避免重复包含头文件 xff1f 答 xff1a 使用 ifndef define endif 2 include lt file
  • ubuntu18.04安装Realsense D435i 摄像头的SDK和ROS Wrapper

    1 安装参考链接 2 报错链接 3 没有找到rgbd launch 无法定位软件包
  • 写论文感悟

    无论最终结果怎么样 xff0c 这段过程值得纪念 xff0c 经常上的学术论坛是小木虫 xff0c 主要关注的版面是 xff1a 学术交流区 文献求助区 硕博家园 1 文献阅读和管理经验 xff0c 见 xff1a http muchong
  • ubuntu下python版本如何切换

    添加版本python版本管理 shell里执行 xff1a sudo update alternatives install usr bin python python usr bin python2 100 sudo update alt
  • Python函数的参数传递以及是否会改变外部变量的值

    这个问题是由听课时的例子引出的 xff1a 二分查找的递归实现 xff0c 以下是烂代码 xff1a 除去递归实现 xff0c 代码中参数传递的错误一言难尽 Python参数传递 1 如果没有将外部变量传递到函数中 xff0c 函数内部可以
  • OpenLTE开源代码结构解析(一)

    跟踪了一个在将开源组织 OpenLTE xff08 将4G通信网络LTE开源 xff09 xff0c 现将自己梳理整理的一些文档Post出来 xff0c 请有相同兴趣的朋友指点 xff1a 一 xff0c 系统介绍 OpenLTE是一位Mo
  • OpenLTE开源代码结构解析(二)

    对eNodeB的一些配置以及代码结构进行说明 xff0c 如下 xff1a 一 xff0c eNodeB配置结构 控制进程 xff08 传递eNB配置命令 xff09 eNB按照配置进程的配置命令工作 1 xff0c 在一个Tab窗口运行L