ARTICLE · 1265747
安卓手机跑原版 iOS?| 开源 XNU 内核 + 自研引导器,SpringBoard 真机启动实测(附 QEMU 配置)

一、痛点与破局
你是不是也想过:手里这台骁龙 8 系的安卓旗舰,性能明明不差,为什么不能跑一跑 iOS?刷机党折腾多年,最多装个拟真主题;模拟器党在 PC 上跑 iOS,性能和体验一言难尽。
更有硬核玩家的痛点:XNU 内核明明是开源的(APSL 2.0),但想在自己手里的硬件上跑起来,驱动、设备树、引导一环扣一环,几乎没人走通过。
HakiOS 破局了:它在搭载高通 SoC 的安卓手机上,用作者自己写的引导器和驱动,运行开源 XNU 内核(xnu-8796.121.2),并在其上启动原版 iOS 16.5 用户空间——launchd、backboardd、SpringBoard、原生 App 全都跑起来。同一套东西也能在 Linux PC 的 QEMU(virt, aarch64)里运行。
最关键的一点:什么都不刷。引导器通过 fastboot boot 进入 RAM,系统整个活在内存里,重启一下手机就回到它自己的 Android。这是一台研究平台,不是一个 ROM。
首台适配机型是 POCO X5 Pro 5G(redwood,骁龙 778G)。内核对这台手机一无所知——所有地址、中断、电源轨、固件都来自手机自己的设备树和 Android 系统,所以移植到另一台高通手机,只需在 devices/ 下新建目录,不需要重写。
二、核心功能深挖
1. 纯净的仓库:只有作者自己的代码
仓库里只有作者自己的代码和数据:
内核:对苹果开源 XNU 的补丁( xnu/hakios.patch,APSL 2.0)+ 自研驱动文件(xnu/files/),通过xnu/apply.sh叠加到新 clone 的源码上;引导器( xnuloader/)、自研程序与库(userland/src/)、工具(tools/)、构建与运行脚本;prebuilt/:本仓库构建出的内核、引导器和库; devices/poco-x5-pro/:一台手机所需的全部(UEFI 移植、设备树、固件脚本)。
仓库里永远不会出现的东西:
- 任何 iOS 文件
:不包含二进制、镜像、缓存、字体、图片。系统镜像由你在自己机器上从 iOS 16.5 IPSW 构建, sysimage/fetch.sh从 Apple 公开服务器下载,不做任何解密或绕过; - 手机固件
(GPU、Wi-Fi、音频 DSP、modem、震动马达、相机):归厂商所有,从你自己的手机拉取到 fw-*/(被 git 忽略); - 密钥、证书、激活凭证
:登录 Apple 账号在这里不可能,也并非目标。
2. 真机功能状态:SpringBoard、相机、Wi-Fi 都能跑
en1 就绪;注册、数据会话与信号格进行中(docs/cellular.md) | |
gpu=1,经 Mesa 的 OpenGL ES) | |
adsp=1 sound=4 mic=4) | |
adsp=1) | |
haptic=5) | |
wifi=1) | |
cam=5) | |
/private/varvar_store=1 ufs_write=1) | |
3. 自研驱动体系:一切数字来自手机自身
驱动文件集中在 xnu/files/bsd/dev/hakios.*.c,覆盖显示、触摸、UFS、GPU、Wi-Fi、音频、modem(hakios.mpss.c)、数据包(hakios.ipa.c、hakios.cell.c)、SIM/NAS、震动、相机。每个文件头部都注明了其寄存器数值的来源。
4. 蜂窝通信:从 XNU 直接拉起 Hexagon MPSS
Modem(Hexagon MPSS)完全由 XNU 拉起:固件经 TrustZone 加载,走共享内存、SMP2P、GLINK、QRTR、QMI;其文件系统由 UFS 伺服(只读,写留在内核内存),TFTP 与服务注册表为作者实现。IPA 包引擎连同固件、时钟、SMMU 上下文一起运行,与 modem 的握手已完成,SIM 绑定订阅、NAS 可读信号。完整进展见 docs/cellular.md。
5. 不依赖 Apple 的开放核心
核心内核、引导器和开放工具无需任何 Apple 之物即可构建运行:
make qemu-open # 开放内核 + 占位引导器 + 一个极简 raw-syscall 用户空间,在 QEMU 中运行加载原生 iOS 用户空间(make qemu、make phone)是可选路径,需要你自己提供 IPSW 和手机固件。
三、实战演示
QEMU 快速上手
要求:Linux x86-64,约 12 GB 磁盘,7-Zip 23+、lz4、qemu-system-aarch64、edk2-aarch64。
git clone https://github.com/oosexgang/hakios-os.git hakioscd hakiossysimage/fetch.sh # 从 Apple 服务器拉取 iOS 16.5 IPSW 并解包所需部分(7.4 GB)REST=1 userland/build.sh # 构建 APFS 镜像:userland/root.apfs 和 userland/system.apfsmkdir -p logsqemu/run-ios.sh 1200 -display gtk > logs/qemu.log # 一次 20 分钟的会话两三分钟后锁屏出现。按住鼠标左键即手指;H 是 Home 键,L 是电源键,↑/↓ 是音量键。
真机运行
前提:一台有移植的机型(devices/poco-x5-pro/,POCO X5 Pro 5G)、bootloader 已解锁、PC 上有 adb 和 fastboot、上一节构建的镜像、以及手机自身固件:
devices/poco-x5-pro/pull-firmware.sh # GPU、Wi-Fi、音频/电池、震动、modem、相机 -> fw-*/./xl enter # Android -> fastboot -> 引导器进 RAM./xl ramdisk userland/system.apfs # 系统镜像载入手机 RAM(约 80 s),每次引导器会话执行一次XL_SB_DELAY=8 XL_SECS=600 \XL_CMDLINE="bootcpu=7 cpus=8 cpufreq=1 ufs=2 touchscreen=1 gpu=1 adsp=1 sound=4 wifi=1 haptic=5 modem=1" \./xl run # 10 分钟会话,日志在 logs/./xl reboot # 回到 Androidtools/modem-cycle.sh "ARGS" SECS 一条命令完成上述全部并让手机回到 Android。
主要内核参数(完整列表见 docs/ru/notes.md):
cpus=8 bootcpu=7 cpufreq=1 | |
touchscreen=1 | |
gpu=1 | GL=1 构建的镜像,固件在 fw-gpu/) |
adsp=1 sound=4 mic=4 | |
haptic=5 | |
wifi=1 | fw-wifi/network) |
cam=5 | |
modem=1 | |
modem_step=N | docs/cellular.md) |
var_store=1 ufs_write=1 | /private/var |
从源码构建
内核(Linux:theos + cctools + iPhoneOS16.5.sdk;macOS:Xcode 或 cctools,SDK 会自动获取):
xnu/apply.sh # Apple GitHub 的 XNU 源码 + 我的改动 -> xnu-src/xnu-deps/setup.sh # 依赖、工具与 SDK./xnu-build.sh -j8 -k # -> xnu-src/.../BUILD/obj/DEVELOPMENT_ARM64_BCM2837/mach.development.bcm2837引导器:xnuloader/build.sh(clang + lld-link,无 EDK2 的 EFI 应用)。注意 xnuloader/identity.h(iOS 判断 iPhone 机型所依据的属性)不在仓库中:由 xnuloader/mkidentity.sh 在构建时从你自己的 IPSW 设备树生成(一个 34 KB 文件;LZFSE 可用 lzfse、macOS compression_tool 或 Python lzfse 模块解码)。用户空间与镜像:REST=1 userland/build.sh(MODEM=1 SYSTEM=1 将 modem 固件放入系统镜像)。
四、避坑指南与总结
避坑提示:
- 别指望登录 Apple 账号
:没有 Secure Enclave,无任何密钥/激活凭证,这不是目标; - 蜂窝网络尚未完成
:modem 已能启动并读 SIM,但注册和数据会话还在进行中;蓝牙不可用、本内核下不能充电、无 Metal; - 真机会话是临时的
:系统在 RAM 中运行,用 ./xl reboot或tools/modem-cycle.sh回到 Android; - 合规红线
:仓库不含任何 iOS 文件和厂商固件,一切需从你自己的 IPSW 和手机拉取;相关说明见 LEGAL.md、COMPLIANCE.md、THIRD_PARTY_LICENSES.md。
适用人群:底层系统研究者、内核/驱动开发者、想理解 iOS 启动链与高通平台 Bring-up 的硬核玩家。如果你只是想日常双系统,这不是给你的——但如果你想看 SpringBoard 在骁龙手机上亮起的那一刻,这个项目值得一试。
GitHub开源地址:https://github.com/oosexgang/hackios-xnu-kernel















































































