Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save thmosqueiro/023235c177cfbbc03f30e7a666d9b848 to your computer and use it in GitHub Desktop.

Select an option

Save thmosqueiro/023235c177cfbbc03f30e7a666d9b848 to your computer and use it in GitHub Desktop.
Missing FTDI kernel module on nvidia jetson

Quick view of the problem

I can see FTDI device plugged in:

user@nose:~$ lsusb 
Bus 002 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC

But it won't mount as serial port:

user@nose:~$ dmesg | grep tty
[    0.000000] console [tty1] enabled
[    1.822624] serial8250.0: ttyS0 at MMIO 0x70006300 (irq = 122) is a Tegra
[    4.148550] console [ttyS0] enabled
[    4.154460] serial-tegra.0: ttyTHS0 at MMIO 0x70006000 (irq = 68) is a SERIAL_TEGRA
[    4.166339] serial-tegra.1: ttyTHS1 at MMIO 0x70006040 (irq = 69) is a SERIAL_TEGRA
[    4.178319] serial-tegra.2: ttyTHS2 at MMIO 0x70006200 (irq = 78) is a SERIAL_TEGRA

So I checked, and the support for the FTDI converter device is not set by default:

user@nose:~$ zcat /proc/config.gz | grep FTDI
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_FTDI_ELAN is not set

Thus we will need to compile it from the source...

Compiling FTDI module

Downloading the kernel source and uncompressing:

wget http://developer.download.nvidia.com/embedded/L4T/r21_Release_v4.0/source/kernel_src.tbz2
bzip2 -d kernel_src.tbz2
tar -xvf kernel_src.tar

Make sure you get the right kernel for you. Mine was version 3.10.40... First time I got it wrong!

Copying the current kernel config into the folder and running menuconfig:

zcat /proc/config.gz > ~/kernel/.config
cd kernel
make menuconfig

Then navigate to:

Device Drivers -> USB Support -> USB Serial Converter Support

Mark "M" for Module in the option USB FTDI Single Port Serial Driver (thanks to http://elinux.org/Jetson/Tutorial for the path). Save but don't exit yet!

Now it is important to check if the CONFIG_LOCALVERSION variable is matching your kernel. If yo don't make sure it is matching, you may see a message like this:

[   36.225047] ftdi_sio: version magic '3.10.40 SMP preempt mod_unload ARMv7 p2v8 ' should be '3.10.40-gdacac96 SMP preempt mod_unload ARMv7 p2v8 '

To do that, run:

user@nose:~$:/home/ubuntu/kernel# uname -a
Linux tegra-ubuntu 3.10.40-gdacac96 #1 SMP PREEMPT Thu Jun 25 15:25:11 PDT 2015 armv7l armv7l armv7l GNU/Linux

In the case above, the CONFIG_LOCALVERSION was set to -gdacac96. This is what we need to append to the kernel version DURING the compilation of our module. Fortunately, this can be done with menuconfig.

Go to the original menu, and select General Setup->Local Version. A window will open where you can set up the local version, which will be translated into the variable CONFIG_LOCALVERSION. Just type in the local conversion, which is what comes after the dase (with dash included!). In the case above, I typed "-gdacac96".

Save again. Exit the menuconfig.

Finally, we build the modules (read the make!):

make prepare
make modules_prepare
make M=drivers/usb/serial/

# copying back the drivers
sudo cp drivers/usb/serial/ftdi_sio.ko /lib/modules/$(uname -r)/kernel
sudo depmod -a

Checking again

After that, I jut rebooted (for safety) and tried dmesg again:

user@nose:~$ dmesg | grep tty
...
[ 1066.441572] usb 2-1: FTDI USB Serial Device converter now attached to ttyUSB0
@esologic

Copy link
Copy Markdown

Thank you so much!!

@felixstaniek

Copy link
Copy Markdown

You sir just saved my life! Thank you very much!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment