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

stl - 我可以在 DriverKit 驱动程序中使用 STL 吗?

例如,我可以std::vector在 macOS / XCode 的 DriverKit 驱动程序中使用吗?

DriverKit 有一些容器类,如https://developer.apple.com/documentation/driverkit/osarray?language=objcOSArray

如果我创建一个新的“DriverKit 驱动程序”项目并包含,<vector>那么我会遇到构建错误。这些错误来自包含<cstring>,错误是

No member named 'strcpy' in the global namespace

No member named 'strcat' in the global namespace

0 投票
1 回答
107 浏览

multithreading - 回调是否序列化到 DriverKit 驱动程序?

我需要同时在批量、中断同步端点上排队进出请求。我可以期望来自这些请求的所有回调都一一到来吗?或者可以同时期待多个回调?

0 投票
1 回答
376 浏览

c++ - 如何创建 IOUSBHostPipe::CompleteAsyncIO 回调?

我正在编写一个 SystemExtension 来与 USB 设备通信。我最初的计划是创建一个Transfer分配必要的IOMemoryDe​​scriptor的类,然后传递我希望Transfer该类与之通信的接口。我希望将AsyncIO完成后产生的回调发送给班级。如果我需要将多个读取排队,我可以创建更多此类的实例。在回调中,我将解包数据,然后提交另一个readTransfercompleteCallback

TransferOSTypeAlloc(Transfer).

我面临的问题是创建 OSAction 失败并出现此堆栈跟踪:

如果我改为在连接 USB 设备时由系统实例化的类中定义、实现和创建回调(该类在 plist 中使用 key 指定IOUserClass),则创建OSAction对象可以正常工作。

调用IOUSBHostInterface::OpenIOUserClass通过将指向 的指针IOUserClass作为第一个参数传递给Open. 这样做应该可以吗?或者是否要求该IOService对象也是从AsyncIO.

0 投票
1 回答
76 浏览

macos - 如何覆盖 DriverKit OSData 内部缓冲区的一部分?

的文档OSData“......您可以向它们添加字节并覆盖字节数组的部分。” . 我可以看到一种附加字节的方法,但我不明白我如何能够覆盖缓冲区的一部分。

另一种选择是用于IONewZero分配一些我需要的类型的元素。我的情况是我只需要这个int

例子:

然后解除分配:

与使用/的解决方案相比,使用OSData对象有什么优势?IONewZeroIOSafeDeleteNULL

0 投票
1 回答
301 浏览

macos - 不在 USB DriverKit 的 Start 方法中调用

我正在编写一个 DriverKit dext 并且可以使用系统扩展框架激活它。我有 USB 的权利,即 com.apple.developer.driverkit设置为true com.apple.developer.driverkit.transport.usb已添加为字典但没有任何子值(它是空的)。

我期待在插入任何 USB 设备后被 dext 的 Start 方法调用,但我没有看到任何调用。

知道是否缺少任何步骤/配置吗?

0 投票
1 回答
146 浏览

macos - apple.developer.driverkit.transport.usb 的 idVendor

我正在阅读这篇内容丰富的帖子 如何设置“com.apple.developer.driverkit.transport.usb”权利?

我想问,我idVendor从哪里得到这个?它的价值应该是多少?

0 投票
1 回答
365 浏览

macos - 将 KEXT 移植到 DEXT 无法创建 ACM 串行 TTY 条目

目前,我们正在根据苹果 WWDC19 公告将内核 USB 串行驱动程序移植到用户串行驱动程序(Dext),当目标设备连接到运行 Catalina(15.4)的 MAC OS 时,dext 已移植并能够加载,但 dext 驱动程序无法创建 /dev/tty应用程序进行通信的条目。以下是 dext 驱动程序使用的权利和可疑的 plist 条目。请帮助我为什么 /dev 条目没有创建?

权利详情:

plist详细信息:

0 投票
1 回答
727 浏览

c++ - 如何在 DriverKit 系统扩展中分配内存并将其映射到另一个进程?

我已在我的应用程序中分配内存并将其指针和大小传递给 IOConnectCallStructMethod. 然后使用IOMemoryDescriptor::CreateMapping我将此内存映射到 DriverKit 系统扩展进程,并且可以写入此映射的内存位置并从我的应用程序中读取数据。

我现在想对系统扩展中分配的内存做类似的事情,然后将其映射到使用系统扩展的应用程序。我想在系统扩展中创建一组内存缓冲区,然后从应用程序写入它,然后IOConnectCallScalarMethod使用IOUSBHostPipe::AsyncIO. 当CompleteAsyncIO由于发送完成而出现回调时,我会通知应用程序现在可以将数据复制到发送的第一个缓冲区。这种机制可能可以使用IOConnectCallAsyncStructMethod, 以及OSAction在系统扩展中创建的对象来完成。我不明白的是如何将系统扩展中分配的内存映射到应用程序。

0 投票
1 回答
143 浏览

c++ - `new` 和 `delete` 可以在 DriverKit 驱动程序中使用吗?

DriverKit 提供IONewZeroIOSafeDeleteNULL. 那些不调用任何构造函数或析构函数。

假设我想在 ivars 结构中有一些课程。该类不需要继承自OSObjectnor IOService。我应该如何构造这个对象?如果我将它作为ivars结构中的成员,则不会调用我的类的构造函数。如果我在 ivars 结构中保留指向我的类的指针,我需要分配并调用类的构造函数。我可以使用new/delete吗?

0 投票
1 回答
417 浏览

macos - 从无代码 KEXT 迁移到 DEXT。usb接口消失了

我正在尝试从 KEXT 迁移到 DEXT。我的USB设备不应该被经典驱动匹配(在其他情况下,它不允许打开设备和接口)。

我正在使用示例 USB 应用程序进行测试。

因此,在安装系统扩展之前,我能够看到 1 个设备和 3 个接口。但是,当我安装系统扩展(下一步)时,我找不到任何接口。他们似乎迷路了。要搜索接口,我使用命令“ioreg -lirc IOUSBHostInterface”。

知道为什么会发生这种情况吗?

我的驱动程序 Info.plist 文件

和驱动程序权利文件

安装扩展后“ioreg -lirc IOUSBHostDevice”命令的结果。如您所见... 0 个接口