Fix USB problem for Mac OSX iDeneb 10.5.5

Heres how to fix the USB problem for my Mac OSX Leopard iDeneb 10.5.5 packaging:

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/08 05/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 play
enable: 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:
CODE
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:
CODE
<key>CFBundleVersion</key>
<string>9.2.2</string>

Here is how it should look like:
Attached File  kernel_and_systemkext_version.jpg ( 235.1K ) Number of downloads: 3684

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.

How you may got this pcgenusb2 file?:

* You deliberately installed it yourself.
* You installed Kalyway 10.5.2 dvd with default settings (by default, PCGENUSB2 is selected in the patches section).

What to do about it?:

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 smile.gif )

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.

( C ) HOW-TO GUIDE FOR FIXING THE ISSUE “USING USB fix 1.3.MPKG” (aka USB Fix Installer)

1 ) Download the zip file
2 ) Extract the file on your desktop or where ever you like
3 ) Open the folder wherever you extracted the file
4 ) 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 version
6 ) 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 trash
10 ) 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 smile.gif

Attached File  usb2rd1.png ( 122.57K ) Number of downloads: 2738

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.kext
2) 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:
CODE
sudo chown -R 0:0 /S/L/E/System.kext
sudo chmod -R 755 /S/L/E/System.kext

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

Attached File  System_9.2.0.kext.zip ( 151.92K ) Number of downloads: 2354

( D ) GENERAL INFORMATION
I 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.com/utilities-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!

LioNEXT

————————————————————————————————————–
*******************************************************************************
————————————————————————————————————–

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:

kextload -b com.apple.iokit.IOFireWireAVC
kextload -b com.apple.iokit.IOFireWireSBP2

Update 04/09/08:
Following USB related kexts should be loaded for the devices to work ( check with kextstat | grep “USB” ). Also, see post #17 below.

com.apple.iokit.IOUSBFamily
com.apple.driver.AppleUSBUHCI
com.apple.driver.AppleUSBEHCI
com.apple.iokit.IOUSBUserClient
com.apple.driver.AppleUSBHub
com.apple.driver.AppleUSBComposite
com.apple.iokit.IOUSBHIDDriver
com.apple.iokit.IOUSBMassStorageClass

See the attachment below for a screenshot of Lingon app and the things that need to be checked.
Attached File  Lingon.pdf ( 742.57K ) Number of downloads: 1142

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,
CODE
sudo -s

enter password (don’t worry if you don’t see it biggrin.gif )
CODE
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).

Now if you type in Terminal:

CODE
kextload -b com.apple.iokit.IOUSBMassStorageClass

So now the appropriate kext would load and everything would work.
(credits to TheG33K:
http://forum.insanelymac.com/index.php?s=&…st&p=532849 )

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

http://lingon.sourceforge.net/

Install this
click new script/user daemon
Box 1: Name it as something (eg. USBstarter)
Box 2: put the required command or app; in this case:
CODE
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. smile.gif

[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.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s