调试prplmesh指南

前提:安装ubuntu虚拟机

本文使用的linux发行版本:Ubuntu 20.04.6 LTS

1 安装依赖

安装相关依赖包

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install vim git unzip curl binutils cmake gcc bison curl flex gcovr binutils autoconf autogen libtool psmisc ebtables iproute2
sudo apt-get install libjson-c-dev libncurses-dev libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev pkg-config
sudo apt-get install libevent-dev libyajl-dev libreadline-dev lua5.1 liblua5.1-0-dev  bridge-utils net-tools uuid-runtime
sudo apt-get install python3 python3-yaml python python-yaml clang-format ninja-build build-essential

2 下载、编译、安装prplmesh

下载prplmesh

git clone https://gitlab.com/prpl-foundation/prplmesh/prplMesh.git && cd prplMesh

编译prplmesh

sudo cmake -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../build/install -H. -B../build -G Ninja

编译完成后提示如下

-- /home/shan/Documents/build/common/beerocks/bcl
Preparing bcl for the linux platform
Preparing btl for the linux platform
-- Inherited /home/shan/Documents/prplMesh/framework/tlvf/tlvf.py ...
-- Running /usr/bin/python3;/home/shan/Documents/prplMesh/framework/tlvf/tlvf.py;/home/shan/Documents/prplMesh/common/beerocks/tlvf/src;/home/shan/Documents/prplMesh/common/beerocks/tlvf/yaml;/home/shan/Documents/prplMesh/common/beerocks/tlvf/AutoGenerated;-c;/home/shan/Documents/prplMesh/common/beerocks/tlvf/tlvf_conf.yaml --print-dependencies...
-- Generating Beerocks TLVF files...
Preparing beerocks_agent for the linux platform
Preparing beerocks_fronthaul for the linux platform
Preparing bml for the linux platform
Preparing beerocks_cli for the linux platform
Preparing beerocks_controller for the linux platform
-- Configuring done (9.8s)
-- Generating done (0.1s)
-- Build files have been written to: /home/shan/Documents/build

如果提示出现错误,则删除googletest相关文件后再次编译

sudo rm -rf ../build/googletest-*
sudo cmake -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../build/install -H. -B../build -G Ninja

安装prplmesh

sudo ninja -C ../build install

进入script目录

cd ../build/install/scripts

启动prplmesh,默认启动controller+agent模式

sudo ./prplmesh_utils.sh start

一共3种模式,其它启动模式如下

1、agent模式

sudo sed -i 's/PRPLMESH_MODE="CA"/PRPLMESH_MODE="A"/' ./prplmesh_utils.sh && sudo ./prplmesh_utils.sh start

2、controller模式

sudo sed -i 's/PRPLMESH_MODE="CA"/PRPLMESH_MODE="C"/' ./prplmesh_utils.sh && sudo ./prplmesh_utils.sh start

3、controller+agent模式

sudo sed -i 's/PRPLMESH_MODE="CA"/PRPLMESH_MODE="CA"/' ./prplmesh_utils.sh && sudo ./prplmesh_utils.sh start

启动后有提示如下:

start
./prplmesh_utils.sh: start
prplmesh_framework_init - starting ieee1905_transport process...
IEEE1905 Transport Process Start
prplmesh_agent_start - start beerocks_agent process...
19:14:57 logger.cpp[144]: Configuration file does not existBeerocks Agent Process Start
2023-09-13 19:14:57,312 ERROR [default] cfg_get_hostap_iface: unknown iface index: 2
2023-09-13 19:14:57,312 ERROR [default] cfg_get_all_prplmesh_wifi_interfaces: failed to get wifi interface for agent2
2023-09-13 19:14:57,312 ERROR [default] cfg_get_hostap_iface: unknown iface index: 3
2023-09-13 19:14:57,312 ERROR [default] cfg_get_all_prplmesh_wifi_interfaces: failed to get wifi interface for agent3
INFO: No radio interfaces are available

说明:
prplmesh编译完成后
1、在build/install/bin下有5个可执行文件

beerocks_agent  beerocks_cli  beerocks_controller  beerocks_fronthaul  ieee1905_transport

2、在build/install/config下有3个配置文件

beerocks_agent.conf  beerocks_controller.conf  framework_logging.conf

3、在build/install/lib下有13个动态依赖库

bcl、bml、bpl、btl、btlvf、bwl、elpp、ieee1905_transport_lib、ieee1905_transport_messages、mapfcommon、nbapi、prplmesh_hostapd、tlvf

4、根据prplMesh/documentation/prplMesh-infra-agent.pptx,agent涉及的lib库有

bcl、tlvf(tfl)、btl、bwl、bpl(pal)

5、除了控制台的调试信息外,在/tmp/beerocks/logs下还有prplmesh运行的日志记录
6、在/tmp/beerocks下有一个Unix domain socket文件,名为uds_broker

3 调试代码

修改代码进入prplMesh目录,运行

sudo ninja -C ../build install && cd ../build/install/scripts/
sudo sed -i 's/PRPLMESH_MODE="CA"/PRPLMESH_MODE="A"/' ./prplmesh_utils.sh && sudo ./prplmesh_utils.sh start

可以在prplMesh目录下建立一个shell脚本,修改代码后一键编译运行

path=$(pwd)
sudo ninja -C ../build install && cd ../build/install/scripts/
sudo sed -i 's/PRPLMESH_MODE="CA"/PRPLMESH_MODE="A"/' ./prplmesh_utils.sh && sudo ./prplmesh_utils.sh start
cd ${path}

运行:

source ./start.sh

查看prplmesh运行日志

cd /tmp/beerocks/logs

4 设置虚拟无线网卡(可选)

如果没有外接usb无线网卡,可通过mac80211_hwsim模拟网卡

modprobe mac80211_hwsim
sudo iw phy0 interface add wlan0 type station
sudo iw phy1 interface add wlan1 type station
sudo iw phy2 interface add wlan2 type station
sudo ip link set wlan0 up
sudo ip link set wlan1 up
sudo ip link set wlan2 up
sudo brctl addbr br-lan

5 修改无线网卡的名称(可选)

如果插入外接usb无线网卡后,输入ifconfig或ip link显示的网卡名不是wlan0,而是类似wlxc01c302fef5d这样的名称,可以使用如下命令修改

sudo vim /etc/default/grub

将其中的GRUB_CMDLINE_LINUX的值设置为net.ifnames=0 biosdevname=0

RUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

然后更新grub并重启

sudo update-grub
reboot

再次输入ifconfg,可以看到网卡名称已改变

wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500ether c0:1c:30:2f:ef:5d  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/666497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java swing——创建对话框JDialog

之前我们讲了怎么建立一个简易的窗口&#xff0c;链接&#xff1a;http://t.csdnimg.cn/l7QSs&#xff0c;接下来继续讲解窗口的进阶。 对话框 上一篇文章中我们讲到了JFrame是一种顶层容器&#xff0c;本文接下来介绍其余的顶层容器。 跟JFrame一样&#xff0c;&#xff0c;这…

C/C++ 回调函数 callback 异步编程

一、C语言的回调函数 1.小试牛刀 #include <iostream> using namespace std; #include <memory> #include <stdlib.h>int add(int a, int b) {return a b; }void test01() {// 函数指针可以指向任何类型的函数&#xff0c;只要函数的参数列表和返回值类型…

如何结合ChatGPT生成个人魔法咒语词库

3.6.1 ChatGPT辅助力AI绘画 3.6.1.1 给定主题让ChatGPT直接描述 上面给了一个简易主题演示一下&#xff0c;这是完全我没有细化的提问&#xff0c;然后把直接把这些关键词组合在一起。 关键词&#xff1a; 黄山的美景&#xff0c;生机勃勃&#xff0c;湛蓝天空&#xff0c;青…

厕所革命与可持续发展的“九牧方案”

人类文明的历史&#xff0c;就是厕所的革命史&#xff0c;小小的厕所里&#xff0c;承载着大故事。 2015 年&#xff0c;印度一个名叫娜尔的女孩&#xff0c;因为丈夫不愿意在家盖厕所&#xff0c;向法庭提出了离婚申请&#xff0c;由此引发了全印度“无厕所&#xff0c;无新娘…

从零开始 TensorRT(2)Python 篇:原生 API 构建网络

前言 学习资料&#xff1a; TensorRT 源码示例 官方文档&#xff1a;Working With TensorRT Using The Python API 官方文档&#xff1a;TensorRT Python API 官方文档&#xff1a;CUDA Python B站视频&#xff1a;TensorRT 教程 | 基于 8.6.1 版本 B站视频配套代码 cookbook …

OSG帧渲染,如何实现自定义动画效果

看到这个标题,老司机可能会想到OSG动画相关的内容,比如osg::AnimationPath类和osg::AnimationPathCallback类,这些动画类,可以实现按照一定的插值方式,生成路径,物体对象按照生成的路径或者预先指定的路径来完成相应的动作的动画。 路径动画有三种动画模式,分别为单摆环…

幻兽帕鲁服务器游戏版本怎么升级更新?

哈喽大家好&#xff0c;我是咕噜美乐蒂&#xff0c;很高兴又见面啦&#xff01; 幻兽帕鲁&#xff08;Monster Hunter: World&#xff09;是一款热门的多人在线游戏&#xff0c;玩家可以在服务器上与其他玩家一起探险、狩猎怪物。为了保持游戏的平衡性和提供更好的游戏体验&am…

【百度Apollo】探索创新之路:深入了解Apollo开放平台

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…

docker部署RedisCluster集群简单介绍

本文介绍自己建立一个redis-cluster集群的实践&#xff0c;三主三从&#xff0c;使用docker搭建。 其实搭建很简单&#xff0c;就是建立6个容器&#xff0c;每个容器配置不同的端口号&#xff0c;其他的都是一样的。 假设建立6个端口号分别为 5555到5560。 配置文件 port 5…

redis相关问题

面试官&#xff1a;什么是缓存穿透 ? 怎么解决 ? 候选人&#xff1a; 嗯~~&#xff0c;我想一下 缓存穿透是指查询一个一定不存在的数据&#xff0c;如果从存储层查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到 DB 去查询&#xff0c;可能导致 D…

树莓派突然不能ssh远程连接的踩坑记录及解决方案

在家研究树莓派&#xff0c;远程连接树莓派吃了不少苦&#xff0c;总是一些意想不到的问题出现&#xff0c;明明昨天还能远程连接&#xff0c;今天又不能了。经过一系列排查&#xff0c;终于锁定&#xff1a; 因为我之前设置的树莓派的静态ip地址&#xff0c;但是可能因为是家…

ai创作软件有哪些?这5个软件了解一下

ai创作软件有哪些&#xff1f;随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;在各个领域都展现出了惊人的实力。特别是在内容创作领域&#xff0c;AI技术已经成为了助力创作者们提高效率、释放创意的得力助手。今天&#xff0c;我们将为大家介绍五款AI创作…

开源模型应用落地-业务优化篇(四)

一、前言 经过线程池优化、请求排队和服务实例水平扩容等措施,整个AI服务链路的性能得到了显著地提升。但是,作为追求卓越的大家,绝不会止步于此。我们的目标是在降低成本和提高效率方面不断努力,追求最佳结果。如果你们在实施AI项目方面有经验,那一定会对GPU服务器的高昂…

软件工程(最简式总结)

目录 第一章:概述 1.软件危机的表现原因 2.常见的软件开发方法包括&#xff1a; 3.软件工程基本原则 4.软件工程三要素 5.设计模式的分类 6.针对变换型数据流设计步骤 7.针对事务型数据流设计步骤 第二章&#xff1a;软件过程 1.软件生命周期 2.软件过程模型 &…

视觉惯性SLAM系列——ORB-SLAM3的重定位线程(Relocalization Thread)(九)

ORB-SLAM3的重定位线程&#xff08;Relocalization Thread&#xff09;&#xff08;九&#xff09; 重定位线程&#xff08;Relocalization Thread&#xff09;在ORB-SLAM3系统中扮演着关键的角色&#xff0c;尤其是在跟踪丢失的情况下。这个线程的主要任务是在相机失去当前轨迹…

flask_django_python五金电商网络营销的可视化分析研究

前面部分完成了系统需求分析&#xff0c;了解到新闻数据业务方面的需求&#xff0c;系统主要分为用户管理、五金信息管理、在线留言、系统管理等功能。销的可视化研究&#xff0c;并对这些数据进行处理&#xff0c; 然后对这些数据进行可视化分析和统计。 Python 爬虫技术目前来…

Element-plus之el-upload上传图片后回显,以及将回显的图片再次上传

在实际的业务中往往需要把提交但尚未上传的图片显示回前端&#xff0c;等待上传&#xff0c;以下方法是将提交后的图片回显的方法 <template><el-uploadaction"/api/imageContainer/saveOrUpdate"accept"image/bmp,image/jpeg,image/jpg,image/png,ima…

优雅的从HuggingFace下载模型

1. 下载全部文件 以下都以下载bloom模型为例 git lfs install git lfs clone https://huggingface.co/bigscience/bloom-7b1这种方式下载会显示下载的进度及网速&#xff0c;因此一般推荐使用这种方式下载。如果直接使用git clone https://huggingface.co/bigscience/bloom-7…

【云计算】opentack的高级服务部署与调优

opentack的高级服务部署与调优 swift 对象存储 安装 Swift 服务。安装完成后&#xff0c;使用命令创建一个名叫 examcontainer 的容器&#xff0c;将 cirros-0.3.4-x86_64-disk.img 镜像上传到 examcontainer 容器中&#xff0c;并 设置分段存放&#xff0c;每一段大小为 10…

js数组和字符串之间的转换方式以及数组的一些方法

一、数组和字符串之间的转换方式 1&#xff09;将字符串切割成字符串数组—stringObject.split(separator, howmany) seperator-----字符串、正则表达式&#xff0c;必需 howmany------指定返回的数组的最大长度&#xff0c;可省略&#xff0c;省略后全量返回 源代码 var str&q…