背景

红米5A(riva,msm8937 平台)作为无电池 USB 直供电设备使用(如工控、kiosk、测试机等场景),面临三个核心问题:

  1. 插电无法自动开机:断电后重新插上 USB,设备停留在充电界面,需要手动长按电源键才能进入系统
  2. 充电模式启动后 ADB 失效:即使设法从充电模式转入正常系统,USB gadget 仍保持在 mass_storage 模式,ADB 无法使用
  3. ADB 只能 USB 连接:需要通过内网穿透实现远程 ADB 访问

经过多轮测试和诊断,最终找到了可靠的解决方案。本文记录完整的排查过程和最终方案。

核心优势:全程无需按电源键,无需控制任何电源开关——只需接好双路供电并插入 USB,系统自动完成从充电界面到远程 ADB 可用的全部流程。


设备环境

  • 设备:Xiaomi 红米5A (riva)
  • 芯片:Qualcomm msm8937
  • ROM:MIUI 9.6.27 开发版 (Android 8.1)
  • Bootloader:已解锁(verifiedbootstate=orange)
  • 供电方式:保留电池保护板(BMS)+ USB 双路供电(详见下文)
  • 使用场景:需要断电后插电自动开机,并通过 ADB 远程控制

前置条件

软件前提

  • 已获取 root 权限(通常需要 bootloader 已解锁,通过 SuperSU 或 Magisk 获取),需要修改 /system/vendor 分区

硬件改造:无电池直供电

本文的软件方案基于以下硬件改造前提:

改造方法

  1. 拆除电芯,保留电池保护板(BMS):将原装电池的电芯拆掉,但保留电池上的保护板(排线和小板)
  2. 从保护板输出端引出正负极,串联一个二极管后接入外部 5V/2A 电源(需稳压至 3.8V-4.2V 模拟满电状态),直接供电给主板
  3. 这样系统能检测到"电池存在"(BMS 正常通信),不会因检测不到电池内阻而关机或限频

为什么要保留 BMS

如果直接通过尾插 USB 供电(不接任何电池相关硬件),部分机型会因为检测不到电池内阻而:

  • 拒绝开机
  • 开机后自动关机
  • CPU 限频运行

保留 BMS 可以欺骗主板,让它认为电池仍然在位。

双路供电触发充电模式

实际使用中需要同时提供两路供电:

  • 保护板供电(模拟电池,维持主板正常工作)
  • USB 接口供电(提供主要电力 + 数据连接)
...

本文为会员专享,开通月度会员即可阅读全部付费文章

前言

想在 Proxmox VE 里跑 macOS 14 Sonoma?macOS 12 以上版本要求 CPU 必须支持 AVX2 指令集,先确认你的 CPU 满足再动手。


一、准备工作

  1. 下载 macOS Sonoma ISO 镜像
    可自行下载或通过教程制作:https://youtu.be/JFMvUpdCMwo
  2. 下载 KVM OpenCore 引导文件
  3. 解压下载好的 KVM OpenCore .gz 压缩包
  4. 将 Sonoma ISO 与 OpenCore ISO 上传到 Proxmox ISO 库

二、创建虚拟机(Web 面板操作)

  1. 登录 Proxmox 网页管理端
  2. 右键节点名称 → Create VM
  3. 名称:MacOSSonoma,VM ID:1400(未占用即可)→ 下一步
  4. OS 选项
  5. 类型:Other
  6. ISO 镜像:选择 KVM OpenCore.iso
    → 下一步
  7. 系统选项
  8. 显卡:VMware compatible
  9. BIOS:OVMF (UEFI)
  10. 取消:Pre-Enroll Keys
  11. 勾选:Add EFI Disk
  12. 机型:q35
  13. SCSI 控制器:VirtIO SCSI
    → 下一步
  14. 硬盘选项
  15. 总线/设备:VirtIO Block
  16. 大小:64GB
  17. 缓存:Write back (unsafe)
    → 下一步
  18. CPU 选项
  19. 核心数:4
  20. 类型:host
    → 下一步
  21. 内存选项
  22. 内存:4096MB
    → 下一步
  23. 网络选项
  24. 模型:VMware vmxnet3
    → 下一步
  25. 确认配置 → Finish

三、添加安装镜像并调整启动顺序

  1. 进入虚拟机 → 硬件Add → CD/DVD Drive
  2. 选择 macOS Sonoma.iso → Create
  3. 进入虚拟机 → 选项 → 启动顺序
  4. 将 KVM OpenCore 设为第一启动项 → 确定

四、关键配置:修改虚拟机 conf 文件

  1. 进入 Proxmox 节点控制台,执行:`# 1400 改为你的 VM ID
    nano /etc/pve/qemu-server/1400.conf`
  2. Intel CPU 在文件末尾添加:
    args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device qemu-xhci -device usb-kbd -device usb-tablet -global nec-ushci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu host,vendor=GenuineIntel,+invtsc,+hypervisor,kvm=on,vmware-cpuid-freq=on
  3. AMD CPU 在文件末尾添加:
    args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device qemu-xhci -device usb-kbd -device usb-tablet -global nec-ushci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu Haswell-noTSX,vendor=GenuineIntel,+invtsc,+hypervisor,kvm=on,vmware-cpuid-freq=on
  4. 搜索 ,media=cdrom
  5. 删除两个 ISO 中的 ,media=cdrom
  6. 替换为 cache=unsafe
  7. 如果是PVE 8以上,则把media=cdrom改为media=disk。直接删除会报错,无法启动虚拟机。
  8. 保存退出:
    Ctrl+O → 回车 → Ctrl+X

五、安装 macOS Sonoma

  1. 启动虚拟机,打开控制台
  2. 在 OpenCore 菜单选择 UEFI Shell → 回车
  3. 执行命令(盘符可能不同):
    `fs0:
    System\Library\CoreServices\boot.efi`
  4. 等待加载,进入 macOS 安装程序
  5. 打开 磁盘工具
  6. 选择 VIRTIO Block 磁盘
  7. 抹掉:名称 MacOS,格式 APFS
  8. 关闭磁盘工具 →安装 macOS Sonoma
  9. 按向导完成安装(会多次重启)
  10. 系统设置建议:
  11. 辅助功能:稍后
  12. 迁移助理:不迁移
  13. Apple ID:稍后设置
  14. 关闭分析、定位按需选择

六、优化:脱离 OpenCore 镜像独立启动

  1. 进入 Sonoma 系统
  2. 下载:
  3. KVM OpenCore EFI 文件夹
  4. GitHub 上的 MountEFI
  5. 打开终端执行:
    `cd ~/Downloads/MountEFI
    chmod +x MountEFI.command
    ./MountEFI.command`
  6. 选择你的 macOS 磁盘,挂载 EFI 分区
  7. 将原有 EFI 重命名为 EFI.orig
  8. 放入下载好的 OpenCore EFI
  9. 关机虚拟机
  10. 硬件中分离并删除 OpenCore 硬盘
  11. 重新开机,验证可直接进入 Sonoma

总结

这套流程利用 OpenCore + KVM 在 Proxmox VE 上成功虚拟 macOS 14 Sonoma,关键在于:

  • CPU 必须支持 AVX2
  • UEFI(OVMF) + q35 机型
  • VirtIO 磁盘与网卡
  • 正确添加 qemu args 参数
  • 最后写入 EFI 实现独立启动

按照步骤走,就能拥有一台稳定运行的黑苹果虚拟机啦~

(注:文档部分内容可能由 AI 生成)

上篇文章中我提到了进行PHP连接localhost慢的本地测试,我在本地计算机上搭建了Windows Server 2008虚拟机。安装MySQL 5.7时需要依赖Visual C++ 2013,但就在安装.NET时系统报了个错,提示信息为“已处理证书链,但是在不受信任提供程序信任的根证书中终止”。如下图:

11.png

这个错误我之前从来没有碰到过,可能是Win系统的测试环境用得少,经过一番查找,我了解到是由于Visual C++ 2013的证书并没有包含在Win2008系统中,导致系统不认为该安装程序可信。那么解决方案很显然,我们把证书装回来即可。

证书下载地址:微软官方下载

下载文件后,双击打开文件,点击“安装证书”。如下图:

2.png

点击下一步直到“证书存储”这一步,点击“浏览”按钮,选择“受信任的根证书颁发机构”,继续下一步直到结束。如下图:

3.png

最后一步会提示“安全性警告”,直接确定。

4.png

证书安装完毕之后,重新打开Visual C++ 2013安装程序,即可成功安装。如下图:

5.png

本博客使用typecho搭建,在部署到远程虚拟主机上之后,每个页面基本都需要3~4秒才能打开。

通过index.php里不断地使用二分法插入die()语句进行测试,最终定位到是连接MySQL数据库查询的时候会阻塞住2秒左右的时间,但MySQL与IIS是在同一台机器上,不应该出现延迟。

经多方查证,localhost这个默认主机名有可能在远程机器上的hosts文件中没有配置,或配置了IPv4与IPv6多条时,优先级设置有问题,这样有可能导致系统使用错误的解析地址进行处理。

开启IPv6的机器有可能会先返回“::1”,在部分场景下有可能导致判定为连接失败,然后才使用“127.0.0.1”地址处理,从而导致页面加载慢。

但经过本地环境搭建与重现,我未能重现这个问题。所以只能先抛出解决方案,其实只有一句话:

使用“127.0.0.1”代替“localhost”即可!

修改之后,问题解决!

众所周知,Windows系统有个传统艺能,就是通过“netplwiz”或者“control userpasswords2”设置免密码自动登录。前段时间在调整一台虚拟机的配置时,突然惊奇的发现,在设置免密码登录的时候居然找不到需要去掉勾选的复选框了。如下图:

iShot2022-05-11_11.52.04.png

在设置自动登录时,需要取消勾选“要使用本计算机,用户必须输入用户名和密码”复选框,然后点击确定,即会弹出自动登录时使用的用户名和密码,输入所需要自动登录的账户和密码即可。

经验证后发现,虚拟机所使用的是Win10 21H1版本的系统,该版本隐藏了这个复选框,从而无法设置自动登录。

解决该问题的方法其实非常简单,打开“运行”输入“regedit32”,进入“注册表编辑器”,打开如下路径:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device

双击右侧的“DevicePasswordLessBuildVersion”,将值由2改为0。如下图:

iShot2022-05-11_11.53.13.png

也可以采用如下的cmd命令:

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v DevicePasswordLessBuildVersion /t REG_DWORD /d 0 /f

重新打开自动登录设置窗口,复选框又出现了,如下图:

iShot2022-05-11_11.53.35.png