Banana Pi OpenWRT One Wifi6 OpenWrt社区官方开源路由器评测
第一款不可破解、开源、版权软件、符合 FCC、CE 和 RoHS 的维修权路由器
OpenWRT项目今年已经20岁了,为了纪念这一时刻,Banana Pi OpenWrt One/AP-24.XY路由器开发系统已经上市。这是OpenWRT团队与硬件公司的第一个联合项目。选择 Banana Pi,加上 Sinovoip 的知识和经验,是合乎逻辑的,尤其是当你加上通过开源和开放硬件计划体现的开放社会理念时。 Banana Pi 致力于为所有用户提供平等的发展机会。
为了本次评测的目的,路由器直接从Banana Pi公司寄给我们,装在一个我们称之为工业纸板箱的盒子里,上面有简单的黑色印刷。盒子上重要的一句话是您有权共享和修改此设备上的软件,并且进一步的文件得出结论,这不会违反该设备符合 FCC、CE 和 RoHS法规的事实 。在商业机电设备中,软件更正权(软件修复权)经常受到挑战,理由是这会导致整个产品不符合 FCC 标准。显然,这个看似很小的细节,实际上是朝着在受法律法规监管的生活和工作的各个领域更广泛地使用开放硬件和软件迈出的重大突破。还有一条很有吸引力的说法是,如果您无法使用必要的软件访问该网站,您可以写信给软件自由保护协会(SFP),一家支持开源社区的美国非营利机构,让他们向您发送实体媒体。这款路由器的套件售价为 89 美元,每售出一台,就会有 10 美元流向上述 SFP 机构。
硬件和软件
盒子里除了蓝色金属保护盒内的设备外,还包含一组三根天线、对应的 USB-C 电源,以及一把适合拧开四个角螺丝的螺丝刀。如果您想将设备放在桌子上,它还配有四个橡胶粘脚;如果您将 OpenWRT One 垂直安装在墙上,则有两个螺丝孔。没有提供在 DIN 导轨上安装的规定,因此可以得出结论,这主要是面向最终用户的产品。
外壳本身很容易拆卸,如果您需要更换锂 CR1220 RTC 电池、插入 mikroBUS 模块、访问 JTAG 连接器或更换 M.2 M-key 模块(即在初始设置期间),这样做是合理的。在使用过程中,开口的情况会非常少见。 USB-C PD 电源端口可接受高达 15 V 的电压,官方宣称功率输出为 30 W。
OpenWRT One 还可以通过 2.5 Gbps PoE RJ45 连接器供电,因为主板上已经安装了带变压器的 802.3at/af PoE RT5040 模块。 PoE 连接器标记清晰。旁边是一个启动开关——用于启动系统的媒体选择器。可用的两个选项是内置 256 MB SPI NAND 闪存或 16 MB SPI NOR 闪存。 SPI NAND 闪存用于存储可轻松修改的 U-boot 和 OpenWRT 图像,确保轻松更新操作系统。引导加载程序位于 SPI NOR 闪存中,该闪存受电路板的硬件开关写保护。如果有必要的话,可以拨动电路板上的开关并刷新新的引导加载程序。这实际上实现了路由器的“牢不可破”。在这里选择 NAND 和 NOR 闪存来扮演各自的角色是合乎逻辑的,因为 NAND 虽然读取速度较慢,但在实现更大容量方面却更为经济,而 NOR 始终是需要实现更直接访问(通常在字节级别)时的首选,这是在嵌入式系统中执行程序时的主要要求 - 因此非常适合存储 OpenWRT One Bootloader。
请注意,1 Gbps LAN RJ45 不是作为 PoE 实现的,而是作为标准以太网端口实现的。这里我们谈到第一个条件性反对意见,它源于 SoC 本身的选择,即本地以太网网络的吞吐量限制为 1 Gbps。如今,标准 SBC 通常配备 2.5 Gbps 端口,而更先进的型号配备两个独立端口(更不用说专业计算设备通常提供 5 Gbps 或 10 Gbps 以太网连接),这种限制对于定位为家庭或企业网络中的路由器的设备来说成为了瓶颈。在工业网络中,由于 10/100 Mbps 速度仍然很常见,因此这种限制可能并不重要。不过,经过后面的分析我们就会发现,这款路由器的用途主要是为了组建本地大量用户的Wi-Fi 6网络,而现在的局域网只是在需要连接本地网络的设备没有内置Wi-Fi的情况下的一个附加选择。最后,在背面有一个易于访问的重置按钮。
由于路由器完全采用金属外壳并且没有主动冷却,因此散热是一个挑战。主处理器,也是主要的热量来源,基于以高效著称的 ARM Cortex-A53 内核。它们的时钟频率相对较低,为 1.3 GHz,在运行和满负荷时不会产生大量热量,这些热量可以通过大型无源冷却器成功消散。设计团队在机箱两侧设计了气流开口,其余的热量则通过机箱的整个金属主体散发。电路板上的散热器和外壳之间没有直接连接,因此对流是通过外壳内部的空气循环来完成的。
Filogic 820 SoC(或 SoC 对)由一个 1.3 GHz 双核 ARM Cortex-A53 处理器(带有联发科 MT7981B 标识)和一个不带应用处理器的联发科 MT7976C 无线网卡组成,构成了该路由器的处理基础。在 Banana Pi BPi-R3 Mini 中,我们遇到了 Filogic 830 对,在该型号中,它由更先进的联发科 MT7986A 和功能相同的 MT7976D 组成,主要负责实现 Wi-Fi 6E - 因此具有与这里相同的作用。我们指出这一点是因为较新的 MT7986 芯片配备了两个 Airoha EN8811H 以太网 PHY 收发器,可在 WAN 和 LAN 端口上实现 2.5 Gbps 传输,以及两个 M.2 插槽:一个 M-key PCIe Gen 2×1,另一个 B-key 适用于 5G 调制解调器(OpenWRT One 上缺少后者)。
这里仅使用一个 Airoha EN8811H 以太网 PHY 收发器,由 2.5 Gbps WAN 和 1 Gbps LAN 共享。它实现了交叉检测、自动校正、极性校正、自动协商和9KB巨型帧等功能。 MAC 层和 PHY 层之间的数据传输通过支持 HSGMII 接口的 SerDes(串行器-解串器)接口完成。通过HSGMII接口的数据传输速率为2.5 Gbps(2500Base-X)。 EN8811H 可通过串行 SGMII 接口连接到额外的 MAC 芯片,其数据速率为 1 Gbps。因此,当前的 2.5/1 Gbps 配置是仅通过一个额外的 PHY 芯片在硬件中即可实现的最佳配置。 Airoha 归联发科公司所有,但被分离为一个独立品牌,最初是通过重新命名联发科的一些产品而创建的。
Filogic 820 隐藏在一个大型无源黑色散热器下,该散热器覆盖了 DDR4 内存、NAND 和 NOR 闪存。所选的1.3 GHz联发科MT7981B以及更快的1.8 GHz MT7981A支持通过单个DDR3或DDR4芯片的16位地址和16位数据总线直接连接。但是,选择速度较慢的处理器型号可能部分是出于散热方面的考虑,因为 OpenWRT One 是被动冷却的。此外,DDR4 内存需要 1.2 V,而 DDR3 需要 1.35 或 1.5 V,这通常也会导致相同速度下的运行温度较低。
PCB 板背面几乎没有任何元件,因此无需将板从外壳中取出即可从底部访问它。
前面提到的联发科MT7981B是Filogic 820平台的应用处理器。它依赖于两个 ARM Cortex-A53 内核,这在旧款 SBC 计算机中很常见,在 Raspberry Pi 3 型号中也有,一共有四个。这里的重点是通过可用的 16 位数据总线,使用随附的 DDR4 内存实现高达 2666 Mbps 的传输速度。选择了单个1GB DDR4 16x256Mb Nanya NT5AD512M16C4芯片。我们可以通过Tinymembench测试看到内存速度。他向我们展示了 Raspberry Pi 3 和 OpenWRT One 型号之间的差异非常小,这正是我们所期望的。然而,我们对 OpenWRT One 和 BPi-R3 Mini 的结果差异之小感到惊讶,这实际上显示了 Filogic 820 和 830 之间的性能差异。正如我们预料的那样,Mochabin 完全胜出。
SoC 还包括一个 NPU,其神经网络能够实现更高效的数据流管理、更好的 QoS,并在苛刻的情况下减少延迟。实施的零等待 DFS(动态频率选择)机制的设计理念是消除通信从一个 DFS 通道切换到另一个 DFS 通道所需的时间,这在 5 GHz 操作中尤为重要,在没有此机制的情况下,在大量活动通道的情况下会产生干扰,从而导致网络对客户端不可用的时间明显变长。不间断的网络可用性对于物联网设备和音频/视频流以及游戏使用至关重要。具有定制 HQoS(分层服务质量)的硬件 NAT 引擎优先考虑音频/视频流而不是其他与时间无关的服务。
为了提高通信安全性,MT7981B 支持硬件 WPA3 加密,如果此路由器用作网关,以保护内部网络免受黑客入侵和未经授权的访问,这一点尤为重要。我们还拥有硬件集成的安全机制来防御 DoS(拒绝服务)攻击等威胁。在 openSSL 测试中可以很好地了解内置硬件加密器的功能。它们是 ARM Cortex-A53 内核的组成部分,众所周知,它们的速度与内核时钟成正比。加密远远超过了 Raspberry Pi 3(这里需要注意的是,最新的 Raspberry Pi 5 之前没有任何 Raspberry Pi 型号支持硬件加密),但它们比其他两种型号慢,因为 MT7981B 以所选 SoC 中最低的时钟速度运行。
Wi-Fi 6 AX3000 支持是通过使用前述 MT7976C 无线 NIC 芯片实现的,该芯片支持创建双频 2.4/5 GHz Wi-Fi 网络,聚合速度高达 3000 Mbps。理论上,2.4 GHz 网络可以提供 574 Mbps 的吞吐量,而 5 GHz 在理想条件下可以提供高达 2402 Mbps 的吞吐量。实际速度取决于空间中已有的无线设备的数量,以及设施本身的物理特性。 MT7976C 还支持 OFDMA、1024-QAM 和 MU-MIMO 技术,可实现更快的传输,同时还支持由 Wi-Fi 6 标准定义的 HE160 标准,可提供 160 MHz 通道宽度(除了标准的 40 和 80 MHz 选项)。
由于 MT7976C 包含两个独立的 Wi-Fi 无线电,因此该路由器可以同时为 5 GHz 和 2.4 GHz 网络上的设备提供服务 - OpenWRT One 是一款双频路由器。每个网络可以有一个单独的名称,但也可以配置为共享一个通用名称。这为位置较近的设备提供了更快的 5 GHz 网络,并为距离较远的设备提供了 2.4 GHz 接入,而 5 GHz 网络的范围会成为问题。所有这些技术信息仅证实 OpenWRT One 被设计为一种可以与大量客户端一起创建自己的、现场分离的 Wi-Fi 6 网络的设备。
OpenWRT One 与其他开放平台的不同之处在于它拥有充足的开源驱动程序,而其他型号往往没有这种情况。例如,平台拥有硬件 MU-MIMO 和波束成形等功能并不罕见,但这些技术不受软件中的功能驱动程序支持。 OpenWRT One 和当前的 OpenWRT 24.10.0 完全支持这种技术组合,我们可以用下图来说明。这是关于 OpenWRT 完整实现的一个非常重要的事实,因为这是他们目前唯一的官方设备。
联发科MT7976C还支持蓝牙5.1,大大扩展了该平台在家庭自动化应用和连接外围输入接口方面的实用性。对于后者,我们也可以使用现有的USB-A 2.0端口。这个端口的速度,如果用作外部驱动器输入,只有 43 MB/s(老实说,这是 USB 2.0 的标准速度),所以最好使用插入 M.2 M 键插槽的 SSD,可实现 350 MB/s 的读取速度。旁边还有三个 PWM LED,其操作可控制,板上还有第四个 LED,用于指示电源状态。
正面的USB-C口通过Holtek HT42B534-2 UART转USB芯片连接,直接用于刷机和终端接入。机箱内部电路板上紧挨着它的是一个用于连接调试探针的 UART 接头。 USB-C 端口旁边有一个额外的按钮,其功能可以进行编程。它从机械上来说与设备背面的重置按钮相同。
联发科处理器没有内置RTC,而是通过外部连接处理器I2C口的NXP PCF8563TS芯片实现,并且板子本身还增加了CR1220锂电池的支架。还实现了外部硬件看门狗,采用EM6324芯片,连接到处理器的IO端口,以监控系统的平稳运行。
在之前的演示中,我们批评了缺少可用于扩展的 M.2 B-key 插槽,主要用于 5G 模块。不过,除了现有的 M.2 M-key 插槽(该插槽为 PCIe Gen 2×1)之外,还有一个 mikroBUS。 mikroBUS 有两个母头,每个输入分为三组,始终以相同的方式排列。第一组包括通信引脚(SPI、UART 和 I2C)、六个附加 I/O 引脚(PWM、中断、模拟输入、复位和片选)和三个电源引脚(GND、+3.3V 和 +5V)。所有引脚均直接从联发科 MT7981B SoC 拉出。
为了测试基本功能,我们从制定了这一全球公认标准的塞尔维亚公司 MIKROE 获得了三块 mikroBUS 点击板用于测试。Thermo 14 Click是一款基于 STTS22H 传感器的带看门狗的 I2C 温度计。 I2C SDA/SCL 对最初与 GPIO 7/6 绑定。Thermo 23 Click也是一个温度计,但基于 TMP144 传感器,采用 115200 波特的 UART 通信。 mikroBUS 占用 UART2,TX/RX 对位于 GPIO 5/4 上。最后,第三个 Click 是RELAY Click,它有两个 Omron G6D1AASIDC5s 继电器,由 mikroBUS 的 8 针和 11 针上的 GPIO 信号直接控制。
举例来说,我们以 RELAY Click 为例,使用了连接到 SoC 的 GPIO12 的第 8 个引脚(11 连接到 GPIO 25),并使用了 GPIOD 工具。也可以通过/sys/class/gpio/gpio524/value使用现已过时的方法。 (这表明gpio512是第一个引脚。)OpenWRT One 板上 mikroBUS 连接器的放置非常巧妙。也就是说,mikroBUS 卡的长度并不完全相同,并且超出了连接器的范围。对于 OpenWRT One 板来说,有可用空间,但是对于Mochabin来说,连接器旁边有两个电容器,因此我们甚至无法在那里测试继电器模块。
结论
这是第一款完全开放硬件和软件的官方 OpenWRT 路由器,同时无论软件进行何种更改,它仍然符合 FCC、CE 和 RoHS 标准。对于开源社区来说这是一大步。有人会说,但这不是第一个开放路由器,这是真的,因为制造商 Banana Pi 本身就有多个型号可以正式与 OpenWRT 软件配合使用。前面提到的 Banana Pi BPi-R3 mini,然后是 BPi-R3 或非常强大的 Wi-Fi 7(尽管 OpenWRT 尚未完全支持 Wi-Fi 7)BPi-R4 只是其中一些型号。如果我们看看流行的 SBC,我们可以发现很多在 OpenWRT 上运行的型号,但在这种情况下,请记住这些单板计算机根本没有成为真正的路由器所需的硬件。
只需 89 美元,您就可以获得非常不错的硬件,而且非常重要的一点是,该硬件完全受 OpenWRT 支持。现在和将来您都可以毫无问题地运行最新版本的 OpenWRT OS。 Filogic 820的所有硬件优势和网络技术都得到了软件的充分支持,发挥出了该设备最新的硬件优势。
您还将获得一个高品质、金属且易于拆卸的外壳,以及一组天线和一个合适的电源。将该设备的价格实际定为 79 美元可能是公平的,因为通过购买它,您将为开源社区的发展捐赠 10 美元。
在现代可破解路由器中,用 mikroBUS 替换主板上的 M.2 B 键槽的决定越来越普遍。重要的是,社区,或者至少是 mikroBUS 卡的制造商,要分离出一些型号,并通过驱动程序和说明支持他们的产品,以及在网络设备中大量采用 mikroBUS 模块。
OpenWRT 目前支持 Wi-Fi 6,而 Wi-Fi 7 仅针对少数设备进行了初步实现,而且我们在一些地方发现的有关这款路由器的无线技术过时的抱怨是不成立的。这通常指的是使用的Filogic 820和MT7976C。我们确实对 1 Gbps LAN 有所抱怨。这在当今肯定有点太多了,特别是因为尚未添加该家族的第三个成员——MT7531 以太网交换机。这样我们就得到了一条 1 Gbps LAN 和一条 2.5 Gbps WLAN 线路,虽然这两个端口的功能可以在软件中旋转,但不能旋转它们的 PoE 功能。
OpenWRT One 无疑是一款以无线 Wi-Fi 6 为主的路由器。有线通信并不是设计师的重点。此外,仅有 USB 2.0 和一个低速 M.2 端口(PCIe Gen 2 早已过时,不适合此用途)使得 OpenWRT One 型号无法成为合适的 NAS 解决方案。另一方面,USB 3.0 对 2.4 GHz Wi-Fi 和蓝牙信号的影响是众所周知的,因为它会在 2.4 到 2.5 GHz 范围内产生噪声,所以这可能是该主板上没有它的原因。 mikroBUS 能够通过成熟的第三方解决方案实现受控硬件升级,此时,这些可能是一些传感器或继电器信号控制。
我们的立场是,从战略上讲,最重要的是出现第一个完全符合 FCC、CE 和 RoHS 指令的具有开放软件的开放硬件,不仅以交付市场的形式,而且还具有修改现有软件和升级硬件的能力。因此,OpenWRT 和 Banana Pi 公司的联合举措是开放社会最重要的基石之一,我们认为应该得到支持。
相关文章:
Banana Pi OpenWRT One Wifi6 OpenWrt社区官方开源路由器评测
第一款不可破解、开源、版权软件、符合 FCC、CE 和 RoHS 的维修权路由器 OpenWRT项目今年已经20岁了,为了纪念这一时刻,Banana Pi OpenWrt One/AP-24.XY路由器开发系统已经上市。这是OpenWRT团队与硬件公司的第一个联合项目。选择 Banana Pi,…...
【算法】经典排序算法介绍+代码示例
排序算法介绍 1)冒泡排序 (Bubble Sort)2)选择排序(Selection Sort)3)插入排序(Insertion Sort)4)希尔排序(Shell Sort)5)归并排序(Me…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_02带边框和斑马纹的固定表头表格
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【Linux】线程控制
目录 一、原生线程库: 二、线程控制: 1、线程创建: 2、线程等待: 自定义类型的接收对象: 编辑 3、线程终止: pthread_exit: pthread_cancel: 4、线程ID: 线程库的底层原…...
pyqt联合designer的运用和设置
PyQt Designer 简介 PyQt Designer 是一个用于创建和设计 PyQt 应用程序用户界面的可视化工具。它允许用户通过拖放方式添加和排列各种控件,如按钮、文本框、滑块等,并设置它们的属性和样式,从而快速构建出美观且功能完整的 UI 界面。 Windows版本:【免费】安装包别管啊啊…...
spring boot3.4.3+MybatisPlus3.5.5+swagger-ui2.7.0
使用 MyBatis-Plus 操作 books 表。我们将实现以下功能: 创建实体类 Book。 创建 Mapper 接口 BookMapper。 创建 Service 层 BookService 和 BookServiceImpl。 创建 Controller 层 BookController。 配置 MyBatis-Plus 和数据库连接。 1. 项目结构 src ├─…...
利用微软的 HTML 应用程序宿主程序的攻击
mshta.exe 是微软的 HTML 应用程序宿主程序(Microsoft HTML Application Host),属于 Windows 系统组件。它的核心功能是运行 .hta(HTML Application)文件,允许通过 HTML、JavaScript、VBScript 等技术创建交…...
【深度学习】读写文件
读写文件 到目前为止,我们讨论了如何处理数据,以及如何构建、训练和测试深度学习模型。 然而,有时我们希望保存训练的模型,以备将来在各种环境中使用(比如在部署中进行预测)。 此外,当运行一个…...
Bert的使用
一、Data.py # data负责产生两个dataloader from torch.utils.data import DataLoader, Dataset from sklearn.model_selection import train_test_split #给X,Y 和分割比例, 分割出来一个训练集和验证机的X, Y import torchdef read_file(path):data []label …...
Unity使用UGUI制作无限滑动列表
原理参照上一篇使用NGUI的制作无限滑动列表的文章 Unity 使用NGUI制作无限滑动列表_unity 滑动列表很多物体-CSDN博客 准备工作: 新建一个空物体命名为LoopList,并调整其大小, 并增加Scroll Rect组件(用于滑动)、Re…...
ThinkPHP6用户登录系统的全过程
ThinkPHP6用户登录系统的全过程涉及请求处理、数据传输、路由分发、控制器逻辑、模型验证及中间件协作等多个模块的交互。详细的过程解析如下: 1. 前端请求与路由分发 前端发起请求:用户在前端页面(如Vue组件或HTML表单)输入用户…...
C++全栈聊天项目(2) 单例模式封装Http管理者
完善注册类界面 先在注册类构造函数里添加lineEdit的模式为密码模式 ui->lineEdit_Passwd->setEchoMode(QLineEdit::Password); ui->lineEdit_Confirm->setEchoMode(QLineEdit::Password);我们在注册界面的ui里添加一个widget,widget内部包含一个tip居…...
【鸿蒙开发】OpenHarmony调测工具hdc使用教程(设备开发者)
00. 目录 文章目录 00. 目录01. OpenHarmony概述02. hdc简介03. hdc获取04. option相关的命令05. 查询设备列表的命令06. 服务进程相关命令07. 网络相关的命令08. 文件相关的命令09. 应用相关的命令10. 调试相关的命令11. 常见问题12. 附录 01. OpenHarmony概述 OpenHarmony是…...
ORACLE EBS数据库RELINK方式搭建克隆环境
ORACLE EBS系统的数据库,一般都安装了很多特定功能的小补丁来解决特定的BUG;因此对于已经安装好的系统,想要克隆一套测试环境、搭建一个新的备机做测试等,如果按照生产环境标准,则需要安装大量补丁,带来很大…...
MySQL regexp 命令
REGEXP命令是一种用于进行正则表达式匹配的运算符,允许在查询中使用正则表达式来匹配字符串模式1。 基本语法 基本的语法结构如下: SELECT * FROM table_name WHERE column_name REGEXP pattern; 这里,pattern是你要匹配的正则表达式模…...
前端实习到工作的经历
看了很多人的程序员生涯之路,我突然意识到我也该记录一些东西,因此有感而发。 我是一个24届毕业生,大三下就开始找前端实习,当时学校不让走,我们都是先面着然后准备放假就去。当时周围小伙伴都找好了,考完…...
Vue3——Fragment
文章目录 一、Fragment的核心意义1. 解决Vue2的单根限制问题2. 减少不必要的 DOM 嵌套3. 语义化和结构化 二、Fragment 的实现原理三、Fragment 使用方式1. 基本用法2. 结合条件渲染3. 动态组件 四、实际应用场景1. 列表/表格组件2. 布局组件3. 语义化标签 五、注意事项1. 属性…...
Linux_16进程地址空间
CPU内的寄存器只有一套,但是CPU内寄存器的数据可能会有多份! 一、程序地址空间 下面这个图对应的是内存吗?(实际上是虚拟的进程地址空间) 32位机器内存最大为多少? 32位操作系统的地址总线为32位&#x…...
职坐标机器学习编程实战:调试优化与自动化测试精要
内容概要 在机器学习编程实践中,代码调试优化与自动化测试工具的应用是构建高可靠性系统的核心环节。本书聚焦从数据预处理到模型部署的全流程,通过特征工程优化、训练过程监控及持续集成方案的设计,系统化解决算法工程化中的典型问题。在特…...
git文件过大导致gitea仓库镜像推送失败问题解决(push failed: context deadline exceeded)
问题描述: 今天发现gitea仓库推送到某个镜像仓库的操作几个月前已经报错终止推送了,报错如下: 首先翻译报错提示可知是因为git仓库大小超过1G限制。检查本地.git文件,发现.git文件大小已达到1.13G。确定是.git文件过大导致&…...
llvm数据流分析
llvm数据流分析 1.数据流分析2.LLVM实现2.1.常量传播2.2.活跃性分析 相关参考文档:DataFlowAnalysisIntro、ustc编译原理课程、南大程序分析课程1、南大程序分析课程2。 1.数据流分析 数据流分析在编译优化等程序分析任务上都有重要应用。通常数据流分析可被抽象为…...
Vite为什么选用Rollup打包?
Vite 在生产阶段使用 Rollup 打包,但这不是唯一选择。它的设计背后有明确的权衡和考量,同时开发者也可以选择其他替代方案。 一、为什么 Vite 默认使用 Rollup? 1. Rollup 的核心优势 • Tree-shaking:Rollup 的静态分析能力极强&…...
Docker 入门与实战指南
Docker 入门与实战指南 一、Docker 简介 Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖打包成一个可移植的容器。容器可以在任何安装了 Docker 的环境中运行,确保应用的一致性和可移植性。 1.1 为什么使用 Docker? 环境一…...
C# 常用数据类型
C# 数据类型分为 值类型、引用类型 和 特殊类型,以下是详细分类及对应范围/说明: 一、值类型(Value Types) 值类型直接存储数据,分配在栈内存中,默认不可为 null。 简单类型 整数类型…...
深入解读 JavaScript 中 `this` 的指向机制:覆盖所有场景与底层原理
this 是 JavaScript 中最容易引发困惑的核心概念之一,它的指向在不同场景下呈现截然不同的行为。本文将系统性地解析 this 的所有使用场景,结合代码示例和底层原理,帮助你彻底掌握其运行机制。 一、全局环境下的 this 1. 浏览器环境 在浏览器…...
无人机全景应用解析与技术演进趋势
无人机全景应用解析与技术演进趋势 ——从立体安防到万物互联的空中革命 一、现有应用场景全景解析 (一)公共安全领域 1. 立体安防体系 空中哨兵:搭载 77 GHz 77\text{GHz} 77GHz毫米波雷达(探测距离 5 km 5\text{km} 5km&…...
手写简易Tomcat核心实现:深入理解Servlet容器原理
目录 一、Tomcat概况 1. tomcat全局图 2.项目结构概览 二、实现步骤详解 2.1 基础工具包(com.qcby.util) 2.1.1 ResponseUtil:HTTP响应生成工具 2.1.2 SearchClassUtil:类扫描工具 2.1.3 WebServlet:自定义注解…...
【音视频】ffmpeg命令提取像素格式
1、提取YUV数据 提取yuv数据,并保持分辨率与原视频一致 使用-pix_fmt或-pixel_format指定yuv格式提取数据,并保持原来的分辨率 ffmpeg -i music.mp4 -t "01:00" -pixel_format yuv420p music.yuv提取成功后,可以使用ffplay指定y…...
深度剖析Redis:双写一致性问题及解决方案全景解析
在高并发场景下,缓存与数据库的双写一致性是每个开发者必须直面的核心挑战。本文通过5大解决方案,带你彻底攻克这一技术难关! 一、问题全景图:当缓存遇到数据库 1.1 典型问题场景 // 典型问题代码示例 public void updateProduc…...
Redis----大key、热key解决方案、脑裂问题
文章中相关知识点在往期已经更新过了,如果有友友不理解可翻看往期内容 出现脑裂问题怎么保证集群还是高可用的 什么是脑裂问题 脑裂说的就是当我们的主节点没有挂,但是因为网络延迟较大,然后和主节点相连的哨兵通信较差,之后主…...
Android 调用c++报错 exception of type std::bad_alloc: std::bad_alloc
一、报错信息 terminating with uncaught exception of type std::bad_alloc: std::bad_alloc 查了那部分报错c++代码 szGridSize因为文件太大,初始化溢出了 pEGM->pData = new float[szGridSize]; 解决办法 直接抛出异常,文件太大就失败吧 最后还增加一个日志输出,给…...
【从零开始学习计算机科学】操作系统(五)处理器调度
【从零开始学习计算机科学】操作系统(五)处理器调度 处理器调度一些简单的短程调度算法的思路先来先服务(First-Come-First-Served,FCFS)优先级调度及其变种最短作业优先调度算法(SJF)--非抢占式最短作业优先调度算法(SJF)--抢占式最高响应比优先调度算法轮转调度算法…...
LeetCode1871 跳跃游戏VII
LeetCode 跳跃游戏 IV:二进制字符串的跳跃问题 题目描述 给定一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump。初始时,你位于下标 0 处(保证该位置为 0)。你需要判断是否能到达字符串的最后一个位置…...
ResNet50深度解析:原理、结构与PyTorch实现
ResNet50深度解析:原理、结构与PyTorch实现 1. 引言 ResNet(残差网络)是深度学习领域的一项重大突破,它巧妙解决了深层神经网络训练中的梯度消失/爆炸问题,使得构建和训练更深的网络成为可能。作为计算机视觉领域的里…...
MATLAB 控制系统设计与仿真 - 24
PID 控制器分析- 控制器的形式 连续控制器的结构: 为滤波时间常数,这类PID控制器在MATLAB系统控制工具箱称为并联PID控制器,可由MATLAB提供的pid函数直接输入,格式为: 其他类型的控制器也可以由该函数直接输入&#x…...
数字IC后端设计实现教程 |Innovus ICC2 Routing Pin Access Setting设置方法
默认情况下routing 引擎可以在标准单元可以打孔的任何地方(via region)打孔,甚至工具还会先拉出一块metal,然后再打孔过渡到高层。 随之工艺节点越做越小,标准单元内部的结构也越来越复杂。此时如果还沿用传统工艺的走…...
mysql经典试题共34题
1、准备数据 -- drop drop table if exists dept; drop table if exists emp; drop table if exists salgrade;-- CREATE CREATE TABLE dept (deptno int NOT NULL COMMENT 部门编号,dname varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMM…...
网络编程-----服务器(多路复用IO 和 TCP并发模型)
一、单循环服务器模型 1. 核心特征 while(1){newfd accept();recv();close(newfd);}2. 典型应用场景 HTTP短连接服务(早期Apache)CGI快速处理简单测试服务器 3. 综合代码 #include <stdio.h> #include <sys/types.h> /* See NO…...
GitHub 项目版本管理与 Release 发布流程记录
GitHub 项目版本管理与 Release 发布流程记录 1. 项目环境设置 1.1 打开 VS Code 并进入项目目录 E:\adb\Do>code .1.2 配置 Git 用户信息 E:\adb\Do>git config --global user.name "n" E:\adb\Do>git config --global user.email "**gmail.com&q…...
GStreamer —— 2.15、Windows下Qt加载GStreamer库后运行 - “播放教程 1:Playbin 使用“(附:完整源码)
运行效果 介绍 我们已经使用了这个元素,它能够构建一个完整的播放管道,而无需做太多工作。 本教程介绍如何进一步自定义,以防其默认值不适合我们的特定需求。将学习: • 如何确定文件包含多少个流,以及如何切换 其中。…...
Python+DeepSeek:开启AI编程新次元——从自动化到智能创造的实战指南
文章核心价值 技术热点:结合全球最流行的编程语言与国产顶尖AI模型实用场景:覆盖代码开发/数据分析/办公自动化等高频需求流量密码:揭秘大模型在编程中的创造性应用目录结构 环境搭建:5分钟快速接入DeepSeek场景一:AI辅助代码开发(智能补全+调试)场景二:数据分析超级助…...
使用OpenCV和MediaPipe库——驼背检测(姿态监控)
目录 驼背检测的运用 1. 驾驶姿态与疲劳关联分析 2. 行业应用案例 1. 教育场景痛点分析 2. 智能教室系统架构 代码实现思路 1. 初始化与配置 2. MediaPipe和摄像头设置 3. 主循环 4. 资源释放 RGB与BGR的区别 一、本质区别 二、OpenCV的特殊性 内存结构示意图&…...
maven的项目构建
常用构建命令 命令说明mvn clean清理编译结果(删掉target目录)mvn compile编译核心代码,生成target目录mvn test-compile编译测试代码,生成target目录mvn test执行测试方法mvn package打包,生成jar或war文件mvn insta…...
光电感知赋能智能未来 灵途科技护航新质生产力发展
2024年《政府工作报告》将大力推进现代化产业体系建设,加快发展新质生产力作为首要工作任务。这是“新质生产力”首次出现在《政府工作报告》中。 发展新质生产力具体包括 新兴产业 :推动商业航天、低空经济等新兴产业实现安全健康发展。 未来产业 &a…...
文件上传靶场(10--20)
目录 实验环境: 具体内容实现: 第十关(双写绕过): 第十一关:(%00截断,此漏洞在5.2版本中) 正确用法 错误用法 思路: 操作过程: 第十二关…...
deepseek在pycharm中的配置和简单应用
对于最常用的调试python脚本开发环境pycharm,如何接入deepseek是我们窥探ai代码编写的第一步,熟悉起来总没坏处。 1、官网安装pycharm社区版(免费),如果需要安装专业版,需要另外找破解码。 2、安装Ollama…...
Linux 生成静态库
文章目录 前提小知识生成和使用.a库操作步骤 在应用程序中,有一些公共的代码需要反复使用的,可以把这些代码制作成“库文件”;在链接的步骤中,可以让链接器在“库文件”提取到我们需要使用到的代码,复制到生成的可执行…...
yolo-TensorRT相关代码逐步详解-pt转engine
基于TensorRT 的推论运行速度会比仅使用CPU 快40倍,提供精度INT8 和FP16 优化,支援TensorFlow、Caffe、Mxnet、Pytorch 等深度学习框架,其中Mxnet、Pytorch 需先转换为ONNX 格式。 TensorRT的构建流程大致分为几个步骤:创建构建器和网络、解析模型、配置构建参数、构建引擎…...
简记_ MCU管脚的防静电处理
一、分析(一) 接口处的信号要先过 ESD/TVS 管,然后拉到被保护器件; 建个 ESD 电路发生器的模型,代入到我们的电路中去分析: 继电器实现这两个“开关”,并且还会感应出一些额外的RLC寄生。 ES…...
C语言实现算法(二)
以下是 “10个不重复的C语言经典算法案例“,包含可运行代码、开发环境配置及系统要求。所有代码基于标准C语法,已在GCC 9.3.0环境下测试通过。 开发环境配置 编译器:GCC(推荐) Windows:安装 MinGW 或 Visual Studio Linux:sudo apt-get install gcc macOS:通过Xcode Co…...