问题标签 [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 回答
1512 浏览

macos - 如何在 MSFT 的 Azure Sphere 套件上使用 IOKit/DriverKit 为 MT6320 编写驱动程序?

在 Xcode 中使用 IOKit/DriverKit(在 WWDC 2019 中公开展示)将通用驱动程序写入 USB 连接的 MacOS 开发板的分步说明在哪里?

0 投票
0 回答
135 浏览

macos - 我如何实现 IOHIDEventDriver 使用 SystemExtension

我有一个旧项目,使用 kext 和 IOHIDEventDriver:

https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-315.7.16/IOHIDFamily/IOHIDEventDriver.h.auto.html

https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-247/IOHIDFamily/IOHIDEventDriver.cpp.auto.html

我想将其转换为 dext(在 WWDC 2019 中公开展示)。

在 Xcode11 beta7 中,我在 HIDDriverKit、USBDriverKit 和 DriverKit 中找到了一些类,但我不知道如何使用它。

0 投票
2 回答
1609 浏览

macos-catalina - 如何为 Mac OS catalina 编写驱动程序包扩展

我正在尝试为其中一个设备编写驱动程序套件扩展。我没有关于如何为 mac os Catalina 编写驱动程序包扩展的信息。我得到的唯一文档是

DriverKit 参考:https ://developer.apple.com/documentation/driverkit?language=objc

& WWDC 视频: https ://developer.apple.com/videos/play/wwdc2019/702/

是否有关于如何编写驱动程序工具包扩展和用于安装它的系统扩展的示例。提前致谢。

0 投票
1 回答
83 浏览

macos - 我们如何在 DEXT 中获取终止事件 - Catalina DEXT 驱动程序中的问题

我是 Mac OS 的 KEXT 和 DEXT 的新手。尝试将 KEXT 驱动程序移植到 DEXT 以用于开发目的。我的问题是:当我们拔出 USB 设备时,如果是 KEXT,我们会通过 message() 调用收到 kIOMessageServiceIsTerminated,它告诉我们设备已终止。在 DEXT 中,我看不到 messages() 函数(或类似函数)。我们如何在 DEXT 中设计此类场景(例如:如何在 DEXT 中获取终止事件)?

0 投票
0 回答
62 浏览

macos - 用于创建 nub 的 ACM 数据驱动程序的 DEXT 类是什么?

我是 kext/dext 的新手,并试图将 kext 驱动程序移植到 dext 以用于开发目的。在 kext 中,对于 ACM 数据驱动程序,我们使用 IOModemSerialStreamSync 类创建了 nub。在 dext 的情况下,我们将使用哪个类来实现相同的目的?

0 投票
1 回答
928 浏览

c++ - “NewUserClient”应该如何实现

我正在尝试与应用程序中的 dext 进行交互。我能够找到使用的服务,IOServiceOpen并且调用NewUserClient了我的 dext(我可以看到type传递的参数正在日志中输出)。在此之后,我有点失落。在这里阅读有关NewUserClient 的信息 ,我可以看到应该使用它Create来创建一个新的 Service 对象。

这里的讨论部分说字典中的键描述了新服务。propertiesKey

应该将此字典作为顶级条目放置在系统扩展的 plist 文件中,还是应该将字典与 key in 一起放置IOKitPersonalities

我可以将IOServiceDEXTEntitlements密钥保留为空值,以免对连接到系统扩展的应用程序的权利施加任何限制吗?

我的 plist 看起来像这样(MyUserClientProperties在两个地方有 key / dict)。

我是否需要SUPERDISPATCH作为最后一个参数传递给Create?

来自“OSX 和 iOS 内核编程”第 5 章第 81 页:

I/O Kit 设计的独创性在于用户客户端对象本身就是一个驱动程序对象:IOUserClient 类继承自 IOService,并且与任何其他 IOService 实例一样,每个用户客户端都有一个提供者类,对于用户客户端而言,它是应用程序正在控制的驱动程序的实例。

虽然上面可能只对 kext 正确(?)我会假设事情的工作方式与 dext 相同,

来自Create文档:使用 kIOUserClassKey 键指定您希望系统实例化的自定义 IOService 子类的名称。

为什么IOService需要实例化另一个类?这门课的目的是什么?是继承自我的类的提供者IOUserClient吗?如果是这样,我怎样才能使我的驱动程序实例(实现的那个NewUserClient)提供程序?

来自Create文档:使用kIOClassKey指定自定义IOUserClient子类的名称以返回给您的服务的客户端。

将创建并分配给 的第三个参数的类的类型是Create什么?如果是这样,那是我应该分配IOUserClient*指针的那个,它被传递给NewUserClient

无论我尝试什么,我总是得到一个断言,但我看不出是什么原因造成的。

0 投票
2 回答
950 浏览

c++ - kIOReturnNotPermitted 从 IOServiceOpen 连接到 SystemExtension IOService

我正在尝试创建到 SystemExtension IOService 的客户端连接。我可以看到我的IOUserClient子类已创建(init()并被Start(IOService*)调用),但返回代码来自IOServiceOpenreturns kIOReturnNotPermitted

我正在IOServiceOpen从创建激活请求的同一个应用程序中进行调用。

发出激活请求/调用的应用程序的权利IOServiceOpen

dext 的权利:

我的用户客户端:

LOG只是一个宏os_log(OS_LOG_DEFAULT, ...

NewUserClient执行:

连接系统扩展的代码:

编辑:

应用程序的Info.plist

dext的Info.plist:

0 投票
1 回答
746 浏览

macos - 从无代码 KEXT 迁移到 DEXT 后的性能问题

我正在将无代码 KEXT 迁移到 DriverKit。它用于为在固件升级模式下显示为 HID 兼容的 USB 设备禁用 IOKit HID 驱动程序。

到目前为止,我已经设法将一个空子类IOService与相关设备相匹配。IOKitPersonalities这是我正在使用的条目的示例:

IOUSBHostInterface用作此用例的提供者类是否正确?我也尝试过使用旧的 (deprecated) IOUSBInterface,但它与IOUSBHostInterface.

新的 DEXT 正在运行,但我在我们的固件更新代码中看到了一些糟糕的性能回归。调用 libusb 需要几十秒。如果我使用旧的 KEXT,它们会立即返回。

以下是问题的一些示例跟踪:

和:

这些记录在启用了“记录等待线程”的“时间分析器”仪器中。

我可以在 DEXT 中做些什么来解决这个问题吗?我尝试过使用子类IOUSBHostInterface化而不是IOService,但这并没有什么区别。

这是运行“ioreg -lirc IOUSBHostInterface”的相关输出:

欢迎任何意见!

0 投票
1 回答
1003 浏览

usb - 如何设置“com.apple.developer.driverkit.transport.usb”权限?

我不确定如何com.apple.developer.driverkit.transport.usb在我的 dext 权利文件中设置密钥。Info.plist 文件已经包含IOKitPersonalities字典,并且阅读com.apple.developer.driverkit.transport.usb字典看起来应该包含与IOKitPersonalities.

项目的权利文件与WWDC 视频中关于驱动程序套件的内容非常相似,将其设置为:

当我将其设置为 时<true/>,系统扩展启动。在看到应用程序的日志行之前,我确实看到了一些这样的行:

该权利是否应该仅反映IOKitPersonalities字典中的内容?

完全删除密钥后,我得到:

..所以我想钥匙一定在那里。

我正在查看与应用程序相关的日志行log stream --source | grep MyUserUSBInterfaceDriver

0 投票
1 回答
1573 浏览

macos - 我应该使用 IOKit 或 DriverKIt(或 HIDDriverKit)为 macOS 中的 USB 或蓝牙多点触控设备编写驱动程序吗?

我计划为类似于 Apple Magic Trackpad 或 Logitech 触控板的 Mac 的 USB 或蓝牙多点触控设备编写驱动程序。

这个想法是所有 macOS 应用程序都可以使用这种多点触控设备。由于新推出的 DriverKit(或 HIDDriverKit)将与应用程序捆绑在一起,我应该仍然使用 IOKit 还是应该使用 DriverKit?

谢谢。