While building a new Arduino project on OS X El Capitan (10.11), I wasn’t able to connect using a serial port. Getting the serial port as an option was possible with some temporary changes to Apple’s System Integrity Protection.

For my project, I was using one of my homemade Arduino boards, which must be programmed using an FTDI breakout board (I use SparkFun’s USB to Serial Breakout - FT232RL). When I went to select the correct port in (Tools ... Port), only the Bluetooth port appeared, with no sign of my serial port.

I realized since this was a new laptop, that I needed to download the FTDI drivers, which I did from Sparkfun’s site. Even so, the serial port did not show up after rebooting.

After a bit of Googling, I discovered that Apple had instituted stricter permissions on kexts with El Capitan, specifically that kexts needed to be signed. This requirement can be turned off so that the FTDI drivers could be used, allowing the serial port to be available in

Turning off security features strikes me in general as a bad idea. For that reason, I recommend turning them off, programming the Arduino, then turning them back on.

To turn off the security so that the FTDI driver can be used, reboot into recovery mode by rebooting your computer, holding down command and R until the startup chime and a progress bar appear. Once the bar appears, you can let go of the keys. When the computer starts up, launch the Terminal from the Utilities menu. At the prompt, type the following two lines; the first line disables kext security, and the second line shows the security status

csrutil enable --without kext
csrutil status

You should see that kext security is disabled. Reboot the computer normally (not in recovery mode) for the changes to take place. Launch, plug in the FTDI device (for me, the Sparkfun USB to Serial breakout board), and you should be able to select it from the Tools ... Port menu. Load your code onto the Arduino and test it to make sure it is working. Once you are done, you should re-enable kext security.

To turn kext security back on, reboot into recovery mode and launch as before. This time, type these two lines to return to the default setup:

csrutil clear
csrutil status

The system should now show that the System Integrity Protection is enabled, with no mention of kext security being disabled. Reboot your machine normally (not in recovery mode) and you can work normally and securely.