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

macos - 是否可以使用 DriverKit 创建子 IOUSBHostDevice?

使用 KEXT 可以分配所需的类(即 IOUSBHostDevice),执行 init()、attach()、设置所需的属性并调用该对象的 registerService()。

使用 DEXT,我们只有 IOService::Create() 方法,它接受来自 Info.plist 的属性键名。因此,它适用于 IOUserClient 和 IOUserHIDDevice 但不适用于 USB。

那么在 DEXT 中,创建任意子对象的一般方法是什么?

0 投票
1 回答
69 浏览

macos - 适用于 MacOS 的虚拟打印机驱动程序

我可以为 macOS 制作虚拟打印机驱动程序吗?

作为一项服务,它将在后台运行,当任何用户按下 cmd+p 打印任何文档时,我的应用程序将出现在 Apple 默认打印页面的打印机列表中。

0 投票
2 回答
458 浏览

apple-silicon - Apple Silicon / M1 的 macOS 驱动程序套件系统扩展应该是 arm64 还是 arm64e?

我将 macOS 驱动程序包系统扩展编译为通用库,以便它同时包含x86_64arm64. 一台 Apple Silicon 计算机 A 连接 USB 设备时驱动程序启动。在连接 USB 设备时,在 Apple Silicon 计算机上,BI 可以kernel: exec_mach_imgact: disallowing arm64 platform driverkit binary "com.example.driver", should be arm64e在 Console.app 中看到正在打印。我查看了发生这种情况的源代码 ,但我无法弄清楚问题所在。如果我编译它arm64e然后它会exec_mach_imgact: not running binary "com.example.driver" built against preview arm64e在计算机 A 上运行,然后它会在计算机 B 上启动。

没有一台电脑-arm64e_preview_abi设置在boot-args.

如果我在每台机器上创建一个新的 Xcode (12.4) 项目并构建 Release 然后计算机 A 并otool -fvv com.example.driver给出

在计算机 B 上,相同的命令给出

如何让驱动程序在两台机器上启动?

0 投票
0 回答
69 浏览

serial-port - 如何实现 TxDataAvailable。如何知道要发送到 USB 层的缓冲区大小

我想使用驱动程序工具包框架开发串行驱动程序。我正在尝试覆盖 IOUserserial 类方法。但我不知道如何使用 TXDataAvailable() 和 RXDataAvailable() 函数获取要发送到 USB 层的缓冲区大小? 任何参考代码都会有所帮助。

0 投票
0 回答
92 浏览

macos - 如何使用 IOUserSerial 类将接收数据发送到串行设备

我已经浏览了 IOUserSerial 和 IOUserUSBSerial 的苹果文档。这些文档清楚地告诉我必须将 IOUserUSBSerial 用于 USB 设备。所以只是为了测试我子类化了 IOUserUSBSerial 并且我发现驱动程序工作正常,但是读/写是由框架控制的。我没有找到任何可用于获取数据的方法。即使virtual void TxDataAvailable(void)方法是最终的。所以不能超载。如果我使用 IOUserUSBSerial 类,如何获取数据?

所以我想到了使用 IOUserSerial 类。通过使用这个类,我可以重载

方法。我通过重载 ConnectQueues 方法得到的缓冲区地址。但我无法获得要写入的数据长度。

我没有得到任何方法@ https://developer.apple.com/documentation/serialdriverkit/iouserserial

提前感谢您的帮助

0 投票
0 回答
75 浏览

driverkit - Apple bigsure os,无法在coolterm中打开设备端口

我正在尝试为我的设备编写驱动程序套件,我继承了 iouserusbserial 类

当我尝试使用很酷的术语进行连接时,它会给出错误,因为“尝试打开端口时发生错误,100:访问被拒绝”,我可以从连接队列函数中看到日志,并立即调用断开队列,我希望有一些此权限被拒绝错误的解决方案

在日志流中我可以看到如下:“IOUserSerial::: 522 0x6000028f4058 IOUserSerial:::523 0x6000028f4058, IOUserSerial:::110 0x6000028f4058”

0 投票
1 回答
45 浏览

c++ - OSDynamicCast 未在基本驱动程序套件示例中编译

我有一个非常简单的驱动程序套件驱动程序。这几乎是样板。

我在尝试使用时遇到了构建失败OSDynamicCast,如下所示

我对 OSDynamicCast 的使用给了我以下问题。

使用未声明的标识符“gIOUserClientMetaClass”;您的意思是“gIOUserServerMetaClass”吗?

在添加NewUserClient覆盖之前,驱动程序运行良好(我在 IORegistry 中观察到了它)。

我不确定我在 Xcode 中缺少什么会导致这个问题。我引用的示例(例如 this)完全符合我对 OSDynamicCast 所做的工作。

在此处输入图像描述

0 投票
2 回答
214 浏览

macos - 我可以使用守护程序打开 DriverKit 用户客户端吗?

我正在 Driver Kit 中构建一个虚拟 HID 设备。

我想从守护程序与虚拟设备驱动程序通信,因为守护程序对于生成将从驱动程序发送的 HID 事件是必需的。

我通过守护程序很好地匹配了我的驱动程序服务,但是当我尝试打开服务时,我-536870174这里看到的意思是kIOReturnNotPermitted.

据我了解,设备驱动程序用户客户端只能com.apple.developer.driverkit.userclient-access通过 Apple 授权的应用程序打开。

所以,我的问题:

在 Driver Kit 中使用守护进程打开设备驱动程序的用户客户端完全不可能吗?

我在这里唯一的选择是拥有一个具有com.apple.developer.driverkit.userclient-access权利的中间应用程序,它可以充当守护程序和驱动程序之间的代理吗?

所以它会是这样的:

守护进程<---xpc 连接--> 中间应用程序 <--- 用户客户端 --->虚拟 HID 设备

编辑:要添加到下面关于将应用程序作为守护程序运行的 Phil 答案,这里有一些Apple 书面指南

0 投票
1 回答
147 浏览

macos - 如何获取 DriverKit 系统扩展日志输出

在DriverKit 系统扩展的 2019 年 WWDC 会话演示的这一部分中,您可以看到驱动程序,并且只有驱动程序的日志输出正在使用以下命令进行流式传输:

我没有得到任何输出,即使我添加--debug了我也不知道为什么。据我所知,我的扩展名列表与ps. 演示者的输出似乎来自kernel.development[0]并且我有kernel[0]. 我没有开发内核——这就是我什么都看不到的原因吗?

如果以上都不起作用,你怎么能方便地监控你的扩展的日志输出呢?

更新
谓词适用于您的捆绑 ID 或IOUserServerName(不确定哪个,它们在USBApp中相同),但仅适用于log show,它从偶尔写入的文件中读取,对我来说,我认为它是在重新启动时最后更新的:

log stream什么也没给我,即使用 . 替换谓词也是如此 --process pid

0 投票
1 回答
101 浏览

macos - DriverKit IOUSBHostInterface 的 CopyPipe 失败并出现 kIOReturnError (0xe00002bc)

为了我自己的启迪,我正在尝试使用 DriverKit 系统扩展从 USB 音频接口读取一些音频数据。

IOProviderClass的是IOUSBHostInterface。我可以成功Open()的接口,但CopyPipe()返回kIOReturnError0xe00002bc)。为什么我不能复制管道?

为了能够完全打开界面,我必须匹配,AppleUSBAudio所以我IOKitPersonalities明确匹配bConfigurationValue, bInterfaceNumber, idVendor,idProductbcdDevice键。此列表可能不是最少的。

ioreg我通常可以看到接口(有时只有我匹配的接口,尽管我认为这是一种退化的情况)。AppleUserUSBHostHIDDevice我在其他一些界面上看到了一个孩子。这可能是问题吗?通常,该设备既是 USBAudio 又是 HID 没有问题。我也试图不成功地匹配 HID。