【发布时间】:2021-01-30 16:55:46
【问题描述】:
我将 macOS 驱动程序包系统扩展编译为通用库,以便它包含 x86_64 和 arm64。一台 Apple Silicon 计算机 A 连接 USB 设备时驱动程序启动。在 Apple Silicon 计算机 B 上,当连接 USB 设备时,我可以看到在 Console.app 中打印了kernel: exec_mach_imgact: disallowing arm64 platform driverkit binary "com.example.driver", should be arm64e。我看过source code
发生这种情况的地方,但我无法弄清楚问题出在哪里。
如果我为 arm64e 编译它,那么它会在计算机 A 上得到 exec_mach_imgact: not running binary "com.example.driver" built against preview arm64e,然后它会在计算机 B 上启动。
没有一台计算机在boot-args 中设置了-arm64e_preview_abi。
如果我在每台机器上创建一个新的 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)
如何让驱动在两台机器上都启动?
【问题讨论】:
-
在开始的那个切片上开始?难道它实际上是在罗塞塔运行的? (活动监视器会告诉你)
-
架构在驱动程序启动的机器上的活动监视器中显示“Apple”。
标签: apple-silicon driverkit macos-system-extension