更新OpenWRT系统中的所有软件包

在OpenWRT设备上,可以通过以下两种命令来更新系统所有软件包:

仅更新LuCI相关的软件包(Web管理界面):

更新所有可升级的软件包(包括系统内核和其他组件):

为什么要更新OpenWRT软件包?

保持OpenWRT系统及其软件包的最新版本,不仅能让系统享有最新的功能和性能优化,还能显著提高设备的安全性。每一次更新,通常都包含以下内容:

  • 安全补丁:随着时间的推移,可能会发现系统中的安全漏洞。更新能够及时修复这些漏洞,避免设备受到攻击。

  • 功能改进:新的软件包版本往往带来新功能,或改进现有功能,让系统更加易用和强大。

  • 性能优化:定期更新不仅能修复Bug,还能提升系统的性能,使网络设备运行更加流畅。

  • 兼容性和稳定性:更新可能包含对硬件和软件兼容性的提升,减少运行中出现的问题,保持系统的长期稳定性。

    更新命令的使用方法:

    本文将从最基本的更新软件包源开始,接着详细介绍两种可供选择的升级方式——只更新LuCI相关组件或更新所有软件包。用户可以根据需求选择相应的命令。

第一步:更新软件包源

无论你打算只更新LuCI相关的组件,还是更新整个系统,首先都需要刷新软件包源列表。这一步可以确保系统从最新的软件包存储库中获取信息,并知道哪些软件包有更新可用。

详细解释:

opkg update:这个命令不会直接升级软件包,而是更新系统的软件包源列表。它会连接到OpenWRT的软件包存储库,获取最新的包信息,包括版本号、依赖关系等。执行完这个命令后,设备将知道哪些软件包可以升级,从而为后续的升级操作做好准备。

选择1:仅更新LuCI相关的软件包

如果你只想更新LuCI Web管理界面和相关插件,而不想影响其他系统组件,可以使用以下命令:

详细解释:

  • opkg list-upgradable:列出当前系统中所有可以升级的软件包及其版本信息。输出内容通常会包括包名、当前安装版本和最新可用版本。

    例如:

    这表示 luci-app-firewall 和 luci-base 都有新版本可以升级。

  • grep luci-:筛选出所有以 “luci-” 开头的软件包。LuCI相关的所有软件包名称通常都以“luci-”开头,如 luci-base、luci-app-firewall 等。因此,这个命令确保只筛选和更新LuCI相关的软件包。

  • cut -f 1 -d ' ':将筛选结果中的包名提取出来,忽略版本信息。输出的内容会类似于:

  • xargs opkg upgrade:xargs 是用于将前面筛选出的包名传递给 opkg upgrade 命令的工具。它将每个包名作为参数传递给 opkg upgrade,然后逐个升级这些包。

    使用场景:

    如果你只关心Web界面和相关管理功能的升级,而其他系统组件都不需要更改,可以选择这种方法。这可以减少升级的范围,降低更新过程中出现问题的风险。

    选择2:更新所有可升级的软件包

    如果你希望更新系统中所有的软件包,包括内核、应用程序、以及网络相关工具,可以使用以下命令:

    详细解释:

    • opkg list-upgradable:与前面一样,用于列出所有可以升级的软件包。它会显示每个软件包的名称及其版本更新信息。

    • cut -f 1 -d ' ':这条命令将所有软件包名称提取出来,去掉版本信息。和前面的命令类似,它将结果简化为只有包名。

    • xargs opkg upgrade:这一步是将所有提取出的包名传递给 opkg upgrade 命令,然后逐一升级这些包。这是一次性更新系统中所有软件包的命令,确保系统中的每一个组件都保持最新。

    使用场景:

    当你希望确保系统中的所有软件包都保持最新,或者希望全面更新系统时,这条命令非常适合。它不仅会更新LuCI,还会更新内核和所有安装的应用程序、驱动程序等。

    更新所有软件包的风险与注意事项

    在执行更新前,请注意以下几点:

  • 内核更新的风险:更新所有软件包时,可能会涉及内核更新。内核更新可能会提升性能或修复安全问题,但同时也可能导致设备重启,或某些依赖于旧内核的功能失效。如果你使用了第三方驱动或定制的内核模块,更新内核可能会导致系统不稳定。

  • 存储空间不足:OpenWRT设备的存储和内存往往有限,更新大量软件包时,可能会耗尽可用的存储空间。请务必提前检查设备的存储空间,以避免更新过程中出现失败,或导致系统崩溃。可以使用以下命令检查剩余存储空间:

  • 备份系统配置:在执行大规模更新之前,务必备份你的系统配置文件。这可以通过LuCI Web界面或者命令行来完成。如果更新过程中出现问题,备份将是恢复系统的关键。

  • 逐步更新的建议:如果设备正在正常运行,建议分阶段进行更新。例如,可以先更新LuCI Web界面,观察系统的稳定性,再逐步更新其他软件包,避免一次性大规模更新可能导致的系统问题。

备份与恢复

为了确保在更新过程中万一出现问题时能够快速恢复系统,建议在更新前进行配置备份。可以使用以下两种方式备份:

  • 通过LuCI界面:登录LuCI Web管理界面,导航到“系统 > 备份/升级”页面,点击“生成备份”按钮,下载配置文件到本地。

  • 通过命令行备份:

    然后可以通过SCP或FTP下载该备份文件到本地电脑。

总结

通过上述命令,OpenWRT用户可以轻松更新系统中的所有软件包。你可以选择仅更新LuCI Web界面,或者全面升级所有系统组件(包括内核)。在执行更新前,务必确保做好配置备份并确认设备有足够的存储空间,这将帮助你保持系统的安全性、功能完备性以及长期稳定性。

参考链接


更新OpenWRT系统中的所有软件包

Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新

问题描述

最近在和公司其他项目组沟通联调H5的时候,意外发现对方发过来的地址可以加载,但是没有办法正常刷新。

尤其是对方服务器上已经重新部署页面,二次进入的情况下,依旧显示上一次加载过的内容,直到应用重启为止。

问题复现

写个 WebView 的 demo,然后在 WebViewClient 的所有方法加上日志来监控网页的运行情况。

此处假定测试网址为 https://www.mobibrw.com/#/?p=43064 

对网页第一次加载可以正常加载(即调用了 onPageStartedonPagefinished )。

第二次调用 loadUrl() 加载的时候只会刷新图标,不会真的重新加载网页(只调用了 onPageFinished )。

最后发现当我们第二次加载链接的时候,如果调用的是 webview.loadUrl(url) ,就无法刷新。

但是如果调用的是 webview.reload(url) ,就可以正常刷新网页。

调用 reload 时日志如下:

原因分析

知道了调用 reload 可以重刷网页,调用 loadUrl 无法重刷网页,问题就在于这两个方法的差别了。

经过查找,得知了真正原因是因为对方的 URL 带了 #,所以导致 loadUrl 不会刷新网页。

将网址改为 https://www.mobibrw.com/?p=43064,再次调用 loadUrl,第二次加载日志如下:

可以看到有正常执行 onPageStartedonPageFinished

那么为什么 URL 里面带了个 #,我们的 WebView 就无法通过 loadUrl 刷新网页了呢?

简单来说,URL # 以及其后面的部分,是客户端这边的位置定位符,在加载网页的时候并不会真正的发送给服务端。

我们的测试网址由于带有 #,所以无论怎么调用 loadUrl,他都判断我们只是改变了网页内部的相对位置(虽然实际上我们并没有改变),不会重新加载这个网页,只是加载网页图标。

那为什么 webview.reload 又可以重刷网页呢,实际上是因为 loadUrl 默认会有缓存策略,而 reload 是无视缓存策略强制刷新的,所以我们拿这个地址去浏览器运行,是可以正常刷新的。

结论

loadUrl 会有缓存策略,二次加载遇到带 # 的网页不会刷新,reload 无视缓存策略会强制刷新。

参考链接


OpenSCAD输入某些字符导致应用闪退问题分析定位(QScintilla)

前置条件

  • macOS Sequoia (15.2) 
  • MacBook Pro 2023-Apple M2 Pro (4能效核、8性能核、32GB内存、2TB磁盘)
  • OpenSCAD 2024.12.13 (或更高版本)
  • QScintilla 2.14.1
  • Xcode 16.2

问题现象

输入法切换到 “简体拼音”, 然后按下自带键盘上的 左侧 Shift- 按键,目的是按出下划线,会导致 OpenSCAD 闪退:

继续阅读OpenSCAD输入某些字符导致应用闪退问题分析定位(QScintilla)

CBM-223P单联薄膜介质可变电容器规格信息

产品规格 Products specification

代号

Code

型号

Model

安装方式

Mounting

 type

外形尺寸

Dimensions

(mm

参数

Sections

最大可变容量

Max.var.Capacitance(pF)

最小容量

Min.Capacitance(pF)

容量公差

Tolerance of Capacitance(pF)

009

CBM-223P

1

20.5×20.5×12.5

AM-2

(o):59.2
(A):141.6

(O):5±2
(A):5.5±2

(O):±(2pF+2%)
(A):±(2pF+2%)

技术特性 Specifications

型号

Model

 

绝缘电阻

Insulation Resistance

(MΩ)

动片接触电阻

Rotor

Contanct

Resistance

(MΩ)

耐电压

Voltage

Proof

(V.D.C)

     Q            

(1MHz 50pF)

转动力矩

Operating

Torque

(gf.cm)

止端力矩

End Stop

Torque

(kgf.cm)

微调增量

Trimmer

Cap.Swing

(pF)

转动方向

Rotation Direction

转动角度

Rotation

Angle

CBM-223P ≥250 ≤10 ≥100 ≥150 50~400 ≥3 ≥8 .
电容量曲线 Capacitance curve
        型 号
       Model
 
联别Section 转角关系及电容增量   Coeff  of  Rotation and  Cap   Swing   (%pF)
 100  90  80 75 70 60 50 40 30 25 20 10 (3)

CBM-223P

AM OSC 59.2 55.2 50.9 48.5 46.2 41.0 35.0 28.4 21.0 16.9 12.9 4.8  0
ANT 141.6 126.3 111.2 103.7 96.1 80.4 64.3 48.5 33.2 25.7 18.5 6.2 0
外形尺寸 Outline dimensions

参考链接


Flutter各版本对操作系统的支持情况

Flutter 3.3

32-bit iOS deprecation

As we announced earlier with the 3.0 stable release, due to decreased usage, that release was the last one to support 32-bit iOS devices and iOS versions 9 and 10. This change affects the iPhone 4S, iPhone 5, iPhone 5C, and the 2nd, 3d, and 4th generation iPad devices. The 3.3 stable version of Flutter and all following stable releases no longer support 32-bit iOS devices and iOS versions 9 and 10. This means that apps built against Flutter 3.3 and later won’t run on those devices.

Sunsetting macOS 10.11 and 10.12

In the Q4 2022 stable release, we expect to drop support for macOS versions 10.11 and 10.12. This means that apps built against stable Flutter SDKs after that point will no longer work on these versions, and the minimum macOS version supported by Flutter will increase to 10.13 High Sierra.

Bitcode deprecation

Bitcode will no longer be accepted for iOS app submission in the upcoming Xcode 14 release, and projects with bitcode enabled will emit a build warning in this version of Xcode. In light of this, Flutter will drop support for bitcode in a future stable release.

By default, Flutter apps don’t have bitcode enabled, and we don’t expect this to impact many developers. However, if you have enabled bitcode manually in your Xcode project, disable it as soon as you upgrade to Xcode 14. You can do so by opening ios/Runner.xcworkspace and setting the build setting Enable Bitcode to No. Add-to-app developers should disable it in the host Xcode project.

See Apple’s documentation to learn more about bitcode distribution.

Flutter 3.7

Supported platforms

As of the current release, Flutter supports the following platforms as part of Google-tested and best-effort platform tier:

Platform Version Channels
Android API 16 (Android 4.1) & above All
iOS iOS 11 & above All
Linux Debian, 64-bit All
macOS El Capitan (10.11) & above All
Web Chrome 84 & above All
Web Firefox 72.0 & above All
Web Safari on El Capitan & above All
Web Edge 1.2.0 & above All
Windows Windows 7 & above, 64-bit All

All channels include master, beta, and stable channels.

Google-tested platforms
Platform Version
Android Android SDK 19–30*
iOS 14-15
Linux Debian 10
Linux Ubuntu 18.04 LTS
macOS Monterey (12) & above
Web Chrome 84
Web Firefox 72.0
Web Safari / Catalina
Web Edge 1.2.0
Windows Windows 10

* Passing tests on Android SDK 19 also confers a passing result on SDK 20. This is because Android SDK 20 has additional support for Android Wear, but otherwise no new or deprecated API.

Best-effort platforms
Platform Version
Android Android SDK 16–18
iOS iOS 11-13
Linux Debian 11
Linux Debian 9 & below
Linux Ubuntu 20.04
Linux Ubuntu 22.04 (Aspirational Google-tested platform)
macOS El Capitan (10.11) - Big Sur (11)*
Windows Windows 11 (Aspirational Google-tested platform)
Windows Windows 8
Windows Windows 7

* Flutter 3.3 is the last stable release with macOS 10.11 through 10.13 best-effort support.

Unsupported platforms
Platform Version
Android Android SDK 15 & below
iOS iOS 10 & below and arm7v 32-bit iOS
Linux Any 32-bit platform
macOS Yosemite (10.10) & below
Windows Windows Vista & below
Windows Any 32-bit platform

Flutter 3.24.5

目标平台 目标架构 支持版本 CI 测试版本 不支持版本
Android SDK x64, Arm32, Arm64 21 至 34 21 至 34 20 和更早版本
iOS Arm64 12 至 18 17 11 和更早版本
macOS x64, Arm64 Mojave (10.14) 至 Sequoia (15) Ventura (13), Sonoma (14) High Sierra (10.13) 和更早版本
Windows x64, Arm64 10, 11 10 8 和更早版本
Debian (Linux) x64, Arm64 10, 11, 12 11, 12 9 和更早版本
Ubuntu (Linux) x64, Arm64 20.04 LTS 至 24.04 LTS 20.04 LTS, 22.04 LTS 23.10 和更早的非 LTS 版本
Chrome (Web) JavaScript, WebAssembly 最新的 2 个 119, 125 95 和更早版本
Firefox (Web) JavaScript 最新的 2 个 132 98 和更早版本
Safari (Web) JavaScript 15.6 和更新版本 15.6 15.5 和更早版本
Edge (Web) JavaScript, WebAssembly 最新的 2 个 119, 125 95 和更早版本

Flutter 3.27.0

目标平台 目标架构 支持版本 CI测试版本 不支持版本
Android SDK x64, Arm32, Arm64 21 to 34 21 to 34 20 and earlier
iOS Arm64 12 to 18 17 11 and earlier
macOS x64, Arm64 Mojave (10.14) to Sequoia (15) Ventura (13), Sonoma (14) High Sierra (10.13) and earlier
Windows x64, Arm64 10, 11 10 8 and earlier
Debian (Linux) x64, Arm64 10, 11, 12 11, 12 9 and earlier
Ubuntu (Linux) x64, Arm64 20.04 LTS to 24.04 LTS 20.04 LTS, 22.04 LTS 23.10 and earlier non-LTS
Chrome (Web) JavaScript, WebAssembly Latest 2 119, 125 95 and earlier
Firefox (Web) JavaScript Latest 2 132 98 and earlier
Safari (Web) JavaScript 15.6 and newer 15.6 15.5 and earlier
Edge (Web) JavaScript, WebAssembly Latest 2 119, 125 95 and earlier

参考链接


BlowFish加解密原理与代码实现

一丶简介

​ BlowFish 是一个对称加密的加密算法。由 Bruce Schneier,1993年设计的。是一个免费自由使用的加密算法。

了解的必要知识

  • BlowFish是一个对称区块加密算法。每次加密数据为 64位 (2个int)类型数据大小。八个字节
  • BlowFish 密钥采用32-448位
  • BlowFish是由一个16轮循环的Feistel结构进行加密的。

二丶原理与代码介绍

2.1 BlowFish算法流程

BlowFish 算法流程是由两部分组成 分别是密钥扩展以及数据加密

在数据加密中是一个16轮循环的Feistel网络。每一轮由一个密钥相关置换和一个密钥与数据相关的替换组成的。

先说一下BlowFish需要的子密钥。

BlowFish在加密或者初始化的过程中会使用两个盒来进行加密

分别是PBOX 以及SBOX

PBOX是 由18个32位的字的子密钥组成的。这些密钥可以通过预计算产生的。

其中PBOX记录的就是Π后面的小数位。转换成16进制存储到pBox中

例如:

关于数学中Π大家应该知道。这里不再累赘。关于如何计算Π后面的小数位以及将小数位转为十六进制存储到p[0]---p[18] 这里也不再赘述。 因为这些都是预计算好的。我们直接使用就可以。

关于小数转为16进制可以使用网站进行转换(不确保以后还能否使用):小数转换16进制

例子如下:

Sbox跟PBOX一样也是Π的小数位组成。sBox是4组8*32的数组。 如下

pBox与Sbox就是BlowFish算法进行加密的核心置换表

2.2 子密钥生成

​ 如果想进行数据加密。那么我们就要进行子密钥生成。也就是要将我们的Key 与 pbox进行 异或

那么说一下流程吧

  • 1.按顺序使用Π的小数部分初始化pbox与sbox (预先计算好了可以直接使用)

  • 2.使用key参数得出key_pbox, 具体流程为 将pbox中的数据 与 key进行 ^ 然后设置到key_pbox中,轮询key每次取出四个字节来与pbox[i]进行 异或

    如果Key不足的情况下 key从零开始补齐4个字节 继续与pbox[i]进行异或

    例子:

  • 3.使用当前的key_pbox数组 与s_box数组对一个64位0数据进行加密。 也就是 两个int 类型数据 8个字节 输出的结果 重新修改到key_pbox 与 key_sbox中。

    key_sbox就是当前的 使用s_box对64位数据进行加密,产生的输出修改的key_sbox中。

  • 一直循环直到修改完key_pbox与key_sbox为止

示例代码如下:

2.3 加密原理

​ BlowFish加密很简单。就是 将一个数 拆分为 左右各32位数值 (也就是 8个字节 左边四个字节,右边四个字节) 然后 左边进行 ^ key_pbox 当作下一次循环的右边。 右边 则是 右边 ^ F(左边) 下次当作循环的左边。

循环16轮。

说着挺难。看下图:

简单的加密流程图:

在这里我们只看加密

这里不得不介绍下F函数。 F函数的输入是一个32位数 也就是四个字节类型数据。 然后内部就是将32位数进行拆分成abcd

例如:

拆分后的a b c d然后去Key_sbox中查表 然后取出对应的值。

公式如下:

F函数明白了那么回头继续看一下加密操作。

图如下:

可以看到 首先计算 L ^Kr(Key_pbox[i]) 然后结果直接作为下一轮的右侧

右侧则是 经过论函数F 进行设置的。 最后变为下一轮循环的左侧。

R = R ^F(L)

最后一轮的话需要单独设置

其实加密函数就是循环16次。 然后每一轮都对 左侧32位 右侧32位进行操作。 操作之后直接作为下一轮循环的左右侧

核心代码如下:

至此我们的blowFish加密已经完成

2.4 BlowFish的解密

​ 解密与加密是相反操作。 加密的时候是从0开始遍历16轮 然后依次对xl xr进行操作。

解密的时候做事从16开始然后迭代16轮 对左右两侧做操作

最后16轮循环完毕之后还是进行一次^

代码如下:

至此解密完成

2.5.完成代码

经过测试加解密输出结果是对的。

参考链接


BlowFish加解密原理与代码实现

KiCad-V8.0.7制作收音机中周(中频变压器)封装

前置条件

  • macOS Sequoia (15.2) 
  • MacBook Pro 2023-Apple M2 Pro (4能效核、8性能核、32GB内存、2TB磁盘)
  • OpenSCAD 2024.12.13 (或更高版本)
  • FreeCAD 1.0.0 (或更高版本)
  • KiCad 8.0.7 (或更高版本)

由于 KiCad 缺少国产零件的封装,所以部分封装库我们需要自己创建。

继续阅读KiCad-V8.0.7制作收音机中周(中频变压器)封装

Flutter Web 调试问题: Assertion Failed on Text Input Click in Chrome (Flutter 3.27.0, Dart 3.6.0)

前置条件

  • Flutter 版本: 3.27.0 / 3.27.1
  • Dart 版本: 3.6.0
  • 编译器: Android Studio Ladybug | 2024.2.1 Patch 3
  • 操作系统: macOS Sequoia 15.2 (Apple M2) / Windows 11 专业版 23H2
  • 浏览器: Chrome (131.0.6778.205)

问题描述

直接从 Flutter API 官方页面(Form Class Documentation)复制 Form 示例,并使用 Flutter 的 Web 调试模式运行。

尝试用鼠标单击文本输入时,遇到以下错误:

这个问题是 Flutter 3.27.0 / 3.27.1 的缺陷,官方已经在 Flutter 3.28 版本修复,后续升级到 Flutter 3.28 即可解决此问题。

目前(2024/12/23master 通道已经修复这个问题,可以通过切换到 master 通道来解决:

参考链接


启动C:\Windows\System32\logiLDA.DLL时出现问题,找不到指定模块

Windows 11 每次开机都会弹出下图所示的信息:

经过查找是罗技鼠标驱动的问题,驱动卸载之后,系统重启还是会弹对话框。

具体做法是:

1. 运行、输入 regedit

2. 找到 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 目录下的 Logitech Download Assistant

3. 右键删除即可

参考链接


Windows 11 Version 21H2 更新提示 “你的设备缺少重要的安全更新。”

最近 (2024/12/24) 家里的电脑在 Windows 更新界面提示 “你的设备缺少重要的安全更新。请确保设备保持打开状态并接通电源,以便更新可以完成。”

如下图:

不管如何点击刷新重试,都会出现上述提示。

系统版本为 Windows 11 Version 21H2,详细信息参考下图:

原因为 Windows 11 Version 21H2 已经在 2023/10/10 终止服务,所以已经无法更新系统补丁。如下图:

解决方法就是安装依旧提供支持的系统版本 Windows 11 Version 23H2 或者 Windows 11 Version 24H2

需要注意的是,升级到  24H2 无法保留已经安装的软件,因此当前 (2024/12/24) 只能升级到 23H2  。

对于不支持的硬件进行升级安装,可以通过 Rufus 写入到 U盘后,不重启电脑,直接点击 U 盘上的安装文件进行安装,可以正常完成系统升级。

如下图:

点击开始会弹出如下信息,保持信息不变即可,如下图:

参考链接