在 iMac 上对 "Target Display Mode" 进行逆向工程
Reverse engineering the "Target Display Mode" on an iMac
我有一个计算机实验室,里面有几台老式 iMac(2011 年左右)。大多数人现在只想将它们用作笔记本电脑的显示器,并且在 MacOS 中使用目标显示模式,这(大部分)工作正常。
不过,我还想在 Linux 下支持此功能,它与 MacOS 并行安装在所有 iMac 上。我对 Linux 内核相当有经验(我已经编写了内核驱动程序),但我基本上不了解 MacOS - 因此,我正在寻找有关如何弄清楚 TDM 实际触发方式的指示(即 Cmd-F2 按下后会发生什么)。
我猜这主要涉及编写一些 Intel GPU 寄存器,但我不知道 MacOS 的哪一部分实际上负责这个。有什么提示吗?
所以我毕竟是自己想出来的。在查看了libsmc、SMCKit、smc_util和applesmc驱动后,我发现将0x02写入SMC键"MVMR"会导致显示器切换到DisplayPort输入。
详情见我的短博post:https://floe.butterbrot.org/matrix/hacking/tdm/
工具已开启 Github:https://github.com/floe/smc_util
我有一个计算机实验室,里面有几台老式 iMac(2011 年左右)。大多数人现在只想将它们用作笔记本电脑的显示器,并且在 MacOS 中使用目标显示模式,这(大部分)工作正常。
不过,我还想在 Linux 下支持此功能,它与 MacOS 并行安装在所有 iMac 上。我对 Linux 内核相当有经验(我已经编写了内核驱动程序),但我基本上不了解 MacOS - 因此,我正在寻找有关如何弄清楚 TDM 实际触发方式的指示(即 Cmd-F2 按下后会发生什么)。
我猜这主要涉及编写一些 Intel GPU 寄存器,但我不知道 MacOS 的哪一部分实际上负责这个。有什么提示吗?
所以我毕竟是自己想出来的。在查看了libsmc、SMCKit、smc_util和applesmc驱动后,我发现将0x02写入SMC键"MVMR"会导致显示器切换到DisplayPort输入。
详情见我的短博post:https://floe.butterbrot.org/matrix/hacking/tdm/
工具已开启 Github:https://github.com/floe/smc_util