iotlab-m3 and recent OS X update

Dear list,

I wanted to share my findings regarding flashing an iotlab-m3 board from OS X 10.11.

The good thing, the 3rd party FTDI driver is not needed anymore. Apple delivered a FTDI kernel extension for some releases already but I didn't find them working until this release. So, when connecting an iotlab-m3 board to your Mac without having the old FTDI driver loaded you should already be able to connect to the /dev/tty.usbserial-xxxxxB device with by executing

`BOARD=iotlab-m3 PORT=/dev/tty.usbserial-xxxxxB make term`

The bad thing, flashing fails as the Apple driver also assigns /dev/tty.usbserial-xxxxxA to the first serial device on the board and openocd can't claim it. I could successfully prevent it from doing so by these steps:

DISCLAIMER: backup first and you do this on your own reliability.

1. `sudo nvram boot-args=kext-dev-mode=1` We will change the kext's Info.plist so the signature will not be valid anymore.

2. Boot into recovery mode by holding cmd + r during start up

3. In recovery mode open a terminal and execute      `csrutil disable` to turn off System Integrity Protection.

4. Restart into normal mode an use your editor of choice to edit the file /System/Library/Extensions/AppleUSBFTDI.kext/Contents/Info.plist and comment out the <key> and <dict> entries for "AppleUSBEFTDI-6010-0" with <!-- ... --> See the snip below.

5. Restart into recovery mode again and enable System Integrity Protection again by   `csrutil enable`

6. Restart into normal mode and you should only see one remaining /dev/tty.usbserial-xxxB device. Flashing the board should work now.

If somebody found an easier approach, please let me know, else, good luck.

Best, Thomas

The snip:

<!--<key>AppleUSBEFTDI-6010-0</key>
<dict>
   <key>CFBundleIdentifier</key>
   <string>com.apple.driver.AppleUSBFTDI</string>
   <key>IOClass</key>
   <string>AppleUSBFTDI</string>
   <key>IOProviderClass</key>
   <string>IOUSBHostInterface</string>
   <key>InputBuffers</key>
   <integer>8</integer>
   <key>OutputBuffers</key>
   <integer>16</integer>
   <key>bConfigurationValue</key>
   <integer>1</integer>
   <key>bInterfaceNumber</key>
   <integer>0</integer>
   <key>idProduct</key>
   <integer>24592</integer>
   <key>idVendor</key>
   <integer>1027</integer>
</dict>-->