如何解决Apple Silicon / M1 的 macOS 驱动程序系统扩展应该是 arm64 还是 arm64e?
我将 macOS 驱动程序包系统扩展编译为通用库,以便它同时包含 x86_64
和 arm64
。一台 Apple Silicon 计算机 A 当我连接 USB 设备时,驱动程序会启动。在 Apple Silicon 计算机 B 上,当连接 USB 设备时,我可以看到 kernel: exec_mach_imgact: disallowing arm64 platform driverkit binary "com.example.driver",should be arm64e
打印在 Console.app 中。我看过source code
发生这种情况的地方,但我无法弄清楚问题是什么。
如果我为 arm64e
编译它,那么它在计算机 A 上得到 exec_mach_imgact: not running binary "com.example.driver" built against preview arm64e
,然后它在计算机 B 上启动。
所有计算机都没有在 -arm64e_preview_abi
中设置 boot-args
。
如果我在每台机器上创建一个新的 Xcode (12.4) 项目并构建 Release 那么计算机 A 和 otool -fvv com.example.driver
给出
Fat headers
fat_magic FAT_MAGIC
nfat_arch 2
architecture x86_64
cputype cpu_TYPE_X86_64
cpusubtype cpu_SUBTYPE_X86_64_ALL
capabilities 0x0
offset 16384
size 73856
align 2^14 (16384)
architecture arm64
cputype cpu_TYPE_ARM64
cpusubtype cpu_SUBTYPE_ARM64_ALL
capabilities 0x0
offset 98304
size 73856
align 2^14 (16384)
在计算机 B 上,相同的命令给出
Fat headers
fat_magic FAT_MAGIC
nfat_arch 2
architecture x86_64
cputype cpu_TYPE_X86_64
cpusubtype cpu_SUBTYPE_X86_64_ALL
capabilities 0x0
offset 16384
size 73280
align 2^14 (16384)
architecture arm64
cputype cpu_TYPE_ARM64
cpusubtype cpu_SUBTYPE_ARM64_ALL
capabilities 0x0
offset 98304
size 73296
align 2^14 (16384)
如何让驱动在两台机器上都启动?
解决方法
Dexts 确实应该是 arm64
和 x86_64
(但正如 pmdj 解释的那样,系统二进制文件仍然是 arm64e
。)
正如 -arm64e_preview_abi
的名称(和需要)所暗示的那样,arm64e
目前仅作为开发者预览版公开,以便进行测试。
但是,您不应该收到 disallowing arm64
错误:您是否在计算机 B 上设置了其他有趣的引导参数? (特别是,amfi=
可能是相关的)
到目前为止,我的经验表明 _app.js
是用于 dex 的正确且唯一正确的 Apple Silicon 架构。
首先,存在“不允许 arm64 平台”错误,而且 Apple 自己的基于 DriverKit 的驱动程序是为 arm64e
构建的:
arm64e
这就留下了为什么您的 % otool -fvv /System/Library/DriverExtensions/com.apple.AppleUserHIDDrivers.dext/com.apple.AppleUserHIDDrivers
Fat headers
fat_magic FAT_MAGIC
nfat_arch 2
architecture x86_64
cputype CPU_TYPE_X86_64
cpusubtype CPU_SUBTYPE_X86_64_ALL
capabilities 0x0
offset 16384
size 96208
align 2^14 (16384)
architecture arm64e
cputype CPU_TYPE_ARM64
cpusubtype CPU_SUBTYPE_ARM64E
capabilities CPU_SUBTYPE_ARM64E_PTRAUTH_VERSION 0
offset 114688
size 95312
align 2^14 (16384)
构建不起作用的问题。 “arm64e
”错误表明问题不在于计算机,而在于二进制文件。您是否在两个系统上使用相同的二进制文件?也许有人禁用了 SIP,所以它更容易容忍构建不良的二进制文件?
您是否在最新版本的 Xcode 上新创建的项目中尝试过“hello world”风格的 dex ?检查是否在两台机器上本机运行。一旦成功,将 Xcode 的编译器和链接器命令行与构建脚本中的命令行进行比较 - 或者如果您也使用 Xcode,请将目标的构建设置与“干净”的进行比较。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。