【发布时间】:2022-11-27 20:17:35
【问题描述】:
我正在为连接了多个串行 UART 的 USB 设备开发 DriverKit 驱动程序。每个 UART 将代表 Mac 上的一个 cu.USBX 端口。我的驱动程序继承了 IOUSBHostDevice 类,它与设备 ID 匹配得很好。现在,我将创建一个继承 IOUserSerial 的新类来实现串口。但是,编译器说基类上没有新的运算符。似乎基本 OSObject 类阻止了像我在 IOKit 驱动程序中那样新建子类。由于类似的IOUserSerial/IOUserUSBSerial的例子很难找到,想请问有没有人能帮我解决这个问题。任何反馈和线索表示赞赏。以下是一些 sn-ps 来显示我的情况。
我原来的 IOKit 端口驱动继承了 IORS232SerialStreamSync。
class KextSerial : public IORS232SerialStreamSync
{
OSDeclareDefaultStructors( KextSerial ) ; // Constructor & Destructor stuff
:
}
我的 USB 驱动程序可以创建新的 KextSerials 并启动它们。
KextSerial * newSerial = new KextSerial;
if( !newSerial->init(0, 0) ){
goto FailExit;
}
但是,在我的 DriverKit 端口驱动程序继承了 IOUserSerial。
class DextSerial : public IOUserSerial
{
:
}
当我尝试按以下方式更新 DextSerial 时。
DextSerial * newSerial = new DextSerial;
编译器说“没有匹配函数来调用‘operator new’”
也许我不能在 DriverKit 中执行此操作,但我无法从 Apple 的开发网站上找到文档。
同时我尝试了 IOUserUSBSerial 和 OSObject,我得到了相同的错误消息。
【问题讨论】:
-
看了this project.我觉得我对DriverKit有误解。我应该使用 IOService::Create 而不是 new 运算符。我的后续问题是如何在没有 NewUserClient 方法的情况下使用 IOService::Create ?我必须有一个应用程序来触发驱动程序来实例化子服务吗?
标签: macos device-driver iokit driverkit