Solving USB problems; USB devices do not mount

Posted 26 March 2008 - 06:51 AM

There are some USB related threads on this forums here that kind of linger on without much replies or real solutions. I hope we can make one amalgamated thread that is all USB problems related

FEW IMPORTANT THINGS FIRST:

1) Make a habit of putting signatures in your post. It is very easy. Just go to control center and make one of your own or copy/paste signature from any post you like and edit it. Use mine if you like. This helps a lot for solving your problem and keeping sanity on part of the helper.

2) Make a habit of going through the whole thread. There will be lot of things that would be discussed that may be relevant to you. I learnt this way. All newbies learn this way. But as Mysticus C* calls it, only n00bies (=Stupid) don't read and therefore don't learn. So be a learner. I solved all my major and most minor installation problems without posting even once!! And I was a complete novice to begin with.

UPDATE (09/28/08): I just figured that after updating to 10.5.5, I started getting USB drives not mounting problem again. I am still using 9.2.0 kernel and system.kext. It appears that since 10.5.5, the IOUSBMassStorageClass.kext is now not included as a plugin in the IOUSBFamily.kext, but separately in Extensions folder. Somehow with 9.2.0 kernel and system.kext, the kernel never picks up the updated massstorageclass kext. So I went ahead and copied this kext to the plugin folder of IOUSBFamily.kext and corrected the permissions. The USB drives mount fine now with updated USB kexts but older kernel and system.kext. I have not investigated extensively, so there may be some other cause. But if anybody cares, then it solved this for me.

UPDATE: 06/01/0805/13/08: At the end of this update, you will find my original post dealing with a workaround procedure (Lingon Method) for solving USB, Firewire problems, etc. They may still work for you if nothing else works. But majority of people should get it solved with the method below and keep in mind all the points mentioned here. Credit goes to Mysticus C* for making a USB fix installer for an easy solution. So here we go!

( A ) CHECK YOUR BIOS FIRST:

You may have one or all of these options:enable: plug and playenable: usb legacy support (this is only needed if you want your usb hdd dvd/cd roms flash disks to be recognized at boot for various reasons, like booting off from usb dvdrom, or hdd or flash memory etc. If disabled, this does not affect at all while in the OS, since the OS (OSX or Windows) will load its appropriate drivers.)enable: usb keyboard and mouse (this will enable you to work with usb keyboard and mouse at boot. Otherwise, they may not work until any OS is loaded)

( B ) MAIN CAUSES OF USB NOT MOUNTING ISSUE:

(Some abbreviations: S: System L:Library E:Extensions C:Caches)

1) Incompatibility problem: The problem is caused from having different (non-matching) versions of kernel (mach_kernel) and system.kext. Say you have 9.2.0 kernel, but system.kext version is 9.2.2 This will cause USB not mounting issue...

How to check kernel version:The easiest way to check kernel is running terminal window (applications/utilities/terminal) and type:

uname -a

It will show a long line and at the end of the line it should say the version. Check the figure below.

How to check system.kext version:Open a finder window, go to /S/L/E and find the file named "system.kext" right click on it, and click on Get Info. In the Get Info window, you will see the Version number. Alternatively, you can right click on the kext, click "show package contents", and open the "info.plist" file (in text editor, for example). It should show a line like this:

Both should match in versions. If you have 9.2.2 kernel, then system.kext should also be 9.2.2. However, if your kernel and system.kext versions are not matching, that is then the root of the problem. So in order to fix these issues, use the installer provided below. Once you can confirm the details and you know you have non-matching versions, you can continue to Install Guide and follow the instructions

2) PCGENUSB2 problem: There is another possible way that things may not work as intended. This is however a very specific situation and may be needed for some of you. You must know your system details. There is a good chance there is someone out there who has a similar configuration. Therefore, searching and reading first really helps. The problem is called: "USB 2.0 aka high speed bus is not working". This problem exists on certain laptops (and old desktop configurations) that contains non-standard bioses, or some old motherboards. In order to fix this issue, "PCGENUSB2.kext" can be installed as part of plugins inside "IOUSBFamily.kext". Kalyway installation adds this by default. To check it, go to /S/L/E and right click IOUSBFamily.kext, open package contents, go to plugins folder and see if you have this kext there). What it does is that it forces the bios to release the information regarding the USB 2.0 controller, so that OSX can handle high speed bus as well. Nevertheless, most people have recent hardware configurations and may not even have this issue and much less need it. On the other hand, it seems for at least some of them, having PCGENUSB2 actually complicates or worsens their USB problems (for example, see noam's post here having a weird wireless USB issue). So it may be advisable to remove this unnecessary part and leave IOUSBFamily.kext vanilla.

This you may have to verify yourself if you need it or not. If you are sure that you have the USB 2.0 issue, that you must install the pcgenusb2 file, then do not delete this. So uncheck the last option in the installer (If the option is checked, the installer places a vanilla IOUSBFamily.kext that lacks this PCGENUSB2). A cautionary warning: although PCGENUSB2 helps for those folks who need it, it may cause some USB devices to not work as intended. Sorry, there is no other way... (or buy a new mobo )

If you are sure that you dont have this issue and don't need it, make sure you check the last option so that it installs a vanilla IOUSBFamily.kext.

1 ) Download the zip file2 ) Extract the file on your desktop or where ever you like3 ) Open the folder wherever you extracted the file4 ) Double click/run the file "USB Fix 1.3.mpkg"5 ) This has to be installed on the partition you are running OSX, so, no location change on this version6 ) Click on "Customize", to be able make your own choices...7 ) By Default: "9.2.0 System.kext only" and "USB Family Original Restore Backup" is selected.

Reasons for default selections:

I see that many people are using Kalyway 10.5.2 DVD, which by default has 9.2.0 sleep kernel, selected but installs 9.2.2 system.kext... To solve one of the two issues, you need to have correct system.kext. So this is why I made 9.2.0 system.kext only default

As default on the Kalyway 10.5.2 DVD, PCGENUSB2 is also selected. This is a full driver package that is needed only on handful of mobos/laptops which has problematic bios that doesnt release the USB 2.0 high speed bus information to OS as a result it causes High Speed ports to not work. However majority of the people do not have this issue... Therefore I made this by default selection for people who accidently installed pcgenusb2...

Although at this stage you can restart, I HIGHLY RECOMMEND Steps 8,9,10 that are optional but useful on some unique situations...

8 ) Open a finder window, and locate /S/L/Extensions.mkext file. Right Click on it, and select Move To Trash (enter password of course later)9 ) Locate /S/L/E/C/com.apple.kext.info file and same right click and move to trash10 ) Restart and at boot press F8 where it waits for 5 secs. Type: -v -f (this is gonna recreate driver caches and fast boot caches. the reason why we are doing 7,8 is sometimes these caches prevent new drivers from loading. Although Leopard has auto update function on these caches, sometimes better take precaution...)

WARNING: The installer is fairly safe but still use it at your own risk. Any problem, please report

DOWNLOAD(usb_fix_1.3.mpkg.zip)Update: 05/18/08: New Installer version 1.3; Installer fixed for force-deleting of kexts; Have been tested extensively. If you had used earlier version and were unsuccessful in getting your problem solved, I urge you to try this one out. There was little bug in the earlier version.

The below given information is ONLY FOR THOSE FOLKS who like to tinker on their own inside the hood just to make sure that the fix is performed 100%. If you are using going to use the installer, you don't need to read this. Here is what you can do to manually replace the relevant system.kext . The replacement below is for 9.2.0 system.kext . You can find other versions elsewhere or use pacifist to extract from the installer above.1) Remove the current non-matching system.kext2) Remove the Lingon created plist, eg USBstarter (it is in /Library/LaunchDaemons folder), if you have created one using the previous method I had described before (see the end of this post below)3) Put the 9.2.0 system.kext in /System/Library/Extension folder 4) Repair permissions:

5) OPTIONAL: If you don't need PCGENUSB2, then delete IOUSBFamily.kext and replace a vanilla copy in its place. Repair permissions for this one as well.5) Delete the extension.mkext file and the file inside /S/L/E/Caches folder (com.apple.kext.info) 6) Restart. Use -v -f option during boot during rebuild the cache (Press F8 at the darwin bootloader to get to the boot option, if needed). Plug in any USB drive. It should work wonders. Don't worry if you don't see IOUSBMassStorage.kext in Terminal using kextstat after boot. It gets invoked once you put a USB device and the kext will also be visible in Terminal

( D ) GENERAL INFORMATIONI am adding this section for tid-bits that we gather from discussions in this thread.[1] This solution should fix your Firewire issues (that are related to this non-matching problem) as well. Firewire devices should mount now.

[2] If you happen to replace the IOUSBFamily.kext but figured that you actually need PCGENUSB2, here is a place to get IOUSBFamily.kext that has the PCGENUSB2.kext in its plugins.http://osx86.wikidot...ities-resources

[3] If you are a blackberry user and you get something about the current being insufficient for charging check drivers etc, check Toonces Katt's post #212 for a fix.

[4] If you have matching kernel and system.kext but still find that USB devices do not mount or would only mount sometimes, the problem may be caused by other hardware such as problematic card readers. Once again, check Toonces Katt's post #223 how removing the card reader (a cheap Dell one) helped him diagnose and solve the USB problem.Happy USB plugging!

Below is my original post for posterity and for learning purposes. You can also use this if you can not solve the problem using the above method. I would also suggest reading this so that you get acquainted with troubleshooting mac problems.

[UPDATES]The updates below were using Lingon method.

Update 04/30/08: McKack and BoNeS solved problem of Firewire devices not mounting with this method as well. See post #54 and post #231 by adding daemons for:

See the attachment below for a screenshot of Lingon app and the things that need to be checked.Lingon.pdf742.57KB2022 downloads

Update 04/08/08: Make sure you check the box next to Enable and then hit save. If there are more than one kext that does not get loaded, create daemon for each kext and enable and save.

[/UPDATES]

Alright, here is my USB problem and how I resolved it and I believe it probably can resolve some other issues as well.

My USB devices like pen drives or USB external storage disks won't mount in Leopard 10.5.2. Well, let me qualify my statement. On my configuration, they would do so with stock kernel but then I won't have shut down and restart. So I installed Netkas' sleep/shutdown kernel (modified toh 9.2.0), which works absolutely well for me, but now USB devices do not mount. I read somewhere that at every startup, kexts get their links from the kernel. So one has to appropriately match kernel with kexts. So the system.kext and kernel should be compatible. Since Netkas' kernel is 9.2.0 (and not 9.2.2), some stuff doesn't work (I hope he will release updated kernel).

So I confirmed that IOUSBMassStorageClass kext does not get loaded during startup. In Terminal,

sudo -s

enter password (don't worry if you don't see it )

kextstat | grep "USB"

There is no com.apple.iokit.IOUSBMassStorageClass loaded.

(There is also a small app called USBProber available from apple in its USB debug kit that you can also use to see directly to check what kexts are loaded for USB and globally).

So after looking for a way to create an applescript or shell commands that would run at startup, I found little overwhelming for this rookie. I could not manage to run the command in the above link with script. Then I came across this little app, Lingon, from Peter Borg

Install thisclick new script/user daemon Box 1: Name it as something (eg. USBstarter)Box 2: put the required command or app; in this case:

kextload -b com.apple.iokit.IOUSBMassStorageClass

Box 3: select the second option "run it when it is loaded by the system at startup or login"

Check the box next to "Enable" (right top corner)

Hit Save. It will recommend restart. Restart and enjoy USB mounting all the time with Shutdown/restart/sleep (with S3) all well. [I have seen that if I clean out kernel and other caches etc using a system utility like Cocktail , the plist (or in other words, kext won't load). It needs double reboot to get it loaded again. But after that, it will get loaded everytime. If for some reason, it still does not work, open lingon again, uncheck "Enable" and check it back again and hit save. Now it should load. I am not sure why this is so, since the USBstarter.plist is always present in the /Library/LaunchDaemons folder]

It should solve many other USB problems also. Please do post your USB problems and solutions you have come across.

Posted 26 March 2008 - 08:23 PM

plprado

InsanelyMac Geek

Members

107 posts

Well, at first thanks for this.

I also had this problem at least twice before. Then I found out (don´t remember where) that this happens when system.kext do no match your kernel version. To check this you have to go to /System/Library/Extensions/ then find your system.kext in there. Ctrl+click it and select "show package contets", then open the file "info.plist" in the TextEdit app. In there you´re gonna see something like this:

So, these numbers must be the same as your kernel version. In my case 9.2.0. If it´s different you have to replace this system.kext with one that matches your kernel, and that´s it. At least all the times I had this problem I solved it this way. Only if there´s more than a cause to this same issue...

Posted 26 March 2008 - 10:56 PM

LioNEXT

InsanelyMac Geek

Members

204 posts

Gender:Male

Well, at first thanks for this.I also had this problem at least twice before. Then I found out (don´t remember where) that this happens when system.kext do no match your kernel version. To check this you have to go to /System/Library/Extensions/ then find your system.kext in there. Ctrl+click it and select "show package contets", then open the file "info.plist" in the TextEdit app. In there you´re gonna see something like this:<key>CFBundleShortVersionString</key> <string>9.2.0</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>9.2.0</string> <key>OSBundleCompatibleVersion</key> <string>9.2.0</string>So, these numbers must be the same as your kernel version. In my case 9.2.0. If it´s different you have to replace this system.kext with one that matches your kernel, and that´s it. At least all the times I had this problem I solved it this way. Only if there´s more than a cause to this same issue...

I do know that during startup, kexts are loaded by taking links from the kernel. so they should match. But since you mentioned this solution, I am wondering if you are simply stating the fact that they should be compatible with each other or do you mean one can modify this after the update without any kernel panic. I mean, right now I have all the recent, including time machine updates, without encountering any problem at all. So i had the stock kernel 9.2.2, i believe. Then in order to get shutdown/restart, i installed Netkas' TOH kernel 9.2.0. Thats when this USB problem came in. So if I go and change the most recent system kext (with the recent updates) to have values 9.2.0, will that solve the problem. Not to mention that the solution I provided is already supereasy and in no way increases boot time or any other drawback. thanks.

Thanks man iv been posting about this i dont know how many times I will give your idea a try out 2moro hopefuly! . If I get lost will you be able to walk me through it in a pm or something?once again thanks man!My usb problems are wierd... they dont mount if i install leopard on my laptops HDD... but if i have leo on a external HDD and boot it on my laptop USB mount perfectly!

sure. let me know. btw, i saw in your signature that you have pretty much my configuration and you are thinking of 8800GT from 8600. I am right now looking for the same and trying to decide between 9600GT and 8800GTS or other vesions of 8800GT. Have you looked into what is best card without any patch. Personally, i like XFX xards. my current xfx 8600GT gave no problem at all.

Posted 26 March 2008 - 11:05 PM

ah sorry man you just reminded me my sig is wrong! mine is a 8600 GTS. I have yet to get it working at all in leopard After using any kexts or installations for it it breaks the installation..

I am also thinking about the 9600gt depending on price (which isnt looking so bad.. i supose) Allot of users here are getting 8800's to work fine.. so I might still grab one of them they seem to be rapidly going down in price

Posted 27 March 2008 - 03:56 AM

ah sorry man you just reminded me my sig is wrong! mine is a 8600 GTS. I have yet to get it working at all in leopard After using any kexts or installations for it it breaks the installation..

I am also thinking about the 9600gt depending on price (which isnt looking so bad.. i supose) Allot of users here are getting 8800's to work fine.. so I might still grab one of them they seem to be rapidly going down in price

this is what was only need for me. is your card above 256 MB. i think 8600 GT work pretty much fine. in all cases, visit OS X 86 wiki for compatibility list to see what method works for you card. 8600 GT(s) from different vendors need patching different ways.http://wiki.osx86pro...10.5.2#nVidia_2

Posted 27 March 2008 - 12:44 PM

this is what was only need for me. is your card above 256 MB. i think 8600 GT work pretty much fine. in all cases, visit OS X 86 wiki for compatibility list to see what method works for you card. 8600 GT(s) from different vendors need patching different ways.http://wiki.osx86pro...10.5.2#nVidia_2

what did I miss, thought this was about usb problems and not your stupid graph card !

Posted 28 March 2008 - 04:05 AM

ergosteur

InsanelyMac Sage

Members

276 posts

Gender:Male

Location:Brampton, Ontario, Canada

Thanks for this, the system.kext/kernel version discrepancy was my problem. I had changed my kernel to try and get sleep working, but I didn't notice that the sleep kernel was 9.2 and i'm running 10.5.1.

Posted 29 March 2008 - 06:49 AM

balder, what name did you give to the script? Be sure that is only one word. Anyway i realized that not always load the driver so you´llhave to do it using terminal.

I saw a few times and consistently that if i clear caches using one of the system utilities, this lingon will not activate it. So I would simply open the lingon again, click on the named daemon (in my case i named it USBstart), disable and then again renable, hit save, give the password. And now it will be active again and also on next boots. only when i clear up caches that i run into this problem. Nevertheless, clicking on lingon and reactivating is better than remember the command and executing it in terminal.

HeyThat solution with Lingon appz didnt help for my usb problem, think I have tried everything now,except for the right solution Acer 9815 Laptop Leopard 10.5.2

Balder,can u describe ur USB problem to see if it is even USBMassStorageClass related. if it is not picking up IOUSBFamily, so that ur USB mouse or keyboard may not be activated, then you may add that also. i guess it might be com.apple.iokit.IOUSBFamily. (in Terminal type "kextstat" to see what kexts are loaded during normal times). you may then use Lingon to run that command on every boot and every hour or always. something like that i hope may help u.

Posted 08 April 2008 - 01:59 AM

LioNEXT

InsanelyMac Geek

Members

204 posts

Gender:Male

Hi all,

thanks for the hints with the kext not loading!!!

I actually found my solution with this information ;-)So... If one of you already tried the fix above, and still not getting your devices mounted/recognized, make sure that com.apple.driver.AppleUSBComposite ALSO is loaded.

After a diff about the two kextstat outputs (one with USB connected at startup, and the other without) i found out, that this kext wasnt loaded too.

So these two commands did it for my configuration (9.2.0 shutdownFix):

# sudo kextload -b com.apple.driver.AppleUSBComposite# sudo kextload -b com.apple.iokit.IOUSBMassStorageClassIf you want do automate this at startup, read the first post and combine this information ;-)GreatingsFlash

I am glad you found this helpful and that it solved problem for someone besides me.

Actually, I figured that small nifty application is very nice for running some command during startup (the software makes a plist in LaunchDaemons in the Library) without accruing any performance penalty or slowing of boot time. Further, no applescripting needed.

Posted 09 April 2008 - 01:41 AM

Johnny MacDonald

InsanelyMac Protégé

Members

6 posts

hey guys
this forum is great
i have tried everything you guys have said with no change in performance tho
my issue is i have recently upgraded to leopard every since no usb
the only way i can get a device to mount is if i plug it into the macbook before start up, and after i eject it it wont recognize until again i turn it off plug it in restart
its a huge pain if anybody has a solution please HELP!

Posted 09 April 2008 - 06:57 AM

LioNEXT

InsanelyMac Geek

Members

204 posts

Gender:Male

hey guys this forum is great i have tried everything you guys have said with no change in performance thomy issue is i have recently upgraded to leopard every since no usb the only way i can get a device to mount is if i plug it into the macbook before start up, and after i eject it it wont recognize until again i turn it off plug it in restartits a huge pain if anybody has a solution please HELP!

In Terminal type: kextstat | grep "USB"

see what CFBundleIdentifier (or kexts are loaded) and see if you get all these (post here if you are n00b):

In my case, it was only the last one (IOUSBMassStorageClass) which would not load. Therefore, I used the above Lingon application to create a daemon to run that command at every startup, so that the kext was loaded. Ever since I had no problem. (my case was same, upgrading to latest leopard upgrade and no USB)It looks to me though all of these USB's kexts must be loaded. So if you find one or more of these not loaded, then create separate daemon for each of the kexts using the method i described. Enable each of them, and save. It should work fine. Let us know if this works.

[EDIT: It will also be better if you first manually load these kexts in Terminal usingkextload -t /System/Library/Extensions/ExtensionNameHere.kextFor eg., manually loading IOUSBMassStorageClass.kext fired up all the attached USB devices immediately. So surely, that diagnosed the problem for me. My understanding is that kexts and kernel should match for proper loading. So also making sure kexts are recent will help, or at least should not conflict with kernel.]

In my case, it was only the last one (IOUSBMassStorageClass) which would not load. Therefore, I used the above Lingon application to create a daemon to run that command at every startup, so that the kext was loaded. Ever since I had no problem. (my case was same, upgrading to latest leopard upgrade and no USB)It looks to me though all of these USB's kexts must be loaded. So if you find one or more of these not loaded, then create separate daemon for each of the kexts using the method i described. Enable each of them, and save. It should work fine. Let us know if this works.

[EDIT: It will also be better if you first manually load these kexts in Terminal usingkextload -t /System/Library/Extensions/ExtensionNameHere.kextFor eg., manually loading IOUSBMassStorageClass.kext fired up all the attached USB devices immediately. So surely, that diagnosed the problem for me. My understanding is that kexts and kernel should match for proper loading. So also making sure kexts are recent will help, or at least should not conflict with kernel.]

hey that helped alot i ran the terminal command and i am also missing the IOUSBMassStorageclass.kext same as you werebut Lingon is all set up and does not seem to do anything, and terminal says i must be running as a root to load modules into the kernalim sure im missing something really simple but i cant seem to figure out how to get this .kext working

Posted 10 April 2008 - 03:07 AM

LioNEXT

InsanelyMac Geek

Members

204 posts

Gender:Male

hey that helped alot i ran the terminal command and i am also missing the IOUSBMassStorageclass.kext same as you werebut Lingon is all set up and does not seem to do anything, and terminal says i must be running as a root to load modules into the kernalim sure im missing something really simple but i cant seem to figure out how to get this .kext working

For Terminal work, most of the time root login is required for the hack changes.So always typesudo -sand then enter your password.that will login to your root account. Now you can test the kext and manually load them with the command above. if loading the command fires up your USBs, then you are good. You just have to make sure, everything is properly there in the Lingon app.

Remember, you will have to restart to see the effect. If it does not, then you either you have not enabled it, or there is another kext that is missing or the kext is corrupted (in which case again you can manually load with kextload -t command to see if everything is ok or not).