前言


今天在摸索 Centec v350 時候,想要在 Mac 上利用 screen 應用程式,連線 Serial Port 發現一件小問題。

原本在 Mac 上使用 RS-232 轉 Serial 的裝置應該是一件很輕鬆的的事情,找到本文的主角【Aten UC-232A】對應的驅動程式(官方下載點)利用 screen 程式指定控制終端設備/dev/tty.usbserialBaud rate 就能利用 COM port 輕鬆連入 Switch 但是,事情似乎不是你我想的那麼簡單…

1
$ screen /dev/tty.usbserial 128000

你會發現,當你裝好驅動程式之後,進去 /dev 卻發現找不到 tty.usbserial 檔案,這樣一來就沒辦法用了…

發現問題


原來是 Prolific 官方的 Driver 似乎不斷的更新,而 Aten UC-232A 就是使用 Prolific 的晶片,神奇的是 Vendor ID 和 Product ID 卻不在 Prolific 的 Driver 裡面(猜測是軟體更新太快,硬體太舊變成孤兒了),這會讓你沒辦法正常使用,即使你裝好了 Driver 接上 Aten UC-232A 的 USB to Serial 裝置

解決方法


檢查裝置的資訊

螢幕截圖 2014-07-29 11.11.16.png

接上 UC-232A 後, 打開 Mac 裡的【系統資訊】並檢查裝置的 Vendor ID 和 Product ID 在我的裝置底下看到的是

(Product ID: 0x2008 and Vendor ID: 0x0557)

請注意,我們需要把這個換成從 十六進位 的數值換成 十進位 的並且記下來

(Product ID: 8200 and Vendor ID: 1367)

下載安裝驅動程式

Prolific 的官方下載點 下載檔案名稱 md_PL2303_MacOSX_10_6up_v1_5_1.zip 解壓縮之後會出現 PL2303_MacOSX_v1.5.1.pkg 安裝後,需要重新啟動電腦。

修正 UC-232A Driver 的 plist 檔案

修改一下 plist 檔案需要管理者權限

1
$ sudo vim /System/Library/Extensions/ProlificUsbSerial.kext/Contents/Info.plist

可以利用搜尋找到 <key>IOKitPersonalities</key> 這行下面大概會是像以下這樣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<key>067B_2303</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>8963</integer>
<key>idVendor</key>
<integer>1659</integer>
</dict>

姑且先稱上面的裝置設定檔叫做 一個區塊 吧!你大概可以看到包含我剛剛上面所貼的總共有 兩個區塊

我們需要複製 其中一個區塊 作為參考的範例,並且把剛剛第一步所看到的 Vendor IDProduct ID 修改複製後的範例,後貼在第二個區塊的後面,實際做法只需要更改三個地方就是 idProductidVendor 把剛剛記下來的 Vendor IDProduct ID 的十進位值填入,另外就是 \ 標簽裡面用 0557_2008 替代

完成後大概如下面的樣子,你會擁有三個區塊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<key>067B_2303</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>8963</integer>
<key>idVendor</key>
<integer>1659</integer>
</dict>
<key>067B_2304</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>8964</integer>
<key>idVendor</key>
<integer>1659</integer>
</dict>
<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>

測試 Driver

執行下面的指令,你應該不會得到錯誤訊息。一旦成功後,你應該可以看到並且可以使用 /dev/tty.usbserial

1
$ sudo kextload /System/Library/Extensions/ProlificUsbSerial.kext

測試 Driver 的自動載入

重啟系統,接上 UC-232A 應該會自動載入,如果沒有順利的自動載入可以執行以下指令

1
$ sudo touch /System/Library/Extensions

再回到上一個步驟,【測試 Driver】試試應該可以成功。

參考資料