问题标签 [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.
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
c++ - 如何创建 IOUSBHostPipe::CompleteAsyncIO 回调?
我正在编写一个 SystemExtension 来与 USB 设备通信。我最初的计划是创建一个Transfer
分配必要的IOMemoryDescriptor的类,然后传递我希望Transfer
该类与之通信的接口。我希望将AsyncIO完成后产生的回调发送给班级。如果我需要将多个读取排队,我可以创建更多此类的实例。在回调中,我将解包数据,然后提交另一个read。Transfer
completeCallback
我Transfer
用OSTypeAlloc(Transfer)
.
我面临的问题是创建 OSAction 失败并出现此堆栈跟踪:
如果我改为在连接 USB 设备时由系统实例化的类中定义、实现和创建回调(该类在 plist 中使用 key 指定IOUserClass
),则创建OSAction对象可以正常工作。
调用IOUSBHostInterface::Open
是IOUserClass
通过将指向 的指针IOUserClass
作为第一个参数传递给Open
. 这样做应该可以吗?或者是否要求该IOService
对象也是从AsyncIO
.
macos - 不在 USB DriverKit 的 Start 方法中调用
我正在编写一个 DriverKit dext 并且可以使用系统扩展框架激活它。我有 USB 的权利,即 com.apple.developer.driverkit设置为true com.apple.developer.driverkit.transport.usb已添加为字典但没有任何子值(它是空的)。
我期待在插入任何 USB 设备后被 dext 的 Start 方法调用,但我没有看到任何调用。
知道是否缺少任何步骤/配置吗?
macos - apple.developer.driverkit.transport.usb 的 idVendor
我正在阅读这篇内容丰富的帖子 如何设置“com.apple.developer.driverkit.transport.usb”权利?
我想问,我idVendor
从哪里得到这个?它的价值应该是多少?
macos - 将 KEXT 移植到 DEXT 无法创建 ACM 串行 TTY 条目
目前,我们正在根据苹果 WWDC19 公告将内核 USB 串行驱动程序移植到用户串行驱动程序(Dext),当目标设备连接到运行 Catalina(15.4)的 MAC OS 时,dext 已移植并能够加载,但 dext 驱动程序无法创建 /dev/tty应用程序进行通信的条目。以下是 dext 驱动程序使用的权利和可疑的 plist 条目。请帮助我为什么 /dev 条目没有创建?
权利详情:
plist详细信息:
c++ - 如何在 DriverKit 系统扩展中分配内存并将其映射到另一个进程?
我已在我的应用程序中分配内存并将其指针和大小传递给 IOConnectCallStructMethod
. 然后使用IOMemoryDescriptor::CreateMapping
我将此内存映射到 DriverKit 系统扩展进程,并且可以写入此映射的内存位置并从我的应用程序中读取数据。
我现在想对系统扩展中分配的内存做类似的事情,然后将其映射到使用系统扩展的应用程序。我想在系统扩展中创建一组内存缓冲区,然后从应用程序写入它,然后IOConnectCallScalarMethod
使用IOUSBHostPipe::AsyncIO
. 当CompleteAsyncIO
由于发送完成而出现回调时,我会通知应用程序现在可以将数据复制到发送的第一个缓冲区。这种机制可能可以使用IOConnectCallAsyncStructMethod
, 以及OSAction
在系统扩展中创建的对象来完成。我不明白的是如何将系统扩展中分配的内存映射到应用程序。
c++ - `new` 和 `delete` 可以在 DriverKit 驱动程序中使用吗?
DriverKit 提供IONewZero
和IOSafeDeleteNULL
. 那些不调用任何构造函数或析构函数。
假设我想在 ivars 结构中有一些课程。该类不需要继承自OSObject
nor IOService
。我应该如何构造这个对象?如果我将它作为ivars
结构中的成员,则不会调用我的类的构造函数。如果我在 ivars 结构中保留指向我的类的指针,我需要分配并调用类的构造函数。我可以使用new
/delete
吗?
macos - 从无代码 KEXT 迁移到 DEXT。usb接口消失了
我正在尝试从 KEXT 迁移到 DEXT。我的USB设备不应该被经典驱动匹配(在其他情况下,它不允许打开设备和接口)。
我正在使用示例 USB 应用程序进行测试。
因此,在安装系统扩展之前,我能够看到 1 个设备和 3 个接口。但是,当我安装系统扩展(下一步)时,我找不到任何接口。他们似乎迷路了。要搜索接口,我使用命令“ioreg -lirc IOUSBHostInterface”。
知道为什么会发生这种情况吗?
我的驱动程序 Info.plist 文件
和驱动程序权利文件
安装扩展后“ioreg -lirc IOUSBHostDevice”命令的结果。如您所见... 0 个接口