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