在 Linux 的 MacOS KVM 上运行 checkran 的详细步骤
国外大神发布的又详细又不懂的教程。
大神说:这不是一件容易的事。如果你不能在Linux中做基本的CLI内容,你最好只等待Windows版的checkra1n。
不建议折腾.....仅供参考
前提条件:
linux机器启动和运行(不打算回答有关这个问题的问题,在互联网上大量的教程。最好是debian 基于本指南和一个体面的大小的文件夹的完整准确性。我的主文件夹是100 GB 进行比较,但类似35 到40 应该也可以)
QEMU 3.X或更高
主板和CPU 具有完整的VT-x 和VT-d(或AMD 版本:AMD-v 和AMD-Vi)功能(笔记本电脑很可能无法工作)
主板必须具有单独的板载USB 控制器(稍后将对此进行更多介绍)
至少一组USB 2.0 端口(3.0 可以工作,但工作起来非常棘手,您可能需要禁用3.0 端口才能正常工作)
制备工作:
确保您在主板BIOS 上启用了VT-x 和VT-
d(或AMD 版本:AMD-v 和AMD-Vi)
(如果您不启用,请查找)。
首先在终端中运行以下命令,这将安装
QEMU,Python and pip根据您拥有的linux 类型选择一个):
sudo apt-get install qemu-system
qemu-utils python3 python3-pip # for
Ubuntu,Debian,Mint,and PopOS.sudo
pacman -S qemu python python-pip
# for Arch.sudo xbps-install -Su qemu
python3 python3-pip # for Void
Linux.sudo zypper in qemu-tools qemu-
kvm qemu-x86 qemu-audio-pa
python3-pip # for openSUSE
Tumbleweedsudo dnf install qemu
qemu-img python3 python3-pip # for
Fedora
接下来是将内核标志传递给GRUB 引导加载程序。在标准文本编辑器中打开/etc/默认/grub 文件。找到它显示
GRUB_CMDLINE_LINUX_DEFAULT的位置,并添加iommu_pt intel_iommu_on,或者如果您有AMD 处理器,iommu_pt amd_iommu_on。
您的文件现在应如下所示:
# If you change this file,run 'update-
grub' afterwards to update#
/boot/grub/grub.cfg.
# For full documentation of the options in this file,see:
# info -f grub -n 'Simple configuration' GRUB_DEFAULT=0GRUB_TIMEOUT_STYLE=hiddenGRUB_TIMEOUT=10GRUB_DI
STRIBUTOR=`lsb_release -i -s 2>
/dev/null || echo
Debian`GRUB_CMDLINE_LINUX_DEFAUL
T="quiet splash iommu=pt
intel_iommu=on"GRUB_CMDLINE_LINUX
=""
# Uncomment to enable BadRAM filtering,modify to suit your needs
# This works with Linux (no patch required)and with any kernel that obtains
# the memory map information from GRUB (GNU Mach,kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical
terminal# note that you can use only
modes which your graphic card
supports via VBE# you can see them in
real GRUB with the command
`vbeinfo'#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to
pass "root=UUID=xxx" parameter to
Linux#GRUB_DISABLE_LINUX_UUID=tru
e
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
之后在终端sudo update-grub中运行并重新启动。现在,您已经传递了正确的内核标志,并准备好转到下一步。
在sudo apt-get install git中运行以下内容,然后sudo git clone
找到名为"vmra1n"的文件夹,并打开其中的终端。运行sudo ./lsiommu.sh如果成功,您将获得PCIe 设备及其IOMMU 组的列表。如果没有输出,请仔细检查BIOS 设置。
例如:
IOMMU Group 14 03:00.0 USB controller [0c03]: Advanced Micro Devices,Inc.
[AMD]300 Series Chipset USB 3.1 xHCI Controller [1022:43bb](rev 02)
IOMMU Group 14 03:00.1 SATA controller [0106]: Advanced Micro Devices,Inc. [AMD]300 Series Chipset SATA Controller [1022:43b7](rev 02)
IOMMU Group 18 27:00.3 USB controller [0c03]: Advanced Micro Devices,Inc. [AMD]Zeppelin USB 3.0 Host controller [1022:145f]
某些组包含多个设备。在自己的组中查找USB 控制器,并记下BDF ID(本例中为27:00.3和PCI ID(本例中1022:145f
隔离USB 控制器
rebind.sh用自己的方式更改PID 和BDF 的值,然后保存它。在vmra1n 打开终端并运行sudo ./rebind.sh
这将关闭一组USB 端口,因此根据需要将任何输入设备(即鼠标、键盘)重新定位到其他端口。作为格式的示例:
BIND_PID1="1022 145f"
BIND_BDF1="0000:27:00.3"
在QEMU 中设置虚拟机
找到一个名为"macOS-简单-KVM"的文件夹,并在那里打开一个终端。运行sudo ./jumpstart.sh --catalina.(需要互联网连接)。如果你想拥有那个特定的OSX版本,你可以换掉。它现在将开始下载一个文件BaseSystem.img注意:如果您已经下载了BaseSystem.img则可以跳过此功能。BaseSystem.dmg你需要转换它与在文件夹中dmg2img工具。
完成后,使用qemu -img创建一个空硬盘,并将名称和大小更改为任何随你所愿。例如:qemu-img create -f qcow2 MyDisk.qcow2 64G
创建后,编辑./basic.sh并将以下内容添加到文件末尾,"MyDisk.qcow2"是您在上一张映像中为虚拟硬盘选择的名称
-drive id=SystemDisk,if=none,file=MyDisk.qcow2 \ -device ide-hd,bus=sata.
drive=SystemDisk \
完成后,打开终端并运行sudo ./basic.sh并等待QEMU 打开。进入QEMU 后,使用箭头键在三叶草引导器中选择"从基于MacOS 的系统启动"。
现在应该等待,直到你启动到MacOS实用程序。这可能需要一些时间。完成后,打开磁盘实用程序并选择您创建的虚拟磁盘。它还应显示您选择的大小。如果磁盘上有任何分区(不应该)取消分区。接下来,单击"格式"并将其重命名为所需的任何格式,然后选择MacOs 扩展格式(已记录)。格式化它并退出磁盘实用程序。选择"重新安装MacOS 的副本",然后单击"继续",这将需要一点时间,但最终您应获得许可协议,然后它会要求您选择一个磁盘来安装MacOS。单击您刚才格式化的磁盘并开始安装。然后,它将下载MacOS(从Apple 服务器),并将其安装到您选择的磁盘上。根据您的互联网速度,这可能需要一段时间。下载完成后,开始点击下一步,并做提示告诉你。
安装完成后,关闭QEMU。
连接USB 控制器
将以下内容basic.sh将host=XX:XX.X替换为较早的BDF ID。
-device pcie-root-
port,bus=pcie.0,multifunction=on,port=1,chassis=1,id=port.1 \
-device vfio-
pci,host=XX:XX.X,bus=port.1 \
正在运行检查1n
运行sudo ./basic.sh以引导到VM 中。现在,您应该能够将iDevice 连接到分配的USB 端口(在主机中禁用的USB 端口)。下载checkra1n 并按照应用程序中的步骤操作。
最后!就这样!如果您已正确完成所有操作,您的iDevice 应在DFU 模式下被识别,并且checkra1n 将运行!
故障排除(问题出现时将更新)
Please ensure all devices within the iommu_group are bound to their vfio bus driver.
选择的USB 控制器位于具有多个设备的组中,rebind.sh在具有相同组号的其他rebind.sh或者使用ACS 修补程序(对于高级用户)。您无需将设备附加到VM,只需重新绑定它们。
iommu doesn't work properly when enabled in BIOS
如果可能更新BIOS,较旧的主板可能有早期实现的问题。