Fixing the Prolific Driver on OS X

Prolific USB to Serial Adapter

Prolific USB to Serial Adapter

There are a couple different USB to serial adapters that you might use as a network engineer. The one pictured in the article is manufactured by Prolific, but sold by multiple different vendors. There’s also another manufactured by FTDI, which I’ve heard good things about, and of course the one built into recent Cisco hardware. The driver for the chip used by Cisco is conveniently included in OS X, but the FTDI and Prolific chips require their own drivers. Myself, I have used the Prolific cables for years and have been generally happy with them.

The best drivers for the Prolific come directly from the manufacturer, not the vendors that resell them. This is because the vendor provided drivers always seem to be out of date. However, the drivers from Prolific don’t work with all cables out of the box. I’m going to show you how to fix that.

1. Get the Driver

If you haven’t already, hop over to the Prolific site to download the driver and install it. Here’s the URL at the time of this writing:

http://www.prolific.com.tw/us/showproduct.aspx?p_id=229&pcid=41

If you are running OS X Yosemite, you may need to read this article to get the driver working: OS X Yosemite and Prolific USB Drivers.

2. Discover Magic Numbers

OK, the numbers aren’t really magic, but the driver will need them so that it can be associated with your USB device. Head to Apple -> About This Mac and and choose System Report. Select USB and scroll until you find your Prolific USB device. It should look something like this:

Watch for the Manufacturer (circled in blue). Then note the Product ID and Vendor ID (circled in red). We will be adding these to the driver.

3. Hex to Decimal Conversion

Calculator in hex mode

Calculator in hex mode

We need to convert the hex numbers to decimal. An easy way to do that is to run Calculator and hit Command-3. Click the “16” above the clear button to switch to hex and enter the number you want to convert (like 0x2008 from the example). Now click the 10 and you have the hex to decimal conversion. If you used 0x2008, you should get 8200. You need to convert both the product and vendor IDs.

4. Edit the Driver

Fire up your favorite terminal emulator and head here:

cd /System/Library/Extensions/ProlificUsbSerial.kext/Contents

At this point, you will need to either fire off a root shell or sudo everything.[1]

Safety First! Backup your Info.plist so you can fix the driver if you break it.

Edit Info.plist with your editor of choice. Scroll down and you will find a section that looks like this:
[code language=”xml”]
<key>0557_2008</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.prolific.driver.PL2303</string>
<key>IOClass</key>
<string>com_prolific_driver_PL2303</string>
<key>IOProviderClass</key>
<string>IOUSBInterface</string>
<key>bConfigurationValue</key>
<integer>1</integer>
<key>bInterfaceNumber</key>
<integer>0</integer>
<key>idProduct</key>
<integer>8200</integer>
<key>idVendor</key>
<integer>1367</integer>
</dict>
[/code]

What you want to do is copy and paste that section. I don’t think the <key> actually matters, but you can change it to match the hex version of the vendor and product ID. So if your vendor ID was 0x2478 for Tripplite with a product ID of 0x2008, you can change the key for your new section to:
[code language=”xml”]
<key>2478_2008</key>
[/code]
Then you will want to put the decimal version of that you converted before into the idProduct and idVendor sections. So for the Tripplite example you only need to change the idVendor and it would look like this:
[code language=”xml”]
<key>idVendor</key>
<integer>9336</integer>
[/code]

So the final product for my Tripplite version of the Prolific adapter works when I have this section added:
[code language=”xml”]
<key>2478_2008</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.prolific.driver.PL2303</string>
<key>IOClass</key>
<string>com_prolific_driver_PL2303</string>
<key>IOProviderClass</key>
<string>IOUSBInterface</string>
<key>bConfigurationValue</key>
<integer>1</integer>
<key>bInterfaceNumber</key>
<integer>0</integer>
<key>idProduct</key>
<integer>8200</integer>
<key>idVendor</key>
<integer>9336</integer>
</dict>
[/code]

5. Kick the Driver

Now you need to unload and reload the driver to load the new settings:

$ kextunload /System/Library/Extensions/ProlificUsbSerial.kext
$ kextload /System/Library/Extensions/ProlificUsbSerial.kext

You should now have a working USB device! This is a bit of a hassle. I recently found another way to solve this problem, but it’s not free and it’s another blog post.

FIN

9 thoughts on “Fixing the Prolific Driver on OS X

  1. Hi There. Thanks so much for working on this issue.
    After following your instructions, my available port appears as tty.OffRoad-PL2303-00001014. Is this correct? I seem to be able to transmit (indicated by the orange LED on the adapter, but am receiving nothing back from my device. Any thoughts?

  2. Great stuff here.

    I too seem to have the same problem with the driver sending, but not receiving. Am using the ATEN UC232A on OS X 10.10.3, and /dev/cu.usbserial and /dev/tty.usbserial are being created just fine.

    That said, I can open Fedora in a Parallels VM and it will work once I give it control of the device. It’s a good workaround, but using it natively under OS X is preferred.

  3. Not working here. Kext not privileged. Two days workaround failed for me. Come back to Manhattam serial converter.

  4. I think he is saying the original driver was for a cable with vendor ID 0x0557, but now he has a cable with the same Prolific chip from a different vendor (Tripplite). The same driver should work, but the new cable has a different vendor ID. He is adding a section to Info.plist to allow the new cable to use the driver. Am I right?

  5. This may be a dumb question, but in step 5 don’t you want to do kextunload BEFORE kextload? Please correct me if I’m wrong.
    Thanks,
    Victor

  6. Hi guys.

    A while ago on El Capitan, this solution worked. Now in High Sierra I’ve seen a challenge. Since the Kext is signed, any change to the Info.plist is resulting in this error:

    PROMPT# sudo kextutil -t /Library/Extensions/ProlificUsbSerial.kext/
    Basic validation of bundle failed (-67030): /Library/Extensions/ProlificUsbSerial.kext
    Untrusted kexts are not allowed
    Kext with invalid signature (-67030) denied: /Library/StagedExtensions/Library/Extensions/FD820D25-96D8-46D5-BC72-32D0074DEFF7.kext
    Bundle (/Library/Extensions/ProlificUsbSerial.kext) failed to validate, deleting: /Library/StagedExtensions/Library/Extensions/FD820D25-96D8-46D5-BC72-32D0074DEFF7.kext
    Unable to stage kext (/Library/Extensions/ProlificUsbSerial.kext) to secure location.

    If I only leave the default Info.plist setup, I can get it to work, but since the numbers are not aligned to the Vendor and Product, the port is not working. Apparently, it is not allowed to make changes to the Info.plist. I cannot downgrade the OS,

    Do you have the same issue?

    Thanks

Leave a Reply