问题标签 [driverkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
93 浏览

macos - DriverKit 系统扩展可以在启动时匹配热插拔设备吗?

我有一个可以匹配 USB 音频设备的 DriverKit 扩展,但如果我在重新启动期间将设备插入,AppleUSBAudio内核扩展会与之匹配。

拔出并重新插入加载我的 dext。

这是可以预料的吗?所有系统扩展都有这个缺点吗?我该如何补救?

0 投票
1 回答
98 浏览

macos - DriverKit 是否适用于自定义 USB 设备来控制麦克风音量(无流)?

我想寻求有关如何在 MacOS 上与自定义 USB HID 设备进行理想通信的指导。

用例 通过外部 USB HID 设备修改麦克风音量。

问题 我可以为此使用 DriverKit (HIDDriverKit) 还是需要使用 IOKit?我在这里读过一些关于音频限制的内容,但不确定究竟是什么不受支持。

DriverKit 不支持处理音频或通过蓝牙或 Wi-Fi 进行无线通信的 USB 设备。对于这些类型的设备,使用 IOKit 创建内核扩展。—来源

DriverKit 在我的情况下是否仍然有效,因为我不发送音频流而只控制音量?

非常感谢!干杯,汤姆

0 投票
1 回答
192 浏览

c++ - DEXT 在 macOS 10.15.7 上崩溃

我在 macOS 11 上成功构建并运行了 Apple 的示例Communicateing Between a DriverKit Extension and a Client App,这意味着我可以安装 DEXT 并通过它的客户端控制它。虽然在 macOS 10.15.7 上,我可以构建它并安装 DEXT,但 DEXT 崩溃。

systemextensionsclt 的输出:

但是当操作系统尝试运行 DEXT 时,它本身显然会崩溃:

注意:相同构建的二进制文件在 macOS 11 上运行良好。

我在使用 Xcode 12.4 (12D4e) 的 macOS 11.4 (20F71) 和 10.15.7 (19H1217) 上。理想情况下,DEXT 也应该在 macOS 10.15 上运行。

这是 macOS 10.15.7 上 DriverKit.framework 中的错误,还是我以不正确的方式设置项目?

0 投票
1 回答
203 浏览

macos - PCIDriverKit 授权检查失败(将 KEXT 迁移到 DEXT)

我正在尝试使用 PCIDriverKit 创建驱动程序。找不到任何合理的示例代码。

我的问题是我正在尝试访问所有设备,即使我已将它们的掩码正确地放置在 theInfo.plist (0x12345678&0x000000000)和 thecom.apple.developer.driverkit = TRUEcom.apple.developer.driverkit.transport.pci权利中。

对于大多数设备,我在 macOS 日志中收到上述错误。在我之前使用的 A KEXT 中,相同的面具工作得非常好。

SIP当然是禁用的,系统扩展开发者模式是开启的。

我目前在 XCode 中使用“登录本地运行”选项,因为这是一个开发阶段。

如何获得 DEXT 以打开 Mac 上的所有 PCI 设备?

编辑:这些是 DEXT 的权利,根据codesign -d --entitlements -

amfid 日志:

0 投票
1 回答
97 浏览

macos - 如何从 DriverKit 驱动程序访问物理地址?

现在我正在尝试编写一个既不使用 DMA 也不使用 PCI 并模拟 SCSI 目标的 IOUserSCSIParallelInterfaceController 驱动程序。

我意识到通过 UserProcessParallelTask​​ 方法给出的 SCSIUserParallelTask​​ 结构中的 fBufferIOVMAddr (https://developer.apple.com/documentation/scsicontrollerdriverkit/scsiuserparalleltask/3555105-fbufferiovmaddr)表示物理地址,它不能用作驱动程序中的内存地址内存空间。

我需要我的驱动程序向缓冲区写入一些内容并从缓冲区中读取一些内容,因为我想通过我的驱动程序代码进行 SCSI 通信。

有没有办法从 DriverKit 驱动程序访问物理地址中的内存?

0 投票
1 回答
66 浏览

macos - 从 IOUserService 锁定时,IOLock 会导致 mac OS 崩溃

我们正在使用需要锁定的数据结构,并希望从使用 PCIDriverKit 探测 PCI 设备时运行的 IOUserClient 线程访问它。

  1. 在这种线程中不允许使用 IOLock 吗?当尝试从不使用 IOPCIDevice 提供程序的 IOUserClient 线程中使用 IOLock 时,它可以正常工作而不会崩溃。
  2. 还有其他方法可以使用 PCIDriverKit 中的锁吗?与 pthreads.h 链接似乎几乎不可能(继续出错,因为它不是框架的一部分)。

当调用 IOLockLock 时,我们得到一个内核崩溃,说明:

谢谢


更新:最终崩溃来自我的 DEXT 中的空指针异常。我的教训是,DEXT 中的此类异常可能会使您的 Mac 完全崩溃,并且日志根本不会提供信息(如您所见)。最好的办法是使用 LLDB 进行调试。

0 投票
0 回答
43 浏览

macos - USB Driver App Not start: Termination Reason: Namespace CODESIGNING, Code 0x1

我正在开发以下文件。

  • driver.dext:用户模式 ​​USB 驱动程序
  • Driver.app:用于安装用户模式 ​​USB 驱动程序的应用程序

我为可执行文件创建了新的 App ID 和配置文件。我添加了权利的键和值。

我在 Xcode 中设置证书、配置文件和授权文件。Xcode 中的构建成功,并且通过命令也成功了公证。但我无法运行 Driver.app。崩溃日志显示以下消息。

终止原因:命名空间 CODESIGNING,代码 0x01

我尝试了安全命令,输出显示配置文件包含以下内容。

  • dext:“driverkit.transport.usb”和“driverkit”
  • 应用程序:“driverkit.userclient-access”,“system-extension.install”,“system-extension.uninstall”

你有什么解决办法?

0 投票
1 回答
44 浏览

macos - 从不同的用户进程调用时 IOPCIDevice 无效

我正在使用 Apple 的DriverKitUserClientSample代码作为基础,但我正在尝试使用PCIDriverKit. 在我的MyClass::Start方法中,我成功地从提供者那里获得,并IOPCIDevice调用它,获得正确的值。当我使用. 我将指向 this 的指针保存为结构中的成员。Open()GetBusDeviceFunction()MyClass::StartDriverKitSampleAppIOPCIDeviceMyClass::IVars

安装 DEXT 后,我想使用我正在编写的用户程序访问同一设备,该程序调用不同的方法MyClass::Foo。但是当我尝试运行相同的两个函数Open()和/或GetBusDeviceFunction()从我的方法运行时,MyClass::Foo我会遇到内核崩溃。使用 LLDB,我看到在访问对象时我得到了 GPF IOPCIDevice,即使我仍然可以MyClass::IVars毫无问题地访问结构的其他成员(整数、字符等)。

我究竟做错了什么?有什么提示吗?

0 投票
0 回答
56 浏览

c++ - Apple DriverKit SDK 摄像头驱动注册

我是 Apple DriverKit SDK 的新手,我不清楚如何注册我的设备驱动程序,以便它可以作为操作系统中的相机使用。我必须在 IOService 的 Start 函数中注册一个流函数吗?我在互联网上搜索了一个答案,但我找不到。

我需要从自定义 USB 摄像头读取数据,然后通过自定义驱动程序使其可用。

你们中的任何人都可以帮助我吗?

0 投票
1 回答
147 浏览

macos - 如何实现虚拟音频驱动并将其发布到 Apple App Store?

在会议视频中的 3:38-4:00,Baek San Chang 似乎表示不允许将 AudioDriverKit 用于虚拟音频设备

视频:https ://developer.apple.com/videos/play/wwdc2021/10190/

他是这样说的:

请记住,提供的示例代码纯粹是出于演示目的,它会创建一个与硬件设备无关的虚拟音频驱动程序,因此不会授予此类用例的权利。

对于只需要设备的虚拟音频驱动程序,应继续使用音频服务器插件驱动程序模型。

示例代码的提及有点令人困惑;他的意思是说不会为虚拟设备授予硬件访问权限吗?这似乎很明显。

但是,如果他的意思是驱动程序工具包扩展(com.apple.developer.driverkit 和 com.apple.developer.driverkit.allow-any-userclient-access)的权利将不会授予虚拟音频设备,这就是 AudioServerPlugins 的原因应该还用,那就另当别论了。

我们是否允许为虚拟设备使用 AudioDriverKit 扩展?

将扩展程序与应用程序捆绑在一起而不需要安装程序的好处是在允许的情况下使用扩展程序的重要原因。

我需要创建一个虚拟音频驱动程序,向用户呈现一个虚拟麦克风和一个虚拟扬声器。然后,用户可以在 Skype、Zoom 等 3rd 方音频通信应用程序中选择这些虚拟端点。虚拟音频驱动程序实现然后在物理设备(由用户在虚拟驱动程序用户空间控制应用程序中选择)和虚拟设备之间路由音频。

要求虚拟音频驱动程序及其控制应用程序可以发布到苹果应用程序商店,供用户下载并安装在他们的机器上,没有任何问题。

我该怎么办?