I have a Kernel Extension based on SCSI Architecture Model Family for USB Mass Storage devices which deals with IOSCSIBlockCommandsDevice, IOSCSIPeripheralDeviceType00 and IOBlockStorageService. This driver extends class IOSCSIPeripheralDeviceType00 and its provider class is: IOSCSIPeripheralDeviceNub.
This driver is use to interact with External Storage Device over USB.
This driver works fine and loads in Catalina and earlier versions of macOS without any issue.
But this does not load in Big Sur Public Beta 5 version.
I load the driver post installation using kextload, and driver installation location is: /library/Extension/MyDriver.kext
When driver is loaded with below command and then machine is rebooted, no error is observed but still driver doesn't load:
sudo kextload -v /Library/Extension/MyDriver.kext
sudo kextcache -i /
Note: Driver and installer pkg is signed with kext developer id and Notarized. SIP is enabled. Xcode v11.5 and 12 Beta 5 also checked. SDK; 14/15 both checked.
I tried loading with kextutil command also and kextutil throws below error:
myimac@myimac-imac Extensions% sudo kextutil -vvvv -bundle-id com.company.xxxxxx.driver
Password:
Defaulting to kernel file'/System/Library/Kernels/kernel'
Executing: /usr/bin/kmutil load --bundle -identifier com.company.xxxxxx.driver
Error: Error Domain=KMErrorDomain Code=1 "Error occurred while building cache:
1: One or more binaries has an error which prevented linking. See other errors.
2: Could not use'com.company.xxxxxx.driver' because: Cannot find symbol for metaclass pointed to by'ZN30comcompanymydriver10superClassE'.Expected symbol'ZN28 IOSCSIPeripheralDeviceType00 10gMetaClassE' to be defined in another kext
com.company.xxxxxx.driver specific:
1: Cannot find symbol for metaclassSS pointed to by'EZNportable Expected to by'EZN10superClassE'. _ZN28IOSCSIPeripheralDeviceType0010gMetaClassE' to be defined in another kext
"UserInfo={NSLocalizedDescription=Error occurred while building cache:
1:One or more binaries has an error which prevented linking . See other errors.
2: Could not use'com.company.xxxxxx.driver' because: Cannot find symbol for metaclass pointed to by'ZN30comcompany_mydriver10superClassE'. Expected symbol'ZN28IOSCSIPeripheralDeviceType0010gMetaClassE' to be defined in another kext
com.company.xxxxxx.driver specific:
1: Cannot find symbol for metaclass pointed to by'ZN30com.company.xxxxxx.drive10superClassE'. Expected symbol'ZN28IOSCSIPeripheralDeviceType0010gMetaClassE' to be defined in another kext
}
Could not understand what's the error.
When driver is copied/installed to location: /Library/Extension/
user approval pop up does not come, which asks user to approve the kext in the System Preferences Security pane.
This is weird because this is required to work third party kext in BigSur.
So my question is:
What classes of kexts are deprecated??
Does System Extension and DriverKit support to send SCSI command to USB External storage??
Thread
(https://developer.apple.com/forums/thread/650611) discussion concludes that:
There is no support for IOSCSIArchitectureModelFamily classes like IOSCSIProtocolInterface in DriverKit yet. Support will be added in a future release.
Does it mean that KEXT of these types will be allowed in Big Sur till Driverkit support is added??
If yes then why my driver is not loading and if No then how to port KEXT using IOSCSIProtocolInterface to user space IOUSBInterfaceInterface??
If someone have pointers on how to resolve this issue, It would be helpful.
(I'll test this driver with SIP disabled too and will update)
Thanks You!!!
This driver is use to interact with External Storage Device over USB.
This driver works fine and loads in Catalina and earlier versions of macOS without any issue.
But this does not load in Big Sur Public Beta 5 version.
I load the driver post installation using kextload, and driver installation location is: /library/Extension/MyDriver.kext
When driver is loaded with below command and then machine is rebooted, no error is observed but still driver doesn't load:
sudo kextload -v /Library/Extension/MyDriver.kext
sudo kextcache -i /
Note: Driver and installer pkg is signed with kext developer id and Notarized. SIP is enabled. Xcode v11.5 and 12 Beta 5 also checked. SDK; 14/15 both checked.
I tried loading with kextutil command also and kextutil throws below error:
myimac@myimac-imac Extensions% sudo kextutil -vvvv -bundle-id com.company.xxxxxx.driver
Password:
Defaulting to kernel file'/System/Library/Kernels/kernel'
Executing: /usr/bin/kmutil load --bundle -identifier com.company.xxxxxx.driver
Error: Error Domain=KMErrorDomain Code=1 "Error occurred while building cache:
1: One or more binaries has an error which prevented linking. See other errors.
2: Could not use'com.company.xxxxxx.driver' because: Cannot find symbol for metaclass pointed to by'ZN30comcompanymydriver10superClassE'.Expected symbol'ZN28 IOSCSIPeripheralDeviceType00 10gMetaClassE' to be defined in another kext
com.company.xxxxxx.driver specific:
1: Cannot find symbol for metaclassSS pointed to by'EZNportable Expected to by'EZN10superClassE'. _ZN28IOSCSIPeripheralDeviceType0010gMetaClassE' to be defined in another kext
"UserInfo={NSLocalizedDescription=Error occurred while building cache:
1:One or more binaries has an error which prevented linking . See other errors.
2: Could not use'com.company.xxxxxx.driver' because: Cannot find symbol for metaclass pointed to by'ZN30comcompany_mydriver10superClassE'. Expected symbol'ZN28IOSCSIPeripheralDeviceType0010gMetaClassE' to be defined in another kext
com.company.xxxxxx.driver specific:
1: Cannot find symbol for metaclass pointed to by'ZN30com.company.xxxxxx.drive10superClassE'. Expected symbol'ZN28IOSCSIPeripheralDeviceType0010gMetaClassE' to be defined in another kext
}
Could not understand what's the error.
When driver is copied/installed to location: /Library/Extension/
user approval pop up does not come, which asks user to approve the kext in the System Preferences Security pane.
This is weird because this is required to work third party kext in BigSur.
So my question is:
What classes of kexts are deprecated??
Does System Extension and DriverKit support to send SCSI command to USB External storage??
Thread
(https://developer.apple.com/forums/thread/650611) discussion concludes that:
There is no support for IOSCSIArchitectureModelFamily classes like IOSCSIProtocolInterface in DriverKit yet. Support will be added in a future release.
Does it mean that KEXT of these types will be allowed in Big Sur till Driverkit support is added??
If yes then why my driver is not loading and if No then how to port KEXT using IOSCSIProtocolInterface to user space IOUSBInterfaceInterface??
If someone have pointers on how to resolve this issue, It would be helpful.
(I'll test this driver with SIP disabled too and will update)
Thanks You!!!