OSX / Kernel extensions: problem locating a driver (that extends IOSCSIPeripheralDeviceType00)

Posted by LG on Stack Overflow See other posts from Stack Overflow or by LG
Published on 2010-03-25T00:56:54Z Indexed on 2010/03/25 1:03 UTC
Read the original article Hit count: 391

Filed under:
|
|
|
|

Hi,

I'm implementing a driver that extends IOSCSIPeripheralDeviceType00 as I need to send custom SCSI commands to a device.

I'm following the VendorSpecificType00 and SimpleUserClient examples and http://wagerlabs.com/writing-a-mac-osx-usb-device-driver-that-impl as an example.

I built my kernel extension and it loads fine with kextload and it shows up in kextstat.

The problem is that I can't locate it in my user space code.

Here's the important (I think) part of:

  • my driver code:
    #define super IOSCSIPeripheralDeviceType00 OSDefineMetaClassAndStructors(com_mycompany_driver_Foo, IOSCSIPeripheralDeviceType00)

  • my user client code:
    #define super IOUserClient OSDefineMetaClassAndStructors(com_mycompany_driver_FooUserClient, IOUserClient)

  • the plist:
    CFBundleIdentifier -> com.mycompany.driver.Foo
    IOCLass -> com_mycompany_driver_Foo
    IOUserClientClass -> com_mycompany_driver_FooUserClient
    IOProviderClass -> IOSCSIPeripheralDeviceNub

Here's how I try to locate the driver in my user space code (similar to SimpleUserClient):

dictRef = IOServiceMatching("com_mycompany_driver_Foo");
kernResult = IOServiceGetMatchingServices(kIOMasterPortDefault, dictRef, &iterator);

When I execute the code, iterator is 0.

I noticed that in the VendorSpecificType00 code, the localization of the driver is done differently:
dictRef = IOServiceMatching("IOBlockStorageServices");
kr = IOServiceGetMatchingServices(kIOMasterPortDefault, dictRef, &iter);
while ((service = IOIteratorNext(iter))) {
io_registry_entry_t parent;
kr = IORegistryEntryGetParentEntry(service, kIOServicePlane, &parent);
...
// We're only interested in the parent object if it's our driver class.
if (IOObjectConformsTo(parent, "com_apple_dts_driver_VendorSpecificType00")) {

I tried doing that but it didn't work either.

Thanks for reading and your help,
-L

© Stack Overflow or respective owner

Related posts about mac

Related posts about cpp

  • encfs error while decoding the data

    as seen on Ask Ubuntu - Search for 'Ask Ubuntu'
    I have installed encfs and started using it to secure all my personal & office data and it was working absolutely fine until 2 hours back. The setup is like this. I have a folder in Copy folder called OfficeData which gets synchronized with my Copy folder When I login into the system I use… >>> More

  • Use synergy with Physical KVM

    as seen on Super User - Search for 'Super User'
    I am using synergy on a Linux Mint computer as the server with a Mac as the client. I also have a physical KVM switch. The problem I have is that when ever I switch the physical KVM to my Mac, synergy stops working as in the keyboard and mouse don't work with the Mac. Thanks in advance! EDIT:… >>> More

  • Qt Linking Error.

    as seen on Stack Overflow - Search for 'Stack Overflow'
    Hi, I configure qt-x11 with following options ./configure -prefix /iTalk/qtx11 -prefix-install -bindir /iTalk/qtx11-install/bin -libdir /iTalk/qtx11-install/lib -docdir /iTalk/qtx11-install/doc -headerdir /iTalk/qtx11-install/include -datadir /iTalk/qtx11-install/data -examplesdir /iTalk/qtx11-install/examples… >>> More

  • Compiling OpenCV in Android NDK

    as seen on Stack Overflow - Search for 'Stack Overflow'
    PLEASE SEE THE ADDITIONS AT THE BOTTOM! The first problem is solved in Linux, not under Windows and Cygwin yet, but there is a new problem. Please see below! I am currently trying to compile OpenCV for Android NDK so that I can use it in my apps. For this I tried to follow this guide: http://www… >>> More

  • A Linker Resolution Problem in a C++ Program

    as seen on Stack Overflow - Search for 'Stack Overflow'
    We have two source files, a.cpp and b.cpp and a header file named constructions.h. We define a simple C++ class with the same name (class M, for instance) in each source file, respectively. The file a.cpp looks like this: #include "iostream" #include "constructions.h" class M { int … >>> More