Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: SDHCI Driver



Chris,
Thanks for the pointers. I finally got around to working on this some more, and after much reading I have one more road block. After changing my class to be based of IOBlockStorageDevice the module will not load. When doing a "kextload -tv" I get the following error:


kextload: extension IOSDHCIBlockDevice.kext/ appears to be valid
Can't find superclass for 18IOSDHCIBlockDevice : 20IOBlockStorageDevice
kextload: a link/load error occured for kernel extension IOSDHCIBlockDevice.kext/
load failed for extension IOSDHCIBlockDevice.kext/
(run kextload with -t for diagnostic output)


Anyone have some advice, I will be glad to post code if needed.

Thanks,
Reggie

Chris Sarcone wrote:
Reggie --

From what I have read I want to base this off an IOBlockStorageDevice. Is this the best choice or should I base my driver off some other class?

Yes, it is the best choice.

Is there any example code showing how to do something simple like implement a ram drive and have it attached to the file system stack? If IOBlockStorageDevice is the best class, then is it as simple as creating my own versions of the various virtual functions?

Override the virtual functions, yes. After you allocate, init, and attach your subclass of IOBlockStorageDevice, all you need to do is call registerService() on it. IOKit will handle the rest.


Something like this (error checking removed for brevity):

IOService * mySubclass = OSTypeAlloc ( MySubclass );

mySubclass->init();
mySubclass->attach ( this );
mySubclass->registerService();
mySubclass->release();

How do I let the system know I want this to tie in to the rest of the file system stack, for example I see myself writing a single driver to handle both the transport and physical interconnect layers(will separate later), but how does the system know to tie these into the Device services layer above?

There's no reason to separate your driver into two layers if it's not required. By following the example above (with added error checking), IOKit will find your subclass of IOBlockStorageDevice and match the appropriate driver (IOBlockStorageDriver). IOBlockStorageDriver will make calls into your IOBlockStorageDevice subclass to find out the media block size, number of blocks, etc.


Sorry for all the newbie questions, but this is my first driver in the desktop word, I come from a much simpler embedded world and I'm not use to starting with so much work done for me.

Good luck!

-- Chris

------------------
6 Infinite Loop
M/S 306-2MS
Cupertino CA 95014
phone: (408) 974-4033
fax:   (408) 862-7577
email: email@hidden <mailto:email@hidden>





_______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-drivers mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-drivers/email@hidden

This email sent to email@hidden
References: 
 >SDHCI Driver (From: Reggie McMurtrey <email@hidden>)
 >Re: SDHCI Driver (From: Chris Sarcone <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.