On a Mac or a Linux machine the FTDI question is rarely “which driver” and almost always “do I need one at all”. Linux has carried ftdi_sio in the mainline kernel for two decades, and Apple has bound the FT232R with its own driver since OS X 10.9. What goes wrong is different on each system: on the Mac an old FTDI kext fighting Apple’s driver, or a chip that is in System Information but has no port; on Linux a braille daemon stealing the port, a group you are not in, or a 16 ms timer you did not know existed. This guide gives the table of what binds 0403:6001 on each system, the official FTDI package for the cases where you do need it, and the thread or source behind every row. The Windows side, including the counterfeit lockout and the PID 0000 story, is on the FTDI FT232 driver for Windows page.
⬇ FTDI VCP driver for macOS, 1.6.0 (official download only)
Download from ftdichip.com (VCP Drivers page)
For reference, the two previous packages are archived and we hashed them on 21 Oct 2026: the 1.5.0 dext installer dmg (Internet Archive, 252,178 bytes) is SHA-256 f535d604d5098c4ecde0f213a80732cd45906339472ae30c0723959336a50b9c, the exact value in the Homebrew cask; the 2.4.4 kext dmg for macOS 10.14 (archived, 75,526 bytes) is f3343fc223f667e1dab0ecf9fd8fade525c261f120a1cd6b29f8806fa6bc4d8b. Linux needs no download: FTDI’s page says it in one line, “VCP drivers are integrated into the kernel.”

What binds an FT232R on each system
The rows come from FTDI’s AN_134 and VCP page, Apple’s developer forums, the kernel source and the Ubuntu bug tracker. “Nothing to install” means the port appears as soon as the chip enumerates.
| System | What binds 0403:6001 | Port name | Install? | What gets in the way |
|---|---|---|---|---|
| Mac OS X 10.3 – 10.8 | FTDI kext FTDIUSBSerialDriver 2.2.18 (10 Aug 2012) |
/dev/cu.usbserial-XXXXXXXX |
Yes, the dmg | Nothing else; the OS had no FTDI driver of its own |
| OS X 10.9 – 10.14 | Apple’s AppleUSBFTDI.kext (a plugin inside IOUSBFamily.kext) |
/dev/cu.usbserial-XXXXXXXX |
No | FTDI’s AN_134 §7.1: “A VCP driver for FTDI USB to serial converters (except the FT-X series) is provided as part of the kernel in OS X 10.9”. Installing FTDI’s 2.3 or 2.4.x kext on top creates a second claimant; AN_134 §3.2 says to disable Apple’s first |
| macOS 10.15 Catalina | Apple’s DriverKit extension com.apple.DriverKit-AppleUSBFTDI.dext |
/dev/cu.usbserial-XXXXXXXX |
No | Per the Apple Developer Forums (Jan 2020): “In Catalina, AppleUSBFTDK.kext is gone, and native FTDI device IDs are now supported by DriverKit.AppleUSBFTDI.dext”, and its Info.plist “only lists the native FTDI device IDs”. 10.15.1 shipped a bug that returned “port already in use” (thread), worked around with FTDI’s 2.4.2 |
| macOS 11 – 26, Intel and Apple Silicon | Apple’s dext; FTDI’s dext 1.6.0 if you install it | /dev/cu.usbserial-XXXXXXXX |
No for stock FTDI IDs | Monterey removed the old kernel driver, so there is nothing to unload (pylibftdi docs); custom VID/PIDs are the one reason for FTDI’s dext, see FAQ |
| Linux, any distro | In-tree ftdi_sio (drivers/usb/serial/ftdi_sio.c, GPL) |
/dev/ttyUSB0 |
No | Your user must be in dialout (Debian, Ubuntu) or uucp (Arch, Manjaro); ModemManager may hold the port for ~20 s, see the CP210x page |
| Ubuntu 22.04 before brltty 6.4-4ubuntu3 | ftdi_sio, then brltty claims it |
ttyUSB0 for a moment |
No, but update brltty | Bug 1958224 (Jan 2022): brltty’s udev rules “are claiming generic devices IDs” including 0403:6001; the fix adds a debconf question when such a device is plugged in during the upgrade. Unlike the CH340 case, this one was fixed in 22.04 itself |
| Linux with FTDI’s D2XX library | Nothing: the library needs the kernel driver out of the way | none | Yes, libftd2xx | AN_220 §2.1: sudo rmmod ftdi_sio and sudo rmmod usbserial before running a D2XX program; “When the FTDI device is power cycled or reset the VCP driver will be reloaded” |
Table 2: which kernel first knew your chip
“Linux has the driver” is true, but not for every chip on every kernel. We read ftdi_sio.c and ftdi_sio_ids.h at each release tag on GitHub to find the first mainline kernel that names each chip. The driver identifies the chip from the USB bcdDevice field, the same number Windows shows as REV_xxxx in the Hardware Ids, so the second column is what you see on both systems.
| Chip (name in dmesg) | bcdDevice / REV | Default PID | Clock base the driver assumes | First mainline kernel |
|---|---|---|---|---|
| FT232A, FT232B, FT2232C/D | 0200, 0400, 0500 | 6001, 6001, 6010 | 48 MHz / 2 | Already in 2.6.18 (Sep 2006), the oldest tag we checked |
| FT232R | 0600 | 6001 | 48 MHz / 2 | 2.6.21 (Apr 2007); absent in 2.6.20 |
| FT2232H, FT4232H | 0700, 0800 | 6010, 6011 | 120 MHz / 2 | 2.6.31 (Sep 2009); absent in 2.6.30 |
| FT232H | 0900 | 6014 | 120 MHz / 2 | 3.0 (Jul 2011); absent in 2.6.39 |
| FT-X (FT230X, FT231X, FT234XD…) | 1000 | 6015 | 48 MHz / 2 | 3.4 (May 2012); absent in 3.3 |
| Counterfeit chip with PID reset to 0000 by the 2014 Windows driver | any | 0000 | as detected | 3.18 (Dec 2014): “Add support for this VID/PID pair to correctly bind the driver on these devices” |
| FT2233HP, FT4233HP, FT2232HP, FT4232HP, FT233HP, FT232HP, FT4232HA | 2800, 2900, 3000, 3100, 3200, 3300, 3600 | 6040, 6041, 6042, 6043, 6044, 6045, 6048 | 120 MHz / 2 | 6.1 (Dec 2022); absent in 6.0 |
Three consequences. An FT232R works on any distro still receiving updates. An FT232HP or FT4232HA breakout needs kernel 6.1 or newer, which rules out Ubuntu 22.04’s stock 5.15 and Debian 11. And a counterfeit “FT232RL” that Windows bricked in 2014 still enumerates and works on Linux, because the kernel deliberately binds PID 0000. The full ID list is in the VID/PID lookup table.
macOS: checking and installing
- Plug the adapter in. System Information → USB must list a device with Vendor ID
0x0403(“FT232R USB UART” or similar). If it does not, the problem is the cable or the port, not a driver (problem 1 below). - Run
ls /dev/cu.*. On 10.9 or later you should already seecu.usbserial-XXXXXXXX, where the suffix is the chip’s serial number. If it is there, stop: nothing to install. - Only if you need FTDI’s own driver (custom VID/PID, or a vendor tool that asks for it): on macOS 11 or later download the 1.6.0 zip from FTDI, move the app to Applications, open it and click Install. macOS asks you to allow the system extension in System Settings → Privacy & Security, then restart. On 10.9 to 10.14, FTDI’s AN_134 §3.2 says to disable Apple’s driver first:
sudo kextunload -b com.apple.driver.AppleUSBFTDI, which lasts until the next reboot. - To remove FTDI’s dext, drag the installer app to the Trash and restart; the cask note explains the extension stays otherwise. To remove an old kext:
sudo rm -r /Library/Extensions/FTDIUSBSerialDriver.kextand reboot (AN_134 §4.2).
Linux: the three lines that tell you everything
Plug the adapter in and read the kernel log. A healthy sequence, from FTDI’s own AN_220, is:
ftdi_sio 9-1:1.0: FTDI USB Serial Device converter detected
usb 9-1: FTDI USB Serial Device converter now attached to ttyUSB0
Then ls -l /dev/ttyUSB0 shows the owning group, usually dialout, and groups must list it for your user; if not, sudo usermod -aG dialout $USER and log out and in. Third, the timer nobody tells you about: cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer returns 16, the default the driver sets at probe (priv->latency = 16 in ftdi_sio.c). The chip holds received bytes for up to 16 ms before sending a USB packet, which is why a request-reply protocol to an Arduino feels slow. Writing 1 to that file is allowed and takes effect when the port is next opened; Angus Gratton’s 2011 measurements put the round trip at 18–19 ms with the timer at 1–2 ms against 25 ms or more at the default (source).
Common problems, with the thread behind each
1. macOS: System Information shows “FT232R USB UART”, but no cu.usbserial port. In the Arduino forum thread (Ventura 13.1, Intel, old Mega, Jan 2025) the board worked on an M3 Mac with the same cable, and “another reboot fixed the problem”. If nothing appears in System Information at all, it is the cable: in the Monterey 12.1 thread one user installed FTDI’s driver and got a flaky port, the next one found only the Bluetooth port and “tried another USB cable and this time it worked”.
2. macOS 10.15.1: “port already in use”, errno 16, with nothing holding it. Reported with three different FTDI cables in the Apple Developer Forums; the workaround was FTDI’s VCP 2.4.2. If you are still on Catalina, that is the one version where FTDI’s kext is the fix rather than the problem.
3. OS X 10.9 to 10.14: two drivers, uploads fail or the port flaps. SparkFun’s install guide states the cause: “With Mac OS 10.9 (Mavericks) and later, Apple has built their own version of the FTDI VCP driver into the operating system”, and an FTDI kext installed by older software fights it. Either unload Apple’s (sudo kextunload -b com.apple.driver.AppleUSBFTDI, SparkFun and AN_134 §7.1) or delete FTDI’s kext (AN_134 §4.2). Keep one.
4. Linux: “Permission denied: ‘/dev/ttyUSB0′”. The Arduino IDE now prints the answer in the error itself, “Hint: Try to add user into dialout or uucp group” (Debian 12 thread, Mar 2025). The Ubuntu 18.04 thread shows the crw-rw---- root dialout listing to look for. Group membership only applies after logging out and in.
5. Ubuntu 22.04: port appears, then disappears. That is brltty claiming 0403:6001 as a braille display; bug 1958224 above. sudo apt update && sudo apt upgrade brltty gets the fixed package, or sudo apt remove brltty if you have no braille hardware. The same bug on a CH340 was not fixed in 22.04, which the CH340 on macOS and Linux page covers.
6. Homebrew: brew install --cask ftdi-vcp-driver is deprecated. The cask still points at the 1.5.0 dmg of June 2022 and was deprecated on 16 May 2026 “because: :unreachable” after FTDI replaced the file with the 1.6.0 zip. Install from FTDI’s page by hand.
FAQ
My adapter uses a custom VID/PID. Which driver? On macOS, Apple’s dext lists only FTDI’s stock IDs, so either install FTDI’s dext or ask Apple: a May 2025 thread shows Apple adding custom IDs to com.apple.DriverKit-AppleUSBFTDI through Feedback Assistant, with the catch that one batch landed only in Sequoia. On Linux, FTDI’s TN-101 and the kernel’s new_id interface bind any ID to ftdi_sio without a rebuild.
Do I need FTDI’s driver for the FT-X series on a Mac? On 10.9 and 10.10 yes: AN_134 says Apple’s driver covered FTDI converters “except the FT-X series”. On current macOS the FT-X enumerates on Apple’s dext; if yours does not, FTDI’s 1.6.0 is the fallback.
Why does my D2XX program on Linux say the device is busy? Because ftdi_sio owns it. AN_220 has you rmmod ftdi_sio first, and the port will come back after a power cycle. libftdi-based tools such as pylibftdi detach and reattach the kernel driver for you.
Related guides
- FTDI FT232 driver for Windows 11: versions, the counterfeit lockout and PID 0000
- CH340 on macOS and Linux: the brltty conflict and when you need nothing
- CP210x on macOS and Linux: the four owners of a busy port
- USB VID/PID lookup for bench tools
- Arduino IDE 2: why the port does not show up
- esptool step by step
Sources
- FTDI — VCP Drivers (table: Linux “integrated into the kernel”, macOS dext 1.6.0 of 2026-03-06, legacy 2.2.18 / 2.3 / 2.4.2 / 2.4.4)
- FTDI — AN_134 FTDI Drivers Installation Guide for Mac OS X, v1.2 (2015-04-15): §3.2, §4.2, §7.1
- FTDI — AN_220 FTDI Drivers Installation Guide for Linux, v2.1 (2017-06-07)
- FTDI — driver licence terms (clause 3.1.7, no redistribution)
- Linux kernel —
ftdi_sio.c(bcdDevice switch,latency = 16,latency_timersysfs) andftdi_sio_ids.h - Linux kernel — commit “add ‘bricked’ FTDI device PID” (23 Oct 2014)
- Apple Developer Forums — “Custom FTDI device ID support on Catalina?” (Jan 2020)
- Apple Developer Forums — port already in use on 10.15.1 (Oct 2019)
- Apple Developer Forums — custom VID/PID with com.apple.DriverKit-AppleUSBFTDI (May 2025)
- Apple — USBSerialDriverKit (available from DriverKit 19.0, i.e. macOS 10.15)
- SparkFun — How to Install FTDI Drivers, Mac
- pylibftdi — troubleshooting (Monterey removed com.apple.driver.AppleUSBFTDI; Linux auto-detach)
- Homebrew — cask ftdi-vcp-driver (1.5.0, sha256, deprecated 2026-05-16)
- Launchpad bug 1958224 — brltty claiming cp210x and FTDI devices on 22.04
- Angus Gratton — Notes on FTDI latency with Arduino (16 Oct 2011)
- Arduino forum threads 1344606, 948455, 1368866, 550942
