wifit3芯片发现机制:pkgutil遍历与VID:PID轻量导入的零注册表设计
wifit3芯片发现机制pkgutil遍历与VID:PID轻量导入的零注册表设计【免费下载链接】wifit3Wifite but USB-only cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3wifit3 是一款纯 Python、跨平台的 USB 无线网卡审计工具其芯片发现机制用pkgutil.iter_modules一次遍历chips/目录只导入每个芯片包的轻量名片SUPPORTED_IDSimport_driver在内存中构建VID:PID → 驱动的索引表——全程不写注册表、不装系统驱动插卡即识别。为什么需要零注册表的芯片发现传统做法是让操作系统为网卡绑定内核驱动Linux 的 DKMS 模块、Windows 的 NDIS/WinUSB但 wifit3 的设计目标是内置无线协议栈绕开驱动版本地狱见 README.md 的 Why 章节。因此它必须自己回答一个问题现在总线上插着的 USB 设备是不是我支持的无线芯片如果是该用哪个驱动类答案藏在一个文件里manager.py。它的模块 docstring 一句话概括了整套设计The map is built by apkgutilwalk overchips/*that imports only each packages light__init__(SUPPORTED_IDS import_driver), never the driver itself. —— manager.py#L1-L7第一步pkgutil 遍历 chips/ 目录所有芯片驱动都放在src/wifit3/chips/下每个芯片一个子包如 chips/ar9271_v2/、chips/rtl8822bu_dkms/。核心函数supported_ids()用pkgutil枚举这些子包for mod_info in pkgutil.iter_modules(chips_pkg.__path__, chips_pkg.__name__ .): if not mod_info.ispkg: continue ... mod importlib.import_module(mod_info.name) for entry in getattr(mod, SUPPORTED_IDS, None) or (): mapping[(entry.vid, entry.pid)] Claim(entry, key, mod.import_driver)—— manager.py#L127-L152三个关键设计点pkgutil.iter_modules自动发现新增一个芯片包放进chips/遍历自动把它纳入索引无需修改任何中央清单文件。结果被functools.cache缓存整个 VID:PID 映射表只在进程内构建一次之后每次总线扫描都是 O(1) 字典查询。冲突即断言如果两个包声明了同一个 VID:PIDassert slot not in mapping会立刻让问题暴露而不是静默覆盖。第二步轻量导入——__init__.py只是名片每个芯片包的__init__.py刻意做得极轻只声明它认领的 VID:PID 目录SUPPORTED_IDS和一个import_driver()函数绝不导入真正的 driver.py。以 AR9271 为例ar9271_v2/init.py_IDS ( (0x0CF3, 0x9271, AR9271, None, AMBIGUOUS_AR9271), (0x0846, 0x9030, AR9271, None, Netgear.N150), ... ) SUPPORTED_IDS [DeviceID(vid, pid, chipset, vendor, product) for ...] def import_driver(): from .driver import AR9271V2Driver return AR9271V2Driver—— ar9271_v2/init.py#L9-L38这就是轻量导入的含义遍历 20 个芯片包时每个包只付出几行数据 一次DeviceIDdataclass 构造的成本。真正动辄数千行、内含固件加载与寄存器序列的driver.py直到某个设备实际匹配上才通过import_driver()被惰性导入driver.py#L79-L83 定义的from_usb_device契约即在此时兑现。VID:PID 索引表里装了什么索引的值是一个Claim三元组manager.py#L65-L69字段含义entryDeviceIDvid/pid/chipset/品牌/型号UI 展示用key驱动族 key如rtl8822bu用于定位 setup 流程import_driver惰性导入函数匹配命中时才执行品牌与型号的静态目录集中在 products.py 中按厂商分 Enum 组织如TPLink.ARCHER_T4U_PLUS共覆盖数十个品牌数百张零售网卡。完整的硬件支持矩阵见 SUPPORTED-HARDWARE.md。第三层两类撞号的仲裁真实世界里同一个 VID:PID 可能对应不同芯片wifit3 用两个仲裁表处理 DKMS 族同一芯片、两个驱动包如rtl8821au_dkms与rtl8821aumainline 移植都支持同一批 VID:PID。_DKMS_BY_DIRmanager.py#L100-L112为每族指定默认赢家可用环境变量如WIFIT3_RTL8821mainline切换遍历中落选包直接跳过。 共享 VID:PID不同芯片、同一编号最著名的是2357:0137——TP-Link Archer T4U 同一编号下有 MT7612U 与 RTL8822CU 两种方案。_VIDPID_FAMILIESmanager.py#L88-L117在扫描时读取设备的实际 USB 描述符端点0x85是否为 bulk-IN来现场裁决def _resolve_2357_0137(dev): for intf in dev.get_active_configuration(): if any(ep.bEndpointAddress 0x85 for ep in intf): return mt76x2u # bulk-IN 0x85 Mediatek return rtl8822cu总线扫描一次 O(1) 查表识别流程最终在devices()manager.py#L236-L256中闭环libusb 枚举总线上所有设备 → 用(idVendor, idProduct)直接查supported_ids()字典 → 命中即为受支持网卡。没有任何设备树解析、注册表读写或驱动安装动作——零注册表体现在整条链路里发现阶段只读__init__.py级数据Windows 上未绑定 WinUSB 的卡也能通过 PnP 枚举被预告出来manager.py#L259-L274由 setup 层事后安装 WinUSB还有一条平行的zerocd_ids()遍历manager.py#L155-L169收集伪装成 U 盘的 ZeroCD 网卡编号供弹射手处理。打包也能自检supported_ids() 非空检查因为依赖动态pkgutil遍历PyInstaller 打出的单文件包必须把chips/下所有子包收集进去否则应用能启动却看不到任何网卡。wifit3 在main.py#L36-L40 内置了打包自检supported_ids()is non-empty: the pkgutil chip-discovery walk only enumerates drivers PyInstaller actually collected, so an empty map means the bundle shipped with no drivers.即启动自检会主动调用一次芯片发现映射表为空则判定打包损坏——发现机制的注册表就是 Python 包结构本身连自检都无需额外清单。一图总览三层轻量设计层次机制成本目录发现pkgutil.iter_modules遍历chips/*仅一次带functools.cache名录读取每包只导入轻量__init__SUPPORTED_IDS几行数据 dataclass 构造驱动加载import_driver()惰性导入driver.py仅匹配命中时延伸阅读设备层核心manager.py驱动契约chips/driver.py设备标识模型models/device_id.py硬件支持矩阵docs/SUPPORTED-HARDWARE.md移植新芯片的方法论docs/porting/METHODOLOGY.md一句话总结wifit3 把驱动注册从操作系统层面搬进了 Python 包结构层面——pkgutil负责发现__init__.py负责名录import_driver()负责按需加载三者合力实现了零注册表、零配置、插卡即识别的芯片发现机制。【免费下载链接】wifit3Wifite but USB-only cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

自建RustDesk中继服务器:部署hbbs/hbbr实现公网远控内网机器

自建RustDesk中继服务器:部署hbbs/hbbr实现公网远控内网机器

1. 为什么要自建RustDesk中继服务器老实说,远程控制工具我几乎没有断过:TeamViewer、AnyDesk、向日葵、ToDesk挨个换过。免费版有限制、商用授权贵得离谱,最要命的还是连接质量——你根本说不清那一段到底走的是哪条链路。圈内朋友推荐了Rust…

2026/10/2 20:32:03 阅读更多 →
微信是什么?解构国民级App的产品逻辑与核心功能

微信是什么?解构国民级App的产品逻辑与核心功能

你天天都在用微信,但真要让你给“微信是什么”下个定义,很多人可能先愣住。聊天软件?支付工具?看文章刷视频的入口?还是公司打卡、开会、传文件的工作台?我的答案是:微信早已不止是一个App&…

2026/10/2 20:32:03 阅读更多 →
手写论文和用汇写 —— 不是取代,是分工

手写论文和用汇写 —— 不是取代,是分工

有人坚持手写论文才有感觉,有人觉得手写太慢。其实手写和 AI 写作不是对立的,它们各有所长,合理分工效果最好。汇写(https://www.huixielunwen.com/tool/graduationThesis)擅长数字处理,手写擅长思考&#…

2026/10/2 20:31:02 阅读更多 →

最新新闻

dpkg 命令完全指南:Debian 软件包的安装、创建与管理实战

dpkg 命令完全指南:Debian 软件包的安装、创建与管理实战

文档教程 【免费下载链接】linux-command Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux 项目地址: https://gitcode.com/GitHub_Trending/linux/linux-command 点击查看 免费下载 dpkg 是 Debian Linux 系列系…

2026/10/2 21:00:19 阅读更多 →
HoloCubic小电视股票行情APP:如何打造你的专属实时行情看板

HoloCubic小电视股票行情APP:如何打造你的专属实时行情看板

HoloCubic小电视股票行情APP:如何打造你的专属实时行情看板 【免费下载链接】HoloCubic_AIO HoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等 项目地址: https://gitcode.com/GitHub_Trending/ho/Holo…

2026/10/2 21:00:19 阅读更多 →
CentOS寿终正寝

CentOS寿终正寝

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl一、项目本质和起源 CentOS,全称 Community Enterprise Operating System,即社区企业操作系统。它的核心定位可以概括为:基于 Red Hat Ente…

2026/10/2 21:00:19 阅读更多 →
离大谱!PDF 读完就忘,15k Star book-to-skill 把技术书编译成 Agent 的随身 Skill

离大谱!PDF 读完就忘,15k Star book-to-skill 把技术书编译成 Agent 的随身 Skill

很多人买技术书时信心满满,读完几章后也觉得“懂了”,但三个月后遇到问题,还是得重新翻 PDF、搜目录、找关键词。book-to-skill 的反差在于:它不把书再总结成一篇更短的文章,而是把书“编译”成 Agent 可以按需调用的 …

2026/10/2 21:00:19 阅读更多 →
Elasticsearch 日志检索 DSL 实战:时间范围查询、字段去重、分钟级统计与最新日志获取

Elasticsearch 日志检索 DSL 实战:时间范围查询、字段去重、分钟级统计与最新日志获取

日志平台的检索界面用久了,总会遇到一些"页面做不到"的需求:只想看看时间窗口内到底有哪些日志路径、想按分钟拉一条日志量趋势、想确认每个采集任务"最后一条日志是什么时候写入的"。这些场景直接写 Elasticsearch DSL 查询&#x…

2026/10/2 21:00:19 阅读更多 →
OpenAI dots 全面解读:一个有自己电脑、还能借你电脑干活的 AI 同事

OpenAI dots 全面解读:一个有自己电脑、还能借你电脑干活的 AI 同事

OpenAI dots 全面解读dots 不是一个更聪明的聊天框,而是 OpenAI 第一次把“AI 同事”做成了正式产品。 它有名字、有长相,有一台属于自己的云端电脑;经你同意,还能伸手到你自己的电脑里干活。它 24 小时在线,会主动找活…

2026/10/2 20:59:18 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 6:09:11 阅读更多 →