WLS

WLS来源:https://docs.o-ran-sc.org/projects/o-ran-sc-o-du-phy/en/latest/wls-lib.htmlWls_lib是英特尔开元的一个无线服务

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

来源:

https://docs.o-ran-sc.org/projects/o-ran-sc-o-du-phy/en/latest/wls-lib.html

Wls_lib是英特尔开元的一个无线服务库,支持实现gNb或eNb的应用程序使用的共享内存和缓冲区管理。该库使用DPDK、libhugetlbfs和pthreads,通过从DPDK的角度共享相同的内存区域,在二级应用程序、API转换器模块和一级应用程序之间提供无内存的数据交换。

Project Resources

The source code is avalable from the Linux Foundation Gerrit server:
https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fphy.git;a=summary  —- 可以自选一个snapshot查看源码实现

https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fphy.git

 

Library Functions 基本库函数

WLS_Open() and WLS_Open_Dual() that open a single or dual wls instance interface and registers the instance with the kernel space driver.
WLS_Close(), WLS_Close1() closes the wls instance and deregisters it from the kernel space driver.
WLS_Ready(), WLS_Ready1() checks state of remote peer of WLS interface and returns 1 if remote peer is available.
WLS_Alloc() allocates a memory block for data exchange shared memory. This block uses hugepages.
WLS_Free() frees memory block for data exchange shared memory.
WLS_Put(), WLS_Put1() puts memory block (or group of blocks) allocated from WLS memory into the interface for transfer to remote peer.
WLS_Check(), WLS_Check1() checks if there are memory blocks with data from remote peer and returns number of blocks available for “get” operation.
WLS_Get(), WLS_Get1() gets memory block from interface received from remote peer. Function is a non-blocking operation and returns NULL if no blocks available.
WLS_Wait(), WLS_Wait1() waits for new memory block from remote peer. This Function is a blocking call and returns number of blocks received.
WLS_WakeUp(), WLS_WakeUp1() performs “wakeup” notification to remote peer to unblock “wait” operations pending.
WLS_Get(), WLS_Get1() gets a memory block from the interface received from remote peer. This Function is blocking operation and waits till next memory block from remote peer.
WLS_VA2PA() converts virtual address (VA) to physical address (PA).
WLS_PA2VA() converts physical address (PA) to virtual address (VA).
WLS_EnqueueBlock(), WLS_EnqueueBlock1() This function is used by a master or secondary master to provide memory blocks to a slave for next slave to master (sec master) transfer of data.
WLS_NumBlocks() returns number of current available blocks provided by master for a new transfer of data from the slave.
The _1() functions are only needed when using the WLS_Open_Dual().

Building and Installation

Retrieve the source files from the Linux Foundation Gerrit server:
https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fphy.git;a=summary
  1. cd wls_lib
  2. wls_lib$ ./build.sh xclean
  3. wls_lib$ ./build.sh

The shared library is available at wls_lib/lib

This library is used by the ODUHIGH, shin layer implementing a 5G FAPI to IAPI translator and the ODULOW components.

Please define an environment variable DIR_WIRELESS_WLS with the path to the root folder of the wls_lib as it is needed for the fapi_5g build process.

编译依赖DPDK,需要编译好DPDK lib提供基本的rte静态库和头文件。

 

下载最新的节点,看看里面都用了啥?

phy-81a0969.tar.gz

 

wls_lib 下 Makefile

ifeq ($(RTE_SDK),)   #依赖dpdk的编译结果
$(error “Please define RTE_SDK environment variable”)
endif
# Default target, can be overridden by command line or environment
RTE_TARGET ?= x86_64-native-linuxapp-icc   # 默认英特尔的 ICC 我们可以设置成 gcc
RTE_OUTPUT = ${PWD}

include $(RTE_SDK)/mk/rte.vars.mk
SRCS-y := wls_lib_dpdk.c syslib.c  # 实现代码都在这2个C文件中
SHARED = libwls.so  # 输出动态库

CFLAGS +=-Wall -fstack-protector
EXTRA_CFLAGS +=-g
include $(RTE_SDK)/mk/rte.extshared.mk  #依赖dpdk的环境变量设置

##############################################################

wls_initialize

初始化由 RTE_PROC_PRIMARY 进程执行

 

rte_memzone_reserve_aligned

多申请sizeof(wls_drv_ctx_t)保存上下文信息;该wls_drv_ctx_t信息是保存在数据位尾部分

pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
if (ret = pthread_mutex_init(&mng_ctx->mng_mutex, &attr)) {
PLIB_ERR(“Failed to initialize mng_mutex %d\n”, ret);
pthread_mutexattr_destroy(&attr);
return ret;
}
pthread_mutexattr_destroy(&attr);

 

pWls_us=wls_create_us_ctx

初始化队列

SFL_DefQueue(&pUsCtx->ul_free_block_pq, pUsCtx->ul_free_block_storage,
UL_FREE_BLOCK_QUEUE_SIZE * sizeof (void*));
WLS_MsgDefineQueue(&pUsCtx->get_queue, pUsCtx->get_storage, WLS_GET_QUEUE_N_ELEMENTS, 0);
WLS_MsgDefineQueue(&pUsCtx->put_queue, pUsCtx->put_storage, WLS_PUT_QUEUE_N_ELEMENTS, 0);

 

sem_init(&pUs_priv->sema.sem

将 pWls_us 返回给用户

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168128.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何用python做图像处理_python判断窗口是否存在

    如何用python做图像处理_python判断窗口是否存在质量、速度、廉价,选择其中两个提到图像处理第一个想到的库就是PIL,全称PythonImagingLibraryPython,图像处理类库,它提供了大量的图像操作,比如图像缩放,裁剪,贴图,模糊等等,很多时候它需要配合numpy库一起使用1.open()你可以使用Image.open打开一个图像文件,它会返回PIL图像对象image=Image.open(image…

    2022年10月14日
  • 直线段检测法(LSD)

    直线段检测法(LSD)直线段检测法(LSD)1简介2算法介绍3.算法简述感谢观看:)本文仅用于个人学习/复习1简介LSD是一种线段检测算法,该方法号称是能在线性时间(linear-time)内得到亚像素级准确度的直线段检测算法。LSD的目标在于检测图像中局部的直的轮廓,这也是我们称之为直线分割的原因。2算法介绍LSD直线检测方法首先计算每个像素点的水平线(level-Line)角度,从而形成了一个水平线场,即单位矢量场,这里像素点的水平线角度就是该点梯度方向的垂直角度,如下图所示,而水平线场就是一个与图像中的点一一对应

  • react脚手架有哪些_vue脚手架3搭建项目

    react脚手架有哪些_vue脚手架3搭建项目前言如何快速搭建一个httprunner项目呢?我们可以使用脚手架,脚手架就是自动地创建一些目录,形成一个项目的架构,不需要我们再手动的去创建查看创建新项目的命令先来查看一下帮助命令httpr

  • bceloss和bcewithlogitsloss_binary cross entropy

    bceloss和bcewithlogitsloss_binary cross entropyBCELosstorch.nn.BCELoss(weight=None,size_average=None,reduce=None,reduction=‘mean’)评价预测值与真值的BinaryCrossEntropyl(x,y)=L={l1,l2,…lN}T,ln=−ωn[ynlogxn+(1−yn)log(1−xn)]l(x,y)=L=\{l_1,l_2,…l_N\}^T,l_n=-\omega_n[y_nlogx_n+(1-y_n)log(1-x_

  • API接口签名验证

    API接口签名验证

    2021年10月13日
  • js获取当前系统时间

    js获取当前系统时间js获取当前年,月,日,时分秒,季度,星期几

    2022年10月18日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号