vlambda博客
学习文章列表

在 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 端口才能正常工作)

在 Linux 的 MacOS KVM 上运行 checkran 的详细步骤


制备工作:

确保您在主板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

在 Linux 的 MacOS KVM 上运行 checkran 的详细步骤

接下来是将内核标志传递给GRUB 引导加载程序。在标准文本编辑器中打开/etc/默认/grub 文件。找到它显示


GRUB_CMDLINE_LINUX_DEFAULT的位置,并添加iommu_pt intel_iommu_on,或者如果您有AMD 处理器,iommu_pt amd_iommu_on。

在 Linux 的 MacOS KVM 上运行 checkran 的详细步骤

您的文件现在应如下所示:

 # 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

# 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"


在 Linux 的 MacOS KVM 上运行 checkran 的详细步骤

之后在终端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,较旧的主板可能有早期实现的问题。