Even after loading the ftdi_sio driver and plugging in the OpenPort cable it wasn't getting assigned to a device. Some googling turned up that there was a patch (http://lists-archives.org/linux-usb-devel/12503-usb-serial-ftdi_sio-add-support-for-tactrix-openport-devices.html) made to the 2.6.18 kernel to add device IDs for the Tactrix cables.
I'm using Ubuntu 6.10 and didn't want to upgrade to (currently alpha) 7.04. So, to get the cable working here's what I did. The same general steps will work for other distros but the commands will be different.
1. Download and extract the kernel source files for your kernel.
You can find out what kernel you're running with the command "uname -r". In Ubuntu I opened Synaptic and installed the linux-source package. This downloaded a bzip archive to /usr/src. To extract...
- Code: Select all
cd /usr/src
sudo tar -xjf linux-source-2.6.17.tar.bz2
2. Edit the FTDI_SIO source files (see patch link)
- Code: Select all
cd /usr/src/linux-source-2.6.17/drivers/usb/serial
sudo gedit ftdi_sio.h
Now we need to add a few constants that define the product IDs for the 1.3 cables. Add the following lines...
- Code: Select all
/*
* Tactrix OpenPort (ECU) devices.
* OpenPort 1.3M submitted by Donour Sizemore.
* OpenPort 1.3S and 1.3U submitted by Ian Abbott.
*/
#define FTDI_TACTRIX_OPENPORT_13M_PID 0xCC48 /* OpenPort 1.3 Mitsubishi */
#define FTDI_TACTRIX_OPENPORT_13S_PID 0xCC49 /* OpenPort 1.3 Subaru */
#define FTDI_TACTRIX_OPENPORT_13U_PID 0xCC4A /* OpenPort 1.3 Universal */
They should be placed immediately before the following lines
/* Commands */
#define FTDI_SIO_RESET 0 /* Reset the port */
#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */
Now lets update the ftdi_sio.c file
- Code: Select all
sudo gedit ftdi_sio.c
again, we're going to add the following lines... For me this was right around line 500.
- Code: Select all
{ USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13M_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13S_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13U_PID) },
which will be placed at the end of the id_table_combined struct. Just paste them in so the syntax matches the rest of the entries.
3. Compile the ftdi_sio kernel module
- Code: Select all
cd /usr/src/linux-source-2.6.17
sudo make CONFIG_USB_SERIAL_FTDI_SIO=m M=drivers/usb/serial
4. Back up the old module and copy in the new module
- Code: Select all
cd /lib/modules/2.6.17-11-generic/kernel/drivers/usb/serial
mv ftdi_sio.ko ftdi_sio.ko.bak
cp /usr/src/linux-source-2.6.17/drivers/usb/serial/ftdi_sio.ko .
5. Automatically load the ftdi_sio kernel module on bootup
sudo gedit /etc/modules
add ftdi_sio to the list
6. Load the kernel module
run "sudo modprobe ftdi_sio". If you don't get any error messages then everything is working great. You can verify the module loaded by running "lsmod | grep ftdi".
Now when you plug in your OpenPort 1.3 cable it'll map to a serial port. In my case it creates the device /dev/ttyUSB0. If you're using a different kernel version then the commands above won't match exactly, but should be pretty close. A little trial and error can go a long ways. Good luck and happy logging / tuning.