Monday, January 31, 2011

Realtek RTL8187B USB Wireless and Mac OS X 10.6 Snow Leopard Howto



While Mac OS tries to look simple it still fails miserably at some 3rd party hardware support. For example a DIGITUS DN-7003GT USB Wireless dongle I got recently. Auto detection: fail.

The Digitus homepage promises Mac support. But no driver to download. Most Usb devices just re-use a specific wireless chipset. The driver for that chipset will work on every dongle, no matter which branding it uses. The DIGITUS branding contains just a RTL8187B chipset.

HOWTO get R8187 running


1. Download driver

http://218.210.127.131/downloads/downloadsView.aspx?Langid=1&PNid=24&PFid=1&Level=6&Conn=5&DownTypeID=3&GetDown=false&Downloads=true

Chipset: RTL 8187B, choose the OSX 10.5 one, even if you have OS X 10.6.
2. Install using the install command

Probably Mac OS X will say, that the driver is incompatible, but just install it for now.

3. Edit the driver

Now the driver needs to be changed for two reasons:

a) make it compatible to Mac OSX 10.6

edit the last few lines in /System/Library/Extensions/RTL8187Bl.kext/Contents/Info.plist
search for com.apple.kpi and replace update the version numbers to 8.1.0, so that you get:
<key>com.apple.kpi.bsd</key>
<string>8.1.0</string>
<key>com.apple.kpi.iokit<k/ey>
<string>8.1.0</string>
<key>com.apple.kpi.libkern</key>
<string>8.1.0</string>
<key>com.apple.kpi.mach</key>
<string>8.1.0</string>


b) make it compatible to the specific Digitus USB wireless dongle

Use "About this Mac"->"More Information" to find your USB Device ID.

Google helps to convert it to decimal:

Vendor ID 0x0bda in decimal is 3034
Device ID 0x8189 in decimal is 33161

However in the Info.plist I only have a different device ID. But I am able to locate the Vendor ID:
<key>idProduct</key>
<integer>33161</integer>
<key>idVendor</key>
<integer>3034</integer>
The Product ID just needs to be changed to match the actual product ID of the specific USB dongle.

4. Fix permissions of the kernel extension

With Mac OS X, permissions of kernel Extensions are very important! You can even go to Disk Utility and let it repair all disk permissions.

chown -R root:wheel RTL8187Bl.kext
chmod -R 755 RTL8187Bl.kext

5. Enable the kext in Mac OS X

Mac OS X keeps a cache of all kext, so we need to publish the newly compatible driver there:

rm /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext
kextcache -v 1 -a i386 -a x86_64 -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions

Make sure the device does not get listed as unsuccessful during the kextcache enabling!

6. Load the driver

Now just plug in your USB dongle to see if it is detected correctly. For debugging purposes, we can load the driver manually:


kextload -t RTL8187Bl.kext

Dmesg should now have the message:

RTL8187B: Ethernet address xx:xx:xx:xx:xx:xx

You can only use it with the Realtek USB WLAN Client Utility. Really uncomfortable. Is there any dongle out there that works on Mac without a utility?

14 comments:

  1. Hi, this works on 10.6 Snow Leopard, do you manage to get it work on 10.7 Lion?

    ReplyDelete
  2. sorry, have not yet tried it with 10.7 - if you try please tell me your results!

    ReplyDelete
  3. I have tried with 10.7 but failed to make it work. :(

    ReplyDelete
  4. Thanks man, works great in Snow Leopard.

    ReplyDelete
  5. thanks!! works great on my snow leopard 10.6.8 XD thanks stifler!! XD you look like stifler :D peace man~

    ReplyDelete
  6. Hi.. at start the method to obtain the acheivement of installing the driver Chipset/driver in mac os x snow leopart 10.6.3 dont see very clear for starters, like myself. But it did all worked out in the end. If you have insys 761su this is the method. i recomend priorly update to 10.6.
    Thanks in advance.

    ReplyDelete
  7. I AM NOVICE PLEASE SOMEBODY could explain me with more detail this STEP:

    5. Enable the kext in Mac OS X

    Mac OS X keeps a cache of all kext, so we need to publish the newly compatible driver there:

    thanks

    ReplyDelete
    Replies
    1. You just need to run the commands in the code block in your console. Then check the output response in detail if it correctly enabled the kernel extension as you wish!

      Delete
  8. i've plug in RTL8187 usb stick into os x lion. but the LED never lit up. any suggestion?

    ReplyDelete
  9. Hi what program do i use to edit the numbers in the paste is needed to change? thanks for the informations.
    Jorge

    ReplyDelete
  10. i have the kext wizard and tryed to change as you said the nunbers but i can't do it. regrets

    ReplyDelete
  11. Wonderful post! I am highly agree with the publisher's point of view.
    Important information corruption situation is always an Inconvenience for the person.
    As a way to solve this challenge, the authorities have proposed a lot of personal information restoration solutions.
    Just in case of loss of data issue, a user needs to have a knowledge of suitable important information restoration application.
    repair corrupt pst file

    ReplyDelete
  12. Thanks for post!
    I successfully lunched dongle IDU-2850UG-10G with chipset RTL8187L on board.
    I used same link and same operations from post only driver and name changed from B to L.
    My mac version 10.6.8 on MacBookPro. One problem was found – packets loss – about 1 percent. AirPort, for example, has 0 percent loss.

    ReplyDelete
  13. I'm pretty sure the reason it's not loading on later versions is it's for the x86 architecture and not x86_64.

    Notice: /System/Library/Extensions/RTL8187l.kext has debug properties set.
    Diagnostics for /System/Library/Extensions/RTL8187l.kext:
    Warnings:
    Executable does not contain code for architecture:
    x86_64

    Code Signing Failure: not code signed
    Warnings:
    Executable does not contain code for architecture:
    x86_64

    /System/Library/Extensions/RTL8187l.kext appears to be loadable (not including linkage for on-disk libraries).
    kext com.realtek.driver.RTL8187 100009000 is in exception list, allowing to load
    Load /System/Library/Extensions/RTL8187l.kext and its dependencies into the kernel [Y/n]? Y
    Loading /System/Library/Extensions/RTL8187l.kext.
    Can't load /System/Library/Extensions/RTL8187l.kext - no code for running kernel's architecture.
    Failed to load /System/Library/Extensions/RTL8187l.kext - (libkern/kext) requested architecture/executable not found

    ReplyDelete