背景

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

  1. 插电无法自动开机:断电后重新插上 USB,设备停留在充电界面,需要手动长按电源键才能进入系统
  2. 硬件改造复杂:需要使用继电器或单片机在上电后延迟接通并断开电源键才能开机,步骤复杂,对手艺要求较高
  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 可以欺骗主板,让它认为电池仍然在位。

...

本文为会员专享,请先登录

前言

想在 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