当前位置: 首页 > news >正文

wfb-ng 锁定WiFi接口

wfb-ng 锁定WiFi接口

  • 1. 源由
  • 2. 需求
  • 3. 分析
  • 4. 步骤
    • 4.1 确认网卡MAC地址
    • 4.2 修改udev配置文件
    • 4.3 配置重载&重启
    • 4.4 确认逻辑网卡接口
    • 4.6 修改wfb-ng逻辑WiFi通信接口
  • 5. 参考资料
  • 6. 补充资料

为了更加方便的调试和使用wfb-ng软件,解决由于设备枚举发现时命名可能存在无法与硬件一一对应的问题,需要锁定实际硬件网卡与逻辑WiFi接口。

1. 源由

Raspberry Pi Zero W硬件本身自带一个WiFi网卡,其内置PCB天线的特殊性,仅能用于调试和近距离维护使用。
wfb-ng真正需要的是大功率发射的无线网卡,如果在设备发现阶段将设备逻辑WiFi接口自动命名为调试,那将会极大的影响传输距离和性能。

2. 需求

  • Raspberry Pi Zero W硬件自带WiFi网卡,用于调试维护。
  • 外置usb大功率无线网卡,用于远距离传输。

3. 分析

udev(userspace/dev)是Linux内核的设备管理器。作为devfsd和热插拔的继承者,udev主要管理/dev/目录中的设备节点。同时,udev还处理将硬件设备添加到系统或从系统中移除时引发的所有用户空间事件,包括某些设备所需的固件加载。

这里我们将使用到这软件来处理上述需求。

4. 步骤

因为网卡MAC地址是唯一的,因此用于绑定WiFi接口是不二之选。

4.1 确认网卡MAC地址

  • Raspberry Pi Zero W

板载WiFi:b8:27:eb:53:31:30
USB-WiFi:0c:91:60:03:5b:62

  • Raspberry Pi 3b+

板载WiFi:b8:27:eb:a6:3c:f3
USB-WiFi:20:0d:b0:32:da:3a

4.2 修改udev配置文件

  • Raspberry Pi Zero W
pi@piCamera:~ $ sudo nano /etc/udev/rules.d/75-wifi-interface-name-change.rulespi@piCamera:~ $ cat /etc/udev/rules.d/75-wifi-interface-name-change.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:27:eb:53:31:30", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="w*", NAME="wlan0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="0c:91:60:03:5b:62", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="w*", NAME="wfb-rf1"
  • Raspberry Pi 3b+
pi@piGs:~ $ sudo nano /etc/udev/rules.d/75-wifi-interface-name-change.rulespi@piGs:~ $ cat /etc/udev/rules.d/75-wifi-interface-name-change.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:27:eb:a6:3c:f3", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="w*", NAME="wlan0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="20:0d:b0:32:da:3a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="w*", NAME="wfb-rf1"

4.3 配置重载&重启

 $ sudo udevadm control --reload$ sudo reboot

4.4 确认逻辑网卡接口

  • Raspberry Pi Zero W
pi@piCamera:~ $ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 8  bytes 752 (752.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 8  bytes 752 (752.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0wfb-rf1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 2312ether 0c:91:60:03:5b:62  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 0wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.68.245  netmask 255.255.255.0  broadcast 192.168.68.255ether b8:27:eb:53:31:30  txqueuelen 1000  (Ethernet)RX packets 10380  bytes 873141 (852.6 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 9753  bytes 780746 (762.4 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • Raspberry Pi 3b+
pi@piGs:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.68.232  netmask 255.255.255.0  broadcast 192.168.68.255ether b8:27:eb:f3:69:a6  txqueuelen 1000  (Ethernet)RX packets 32  bytes 4708 (4.5 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 24  bytes 2705 (2.6 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 8  bytes 770 (770.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 8  bytes 770 (770.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0wfb-rf0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 2312ether 20:0d:b0:32:da:3a  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 0wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.68.231  netmask 255.255.255.0  broadcast 192.168.68.255ether b8:27:eb:a6:3c:f3  txqueuelen 1000  (Ethernet)RX packets 267  bytes 23990 (23.4 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 275  bytes 36457 (35.6 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4.6 修改wfb-ng逻辑WiFi通信接口

$ cat /etc/default/wifibroadcast
#WFB_NICS="wlx00c0caa578a9"
#WFB_NICS="wlan1 wlan2"
#WFB_NICS="wlan0"
WFB_NICS="wfb-rf2"

5. 参考资料

【1】RPI zero W doesn’t find wlanx interface on Release 23.01 image #287
【2】udev @Wikipedia
【3】An introduction to Udev: The Linux subsystem for managing device events
【4】write udev rules for changing network interface name
【5】wfb-ng Release 23.01镜像无头烧录&配置
【6】Raspbian镜像无头烧录
【7】the next generation of long-range packet radio link

6. 补充资料

  • 确认usb设备被识别到
$ dmesg|tail
[   97.293626] usb 1-1.4: new high-speed USB device number 3 using dwc_otg
[   97.423965] usb 1-1.4: config 1 interface 0 altsetting 0 endpoint 0x85 has an invalid bInterval 0, changing to 7
[   97.424424] usb 1-1.4: New USB device found, idVendor=0bda, idProduct=881a, bcdDevice= 0.00
[   97.424456] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[   97.424477] usb 1-1.4: Product: 802.11n NIC
[   97.424495] usb 1-1.4: Manufacturer: Realtek
[   97.424510] usb 1-1.4: SerialNumber: 123456
[ 5528.320934] 88XXau_wfb: loading out-of-tree module taints kernel.
[ 5528.639401] usbcore: registered new interface driver rtl88xxau_wfb
[ 5529.849054] rtl88xxau_wfb 1-1.4:1.0 wfb-rf1: renamed from wlan1
  • 确认88XXau_wfb驱动已经加载
$ lsmod |grep wfb
88XXau_wfb           1916928  0
cfg80211              782336  2 brcmfmac,88XXau_wfb
  • 确认内核版本
$ uname -r
5.15.84+

相关文章:

wfb-ng 锁定WiFi接口

wfb-ng 锁定WiFi接口1. 源由2. 需求3. 分析4. 步骤4.1 确认网卡MAC地址4.2 修改udev配置文件4.3 配置重载&重启4.4 确认逻辑网卡接口4.6 修改wfb-ng逻辑WiFi通信接口5. 参考资料6. 补充资料为了更加方便的调试和使用wfb-ng软件&#xff0c;解决由于设备枚举发现时命名可能存…...

Python所有方向的入门和进阶路线,20年老师傅告诉你方法

干了20多年程序员&#xff0c;对于Python研究一直没停过&#xff0c;这几天把我自己对Python的认知和经验&#xff0c;再结合很多招聘网站上的技术要求&#xff0c;整理出了Python所有方向的学习路线图&#xff0c;基本上各个方向应该学什么&#xff0c;都在上面了&#xff0c;…...

RLOAM/RO-LOAM

LOAM框架 LOAM框架包含三个步骤&#xff1a; Scan registration&#xff1a;从原始激光扫描点数据中提取点特征。点特征是角点或者面点。 odometry estimation&#xff1a;在特征提取之后&#xff0c;特征点传递到里程计模块&#xff0c;通过特征匹配和优化步骤计算相对坐标变…...

JUC并发编程之Semaphore-应用与深度源码剖析

目录 JUC并发编程之Semaphore-应用与深度源码剖析 1. Semaphore 是什么&#xff1f; 2.怎么使用Semaphore&#xff1f; 2.1构造方法 2.2 重要方法 2.3 基本使用 需求场景 基础版代码实现 tryAcquire()引入代码实现 acquireUninterruptibly(),acquire()对比代码实现 3.…...

JWT详细介绍使用

一、JWT介绍 JWT是JSON Web Token的缩写&#xff0c;即JSON Web令牌&#xff0c;是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息&#xff0c;以便于从资源服务…...

C/C++开发,无可避免的多线程(篇六).线程池封装类

一、线程池概念 线程池是一种多线程处理方式&#xff0c;它包含一个线程工作队列和一个任务队列。当有任务需要处理时&#xff0c;线程池会从线程工作队列中取出一个空闲线程来处理任务&#xff0c;如果线程工作队列中没有空闲线程&#xff0c;则任务会被放入任务队列中等待处理…...

HIVE中如何实现针对IPv6 CIDR的查询

Hive默认情况下不支持IPv6 CIDR查询,因为IPv6 CIDR查询需要使用一些额外的函数。 但是可以通过使用UDF(用户自定义函数)来实现这一点。 IPv6 CIDR表示为网络地址/前缀长度,其中网络地址是一个IPv6地址,前缀长度是一个介于0和128之间的整数,表示网络地址中前多少位是网络…...

【微信小程序】-- 生命周期(二十八)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…...

Kafka 概述

Kafka 概述Broker消费者Kafka 属于分布式的消息引擎系统&#xff0c;主要功能 &#xff1a;提供一套完备的消息发布与订阅解决方案 生产者和消费者都是客户端&#xff08;Clients&#xff09;&#xff1a; 生产者&#xff08;Producer&#xff09;&#xff1a;向主题发布消息…...

详解Java8中如何通过方法引用获取属性名/::的使用

在我们开发过程中常常有一个需求&#xff0c;就是要知道实体类中Getter方法对应的属性名称&#xff08;Field Name&#xff09;&#xff0c;例如实体类属性到数据库字段的映射&#xff0c;我们常常是硬编码指定 属性名&#xff0c;这种硬编码有两个缺点。 1、编码效率低&#x…...

0106广度优先搜索和最短路径-无向图-数据结构和算法(Java)

1 单点最短路径 单点最短路径。 给定一幅图和一个起点s&#xff0c;回答“从s到给定目的顶点v是否存在一条路径&#xff1f;如果有&#xff0c;找出其中最短的那条&#xff08;所含边数最少&#xff09;。“等类似问题。 深度优先搜索在这个问题上没有什么作为&#xff0c;因为…...

僵尸(Zombie)进程

文章目录1.僵尸进程2.产生僵尸进程的原因3.利用 wait 函数销毁僵尸进程4.使用 waitpid 函数销毁僵尸进程1.僵尸进程 进程完成工作后&#xff08;执行完 main 函数中的程序后&#xff09;应被销毁&#xff0c;但有时这些进程将变成僵尸进程&#xff0c;占用系统中的重要资源。这…...

JS实现:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

题目&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少&#xff1f; 数列是 1,1,2,3,5,8,13,21....观察可以看出来从第三个数字开始…...

Verilog如何编写一个基础的Testbench

本文将讲述如何使用Verilog 编写一个基础的测试脚本&#xff08;testbench&#xff09;。在考虑一些关键概念之前&#xff0c;先来看看testbench的架构是什么样的。架构包括建模时间、initial块&#xff08;initial block&#xff09;和任务&#xff08;task&#xff09;。此文…...

基于JavaEE社区物业管理系统开发与实现(附源码资料)

文章目录1. 适用人群2. 你将收获3.项目简介4.技术栈5.测试账号6.部分功能模块展示6.1.管理员6.2.业主1. 适用人群 本课程主要是针对计算机专业相关正在做毕业设计或者是需要实战项目的Java开发学习者。 2. 你将收获 提供&#xff1a;项目源码、项目文档、数据库脚本、软件工…...

问一下ChatGPT:DIKW金字塔模型

经常看到这张DIKW金字塔模型图&#xff0c;还看到感觉有点过份解读的图&#xff0c;后面又加上了insight&#xff0c;impact等内容。 Data&#xff1a;是数据&#xff0c;零散的、无规则的呈现到人们眼前&#xff0c;如果你只看到这些数字&#xff0c;如果没有强大的知识背景&a…...

javaScript基础面试题 ---闭包

闭包1、闭包是什么&#xff1f;2、闭包可以解决什么问题&#xff1f;3、闭包的缺点1、闭包是什么&#xff1f; 闭包是一个函数加上到创建这个函数的作用域的链接&#xff0c;就是一个作用域可以访问到另一个作用域的变量&#xff0c;闭包‘关闭’了函数的自由变量 function f…...

如何自定义您的网站实时聊天图标

实时聊天图标是您网站上的一个按钮&#xff0c;可在访问者单击时打开实时聊天。它代表了您的企业与客户沟通的门户。这是您的网站访问者与您联系、提出问题和接收个性化推荐的一种方式&#xff0c;聊天图标的设计最好是简单且引人入胜&#xff0c;个性化的图标往往更能提现企业…...

Vue侦听器Watch

31. Vue侦听器Watch 1. 定义 Watch是Vue.js提供的一个观察者模式&#xff0c;用于监听数据的变化并执行相应的回调函数。虽然计算属性Computed在大多数情况下更合适&#xff0c;但有时也需要一个自定义的侦听器Watch。因为在有些情况下&#xff0c;我们需要在状态变化时执行一…...

云快充研发中心平台架构师谈云原生稳定性建设之路

作者&#xff1a;吕周洋 大家好&#xff0c;我是来自云快充研发中心的平台架构师吕周洋&#xff0c;今天我给大家分享云快充云原生稳定性之路。 点击查看&#xff1a;云快充研发中心平台架构师 吕周洋&#xff1a;云快充云原生稳定性治理之路 云快充成立于2016年&#xff0c…...

ENVI IDL学习笔记之基本操作

前言ENVI IDL&#xff08;交互式数据语言&#xff09;是一个通用的科学计算包&#xff0c;它提供了一套数学函数、数据分析工具&#xff0c;以及一些科学可视化和动画工具。IDL 是 ENVI 图像处理和分析软件的基础&#xff0c;可用于编写脚本并自动执行许多使用 ENVI 图形用户界…...

多线程面试题

1. Sychronized的锁升级过程是怎样的&#xff1f; 2. Tomcat 中为什么要使用自定义类加载器&#xff1f; 3. 说说对线程安全的理解 4. 对守护线程的理解 5. 并发、并行、串行之间的区别 6. Java死锁如何避免&#xff1f; 7. 谈谈你对AQS的理解&#xff0c;AQS如何实现可重入锁&…...

YARN运行流程

YARN是Hadoop资源管理器&#xff0c;他是一个通用资源管理平台和调度平台&#xff0c;可为上层应用提供统一的资源管理和调度&#xff0c;MapReduce等运算程序则相当于运行于操作系统上的应用程序&#xff0c;YARN为这些程序提供运算所需的资源内存、cpu。 YARN并不清楚用户提…...

java八股系列——SpringMVC从接受请求到完成响应的过程

Spring的MVC框架是围绕一个DispatcherServlet来设计的&#xff0c;这个Servlet会把请求分发给各个处理器&#xff0c;并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等&#xff0c;甚至还能支持文件上传。 流程大致如下&#xff1a; 用户发起请求&#xff1a;用…...

Elasticsearch索引全生命周期

索引(Index)是Elasticsearch中最重要的概念之一&#xff0c;也是整个Elasticsearch操作的基础&#xff0c;它是相互关联的文档的一个集合。在Elasticsearch种&#xff0c;数据存储为 JSON 文档&#xff0c;每个文档将一组键&#xff08;字段或属性的名称&#xff09;与其对应的…...

汇编指令学习(LOOP)

一、xor异或操作&#xff0c;相同为0&#xff0c;不同为1xor eax,eaxeax异或eax&#xff0c;相同为0&#xff0c;并把结果存放到eax&#xff0c;简单说该语句就是想eax寄存器清零。二、ECX&#xff0c;计数器mov ecx,0x3将ecx寄存器设置为3三、DEC减一操作dec ecxecx寄存器的值…...

Linux 配置本地yum源

挂载光盘 进入包 配置路径&#xff0c;查看在线yum源 移动在线yum源到/home/目录下 进入vi,任意取名以.repo结尾即可 按住i进行编辑&#xff0c;输入以下内容 注意gpgcheck1是检验&#xff0c;配置本地yum源不需要检验 写入上图内容按住&#xff1a;输入wq&#xff0c;点击回车…...

【PyTorch】教程:torch.nn.LeakyReLU

torch.nn.LeakyReLU 原型 CLASS torch.nn.LeakyReLU(negative_slope0.01, inplaceFalse) 参数 negative_slope (float) – 控制负值斜率&#xff0c;默认为 1e-2inplace (bool) – in-place 操作&#xff0c;默认为 False 定义 LeakyReLU(x)max⁡(0,x)negative_slope∗min⁡…...

【刷题】-- 基础 -- 二分查找

精于结构、敏于心智、熟于代码 方式&#xff1a;对于会的代码&#xff1a;学会以最快的速度构建&#xff0c;并以最快的速度书写&#xff1b;对于不会的代码&#xff1a;学会&#xff08;以最短的路径下&#xff09;看懂别人的代码。学会使用参考文档、熟悉每一个容器。 刷题位…...

Spark MLlib 特征工程

Spark MLlib 特征工程预处理特征选择归一化离散化Embedding向量计算特征工程制约了模型效果 : 决定了模型效果的上限 , 而模型调优只是在不停地逼近上限好的特征工程才能有好的模型 特征处理函数分类 : 预处理 : 将模型无法直接消费的数据&#xff0c;转为可消费的数据形式特…...

html 单页网站/百度霸屏培训

部署django项目常见的方式有三种: 1.在windows服务器中&#xff0c;采用IIS服务器进行部署。 2.在Linux服务器中&#xff0c;采用uwsginginx或者uwsgiapache的组合进行部署。 本文主要介绍在ubuntu20.04中采用uwsginginx的组合进行上线部署的方法。 第一步 安装uwsgi 1.首先启…...

wordpress系统付费/软文代写平台

Unity 3D 是目前主流的游戏开发引擎&#xff0c;有数据显示&#xff0c;全球最赚钱的 1000 款手机游戏中&#xff0c;有 30% 是使用 Unity 3D 开发出来的。尤其在 VR 设备中&#xff0c;Unity 3D 游戏开发引擎具有统治地位。 Unity 3D 能够创建实时、可视化的 2D 和 3D 动画、…...

网站一年的 运营费用/百度注册公司地址

var tiles L.tileLayer(http://{s}.tile.osm.org/{z}/{x}/{y}.png, {attribution: © <a href"http://osm.org/copyright">OpenStreetMap</a> contributors, }).addTo(map);...

做网络传销网站犯法吗/互联网营销的五个手段

实现图&#xff1a;描述实现方面的信息&#xff08;硬件的组成和布局、软件系统划分和功能实现&#xff09; 1.构件图 软件架构的角度 接口 和关系 有四种关系 构件 &#xff08;component&#xff09;&#xff1a;遵从同一组接口并且提供实现的物理的、可替换的部分。为其他…...

做类似淘宝的网站设计需要什么/英文seo是什么

一、Timestamp类封装 class Timestamp: public muduo::copyable,public boost::less_than_comparable<Timestamp>类图如下&#xff1a; 值语义&#xff1a;可以拷贝&#xff0c;拷贝之后&#xff0c;与原对象脱离关系 对象语义&#xff1a;要么是不能拷贝&#xff1b;要么…...

wordpress社区型主题/长沙疫情最新消息今天封城了

tempfile 模块专门用于创建临时文件和临时目录&#xff0c;它既可以在 UNIX 平台上运行良好&#xff0c;也可以在 Windows 平台上运行良好。 tempfile 模块下提供了很多常用的函数&#xff0c;下面给大家具体介绍一下这些函数。tempfile.TemporaryFile(modewb, bufferingNone, …...